IO流之打印流
一、概述
1.分类
打印流分为字节打印流(PrintStream)和字符打印流(PrintWriter)。
2.特点
- 只负责输出数据,不负责读取数据
- 有自己的特有的方法
3.字节打印流
- PrintStream(String fileName):使用指定的文件名创建新的打印流
- 使用继承父类的方法写数据(write())会进行转码,使用特有的方法(print())写数据则原样输出
4.字符打印流
- PrintWriter(String fileName):使用指定的文件名创建新的字符打印流,而不需要自执行刷新
- PrintWriter(Writer out,boolean autoFlush):创建一个新的字符打印流,out为字符输出流,autoFlush为真,则println、print、format方法将刷新输出符缓冲区
二、对象序列化与反序列化
1.概述
对象序列化就是将对象保存到磁盘中,或者在网络中传输对象。这种机制就是使用一个字节序列表示一个对象,该字节序列包括:对象的类型、对象的数据和对象中存储的属性等信息,字节序列写到文件之后,相当于文件中持久保存了一个对象的信息。反之,该字节序列还可以从文件中读取回来,重构对象,对它进行反序列化。要实现序列化和反序列化需要用到对象序列化流(ObjectOutputStream)和对象反序列化流(ObjectInputStream)。
2.对象序列化流
- 概述:将Java对象的原始数据类型和图形写入ObjectOutputStream,可以使用ObjectInputStream读取(重构)对象,可以通过使用流的文件来实现对象的持久存储,如果流是网络套接字流,则可以在另一个主机上或另一个进程中重构对象。
- 构造方法:ObjectOutputStream(OutputStream out),创建一个写入指定的OutputStream的ObjectOutputStream
- 序列化对象方法:void writeObject(Object obj),将指定对象写入ObjectOutputStream
注意:一个对象要想被序列化,该对象所属的类必须要实现Serializable接口,这个接口是个标记接口,不需要重写任何方法
3.反序列化对象
- 概述:ObjectInputStream反序列化之前先使用ObjectOutputStream编写的原始数据和对象
- 构造方法:ObjectInputStream(InputStream in),创建从指定的InputStream读取ObjectInputStream
- 反序列化对象方法:Object readObject(),从ObjectInputStream读取一个对象