Java输入输出(IO)和流的基本概念
输入输出(I/O)是程序与外部设备或其他计算机交互的操作:从键盘读、从本地或网络文件读、往外写。Java 把这些操作用流统一接口表示,程序设计更简单。
流(Stream)指输入输出时各部件之间的数据流动。按传输方向分成输入流与输出流。流里既可以是原始二进制,也可以是按某种格式编码后的数据。
一、输入流与输出流
Java 把不同类型的输入输出源抽象为流,其中进出的数据叫数据流(Data Stream)。对程序来说:输出流往存储介质或通道写,输入流从介质或通道读。流式 IO 的特点是沿数据序列顺序进行。
| 特性 | 含义 |
|---|---|
| 先进先出 | 最先写入输出流的数据,最先被输入流读到 |
| 顺序存取 | 按写入顺序读写一串字节,不能随机访问中间数据 |
| 只读或只写 | 一条流只能是输入或输出之一;双向通道要各提供一条流 |
二、缓冲流
为提高传输效率,给流配一块内存当缓冲区(Buffer)。写入时数据先到缓冲区,满了再一次性发给外部设备;读取时实际从缓冲区取,空了再从设备尽量多读来填满。这样程序的 IO 可以独立于具体设备,换设备不必改源程序,可移植性更好。
三、java.io 与两类流
java.io 包里每个类代表一种特定输入或输出流,用前要导入。面向字节的流每次读写 8 位,也叫二进制字节流;面向字符的流一次按 16 位当一个字符处理。Java 字符用 16 位 Unicode,普通文本文件常用 8 位 ASCII,所以字符流和字节流不要混着当一回事。
系统预置了三个可直接用的流对象:
-
System.in标准输入,通常是键盘。 -
System.out标准输出,通常写到显示器。 -
System.err标准错误输出,通常也写到显示器。
字节流和字符流的步骤基本相同。以输入为例:先创建与数据源相关的流对象,再用它的方法读数据,最后 close() 关掉流。
一句话总结:流是顺序、单向的数据通道;缓冲提高效率,字节流对 8 位、字符流对 Unicode,用完 close,标准入口就是 in / out / err。
转载请注明来源:Java输入输出(IO)和流的基本概念







