内存流(了解)
注意: 节点流
ByteArrayInputStream: 内存输入流(了解)
作用: 将运行内存中的数据读取到程序中
ByteArrayOutputStream: 内存输出流
作用: 将程序中的数据存储到运行内存中
注意: 内存输入流自带内存默认初始大小32字节,当不够时会自动扩容
特有方法:
toByteArray(): 通过内存输出流获取其存储数据的数组
缓冲流(重点)
作用: 提高读写效率
注意: 过滤流(包装流)
BufferedInputStream
作用: 提高读的效率
BufferedOutputStream
作用: 提高写的效率
注意:
1.包装流在关闭时,会关闭它所包装的节点流
2.默认缓冲区为8kb
对象流(次重点)
作用: 读写对象
注意: 过滤流(包装流)
ObjectInputStream
特有方法:
readObject(): 读取对象
注意: 要保证文件中有对象
ObjectOutputStream
特有方法:
writeObject(): 写出对象
注意:
读写的对象所属的类必须实现序列化接口,包括对象的数据类型也需要实现序列化
序列化:
让对象所属的类实现Serializable接口
注意:
1.八个基本数据类型包装类与String都已经实现了Serializable接口
2.不能序列化的对象有:
1.使用transient修饰的属性为瞬时属性,不参与序列化
2.使用static修饰的属性,不参与序列化
字符流
特点
传递最小单位是char(字符)
不能传递音频视频图片等内容,只能传递文本
体系结构
Reader
提供的方法
int read(): 一次读取一个字符,返回值就是读取到的字符,返回值-1表示读取结束
int read(char cbuf[]): 一次读取一组字符到数组cbuf中,返回值为读取到的字符长度,-1表示结束
int read(char cbuf[], int off, int len): 一次读取一组字符到数组cbuf中,从off位置开始存储,存储len个,返回值为读取到的字符长度,-1表示结束
void close(): 关流
Writer
提供的方法:
void write(int c): 一次写入一个字符
void write(char cbuf[]): 一次写入一组字符
void write(char cbuf[], int off, int len): 将cbuf中off位置开始,len个字符写入
void write(String str): 将一个字符串写入
void write(String str, int off, int len): 将一个字符串从off位置开始,len个长度的字符写入
void flush(): 冲刷
void close(): 关流
文件流
FileReader
作用: 将文本文件的内容读取到程序中
FileWriter
作用: 将程序中的数据写入到文本文件中
优点:
相对于字节流读取文本文件,字符流不会出现乱码,因为一次就将一个字符读取结束了,不会像字节流可能会读取一个字符的一半字节
缺点:
相对于字节流而言,字符流只能操作文本文件
缓冲流(重点)
BufferedReader
作用: 提高字符流读取的效率
默认缓冲区大小: 8192字符
特有方法:
readLine(): 一次读一行
BufferedWriter
作用: 提高字符流写出的效率
默认缓冲区大小: 8192字符
特有方法:
newLine(): 给内容中写入一个换行
转换流
InputStreamReader
作用: 将字节流输入流转换为字符输入流
注意: 将读取到的文本文件与代码的编码格式不同时,转换流可以设定读取的编码格式,防止中文乱码,参数为文本文件的编码格式,ANSI == GBK,Eclipse不支持ANSI
OutputStreamWriter
作用: 将字符输出流转换为字节输出流
注意: 当写入到的文本文件与代码的编码格式不同时,转换流可以设定写入的编码格式,防止中文乱码
标准输出流(了解)
PrintWriter
特有方法:
print();
println();
编码格式
最原始的计算机数据: 0, 1
所以将01可以排列使其形成二进制
再将二进制转换为十进制
a: 97
b: 98
c: 99
: 0
...
ASCII: 只有一些国家的文字
Unicode: 万国码,在ASCII上增加多国字符
一个字符2个字节
GBK: 加了一些中文,在Unicode基础上增加中文
假设 12345: 你
UTF-8: 加了一些中文,在Unicode基础上增加中文
假设 12345: 爜
UTF-8: 对中文的支持比GBK好