[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。