Java入门第六篇:I/O流
[java中的IO流]
分类:
1. 根据流的方向:输入流和输出流
根据读取文字的大小:字节流和字符流;
字节流按字节读取,读取中文时会产生乱码,字符流按字符读取,通常用于读取中文。
根据读取的方式:节点流和缓存流
[BufferedInputStream和....Output..]
新建一个对象,传入一个文件,这个对象作为缓存流。可以减少文件的读写次数,提高读写速度。
程序最后,刷新缓存流:bos.fluse();
缓存区一定要关!
bis.close();
bos.close();(会自动刷新缓存流)
缓存流的作用:
将文件对象作为参数传入缓存对象。
这种写法,我们称之为IO链,IO关闭时只需要关闭最外层流,内层流将自动关闭。
[DataInputStream类]
用二进制对文件进行读写操作,(可读写二进制文件、基本fis读写可能出现乱码)。
与基本流相比,可以直接读写java中的基本数据类型。
(使用DataOutputStream写入的文件,只能使用DataInputStream读 )
方法.readUTF();可读取中文。
[ObjectInputStream]
1.与基本流相同,可以直接使用read和writer读写;
2.与DataInputStream相同,可以对java基本数据类型进行直接读写。
方法.redaInt(); readDouble();等
3.使用可以使用readObject()和writeObject()对对象进行读写。
读写对象时,一定要对要读写的对象类实现序列化。
[对象的序列化和反序列化]
概念:
对象的序列化:将程序中的对象,持久化的保存在文件中的过程。
对象的反序列化:将文件中保存的对象,重新读取到程序中的过程。
序列化必须对象所属 的类必须实现serializable接口
当一个实体类,实现可序化接口后,可以it安家一个序列化版本号ID
private static final long serialVersionUID = 1L;
添加以后,可以用ID表示序列化和反序列化操作的对象,是同一个对象。
否则序列化之后,如果实体类属性有删减,在进行序列化时 系统默认不是同一类,会造成错误。
[字符流]
1.在处理数据单元时,以一个字符作为单位;
而字节流,以一个字节作为单位。
2.字符的基类:
Reader和Writer 是抽象类
FileReader和FileWriter是直接继承字抽象类的两个基本字符流。
3.FileReader和FileWriter只能使用系统使用的编码格式;
无法指定编码,如果文件格式与系统默认格式不一样,那使用这两个方法读写将造成中文乱码。
[InputStreamReader和OutputStreamWriter]
1.将字节流转换为字符流,同时支持自定义读写的编码格式;
文件传入时自带缓存功能。
2.常见的编码格式。
ASCII : 美国标准消息码;
ISO8859-1 : 欧洲码;
GB2312 : 国标码;
GBK : 国标扩展码;
ANSI编码,可以分为很多种;
简体中文:
GB2312;
GBk;
繁体中文:
BIG-5;
Unicode编码:国际标准码,兼容绝大部分国家的编码格式。
可以分为UTF-6,UTF-8,UTF-16。