IO流学习,IO流概述
一、IO流
1.1 术语
流(stream) : 二进制流(高低电平 高电平 1 低电平0)
输入/输出源 : 二进制流的来源与目的地, 通常是外部设备(硬盘、键盘、文件、网络等)
Java程序通过stream,以统一的API来操作不同的输入/输出源
1.2 流的分类
1.2.1按照流的流向划分
-
输入流 : InputStream (字节输入流抽象类) Reader(字符输入流抽象类)
-
输出流 : OutputStream(字节输出流抽象类) Writer(字符输出流抽象类)
1.2.2按照传输的数据单元
-
InputStream (字节输入流抽象类) 、OutputStream(字节输出流抽象类)
-
字符流 : 输出的数据单元通常是16位的字符(2个字节),最终在链路层还 是会转为字节流
1.2.3按照角色功能来划分
节点流:直接连接外部IO设备(物理节点)
处理流(包装流):处理已存在流的流,没有直接连接物理节点,而是连接的已存在的流(体现了装饰设计模式(23种设计模式))
1.3 字节输入流常用的API
-
int read(): 每次读取一个字节,返回当前字节的十进制编码,如果没有读到字节数据就返回-1
-
int read(byte[] bytes):将每次读取的字节存入指定的字节数组,返回的是读取的字节个数,如果没有读到数据返回-1
如果指定的字节数组 bytes.lenght <= 文件中的字节个数,一次读取 bytes.lenght个, 那么如果读取的字节个数 < bytes.length, 会将读取到的字节覆盖数组下标0开始到len-1下标
-
int read(bytes[] bytes, int offset, int len): 将读取的指定的字节个数(len)存入指定的字节数组(bytes)的指定下标(offset)
-
String(bytes[] bytes, int offset, int len): 通过指定的字节数组,下标,长度,通常对象为英文字母
-
String(bytes[] bytes, int offset, int len, String charset): 通过指定的字节数组,下标,长度,如果有中文,通过String charset参数指定编码
1.4 字节输出流OutputStream
-
void write(int data): 每次写一个字节数据
-
void write(byte[] bytes):每次写一个字节数组
-
void write(bytes[] bytes, int offset, int len): 每次写一个字节数组指定的下标开始,指定的len参数字节个数
总结:
之所以会有字符流的存在,是因为通常中文编码至少都会占用两个字节,如GBK编码和UTF-8编码,使用字节流读取字符时,
由于自身容量只有8bit,所以不支持存储一个字符,拿到的编码就是不完整的,这个时候就需要使用字符流。

浙公网安备 33010602011771号