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