流是什么?什么叫重定向?

简介: 流是什么?什么叫重定向?

什么叫流?

C++中把数据之间的传输操作称为流,流既可以表示数据从内存传送到某个载体或设备中,即输出流,也可以表示数据从某个载体或设备传送到内存缓冲区变量中,即输入流。

就像水流一样,从一端流向另外一端,是有方向有起点和终点的动态流动的过程。

如何从流中提取和向流中插入数据呢?

运算符 <<和>>的重载

通常我们会将重载<< 和 >> 运算符(overloaded)以用于输入/输出流操作,也就是说,我们之所以能用cout<<、cin>>输出输入就是因为重载了<<和>>运算符。

<<运算符用于输出,即流插入

<<将右侧的数据发送到左侧的输出流,cout<<"hello"的意思就是将字符串”hello“插入到输出流cout中,而cout的默认目标是输出到显示器。数据往显示器或者控制器的方向流动

>>运算符用于输入,即流提取

>>将左侧的数据发送到右侧的变量中,cin>>num的意思就是从cin流中提取数据到变量num中,而cin的流

来源默认是键盘。数据从键盘到变量流动

重定向

重定向通常指的是 改变标准输入、标准输出或标准错误输出流的方向

理解输出输出重定向

本来cout将数据输出到显示器,此时显示器就是数据的目的地。如果将这个输出的目的地修改为其它外设或文件,我们就把这种 修改输出的方向的行为叫做输出重定向。同理,输入重定向就是修改数据的来源,比如将数据的来源地从键盘修改为某个其它文件。

C++有哪些流类

我们知道C++的cout、cin是通过标准库提供的 <iostream> 头文件中的输入输出流类实现的。也就是说,cout和cin本质上就是某个类的实例化对象。

在cplusplus上我们可以看到

ios_base类

ios_base是所有流类的基类(不仅仅是输入输出流),它定义了流的基本特性和操作,例如条件状态、缓冲区管理等。ios是ios_base的派生类,提供了输入/输出操作,如">>“和”<<"操作符。

ios类

ios是基流类,是所有输入/输出流类的基类。是标准库中定义的一个抽象基类,不能被直接实例化。ios基类为所有流定义了基本的输入/输出操作,例如缓冲区管理、条件状态的处理等。

由于ios是抽象基类,因此不能直接创建ios类型的对象。标准库提供了从ios派生的若干子类,如istream和ostream,用于实现具体的输入/输出功能。

ios类的四个直接派生类:输入流类istream、输出流类ostream、文件流类fstreambase、串流类strstreambase。

istream、ostream类以及iostream库

istream、ostream是分别输入流和输出流,是ios类的派生类。

istream类定义了对设备或者buffer的操作方法,包含read、readsome、>>等读取操作。

ostream类定义了若干输入输出函数,主要用于错误处理、流的刷新以及流输入输出方式的控制。 iostream是C++标准库中的一个联合了istream和ostream类的输入输出流类库。

常用流类列表

相关文章
|
6月前
|
存储 C++ iOS开发
C++ 文件和流
C++ 文件和流
42 0
|
6月前
|
存储
文件底层的深入理解之文件输入输出重定向
文件底层的深入理解之文件输入输出重定向
|
6月前
|
程序员 C++ iOS开发
c++文件和流
c++文件和流
37 0
|
6月前
|
网络协议 Shell
使用输入输出重定向与管道命令——重定向
使用输入输出重定向与管道命令——重定向。
53 0
|
6月前
|
Linux Shell
使用输入输出重定向与管道命令——管道
使用输入输出重定向与管道命令——管道。
51 0
|
网络协议 索引
HTTP/2 协议(帧、消息、流简单的抓包分析)
HTTP/2 协议(帧、消息、流简单的抓包分析)
643 0
|
C语言
【文件描述符|重定向|缓冲区】(二)
【文件描述符|重定向|缓冲区】(二)
76 0
|
Java Linux C语言
【文件描述符|重定向|缓冲区】(一)
【文件描述符|重定向|缓冲区】(一)
98 0
|
算法 网络协议 前端开发
重发和重定向有什么区别与重定向应用
重发和重定向有什么区别与重定向应用
211 0
重发和重定向有什么区别与重定向应用
|
安全 数据安全/隐私保护
Web---字节输出流和字符输出流的共存问题、转发、重定向、请求包含知识点讲解(2)
Web---字节输出流和字符输出流的共存问题、转发、重定向、请求包含知识点讲解
126 0
Web---字节输出流和字符输出流的共存问题、转发、重定向、请求包含知识点讲解(2)