OS: I/O: Stream

 20th August 2020 at 2:19pm

Stream(流)是对输入输出设备的一种抽象,底层库(如 glibc、Java 标准库等)以流的形式提供高级 API,方便开发者使用。

Stream Buffering

Stream buffering 是指应用程序在处理流时,不一个一个字节处理,而是累积到一定量再做处理。特别地:

  • 对于读,等输入设备积攒了一定量的数据时,API 再批量返回数据。比如从网卡读数据
  • 对于写,等写入的内容积攒到一定量,再触发批量写入。用 open 打开一个常规文件,默认是 buffered 的

一个流有几种 buffering 形式:

unbuffered传输的内容会尽可能快被读取或者被发出;Linux 中 stderr 默认为 unbuffered
line buffered一旦遇到换行符便即刻传输;Linux 中 stdin 默认为 line buffered
fully buffered也叫 blocked buffered,或者简单的 buffered;表示累积到一定量再传输;Linux 中 stdout 默认为 buffered

参考: