一、打印流
1、PrintStream:在OutputStream基础上提供了增强的功能,即可以方便地输出各种类型的数据(而不仅限于byte类型)的格式化表示形式。
PrintStream的方法不抛IOException;而是在异常的情况下设置一个内部标志,可以通过成员方法checkError()测试此标志的值以表明是否出现异常。System.out就是一个PrintStream类型的对象。
2、区别
PrintWriter:和PrintStream相似,区别在于:作为处理流使用时,PrintStream只能封装OutputStream类型的字节输出流,而PrintWriter既可封装OutputStream,还能够封装Writer类型字符输出流并增强其功能。
PrintWriter
构造方法:以接收四种类型的值。
字符串路径
File对象
对于这两种类型的数据,还可以指定编码表,也就是字符集。
OutputStream
Writer
对于后两种类型的数据,可以指定自动刷新。注意:该自动刷新值为true时,只有三个方法可以用:println,printf,format.
//如果既要有自动刷新,又可执行编码。如何创建流对象?
PrintWriter pw = new PrintWriter(new OutputStreamWriter(new FileOutputStream("a.txt"),"utf-8"),true);
//如果想要提高效率,还要使用打印方法。
PrintWriter pw = new PrintWriter(new BufferdWriter(new OutputStreamWriter(new FileOutputStream("a.txt"),"utf-8")),true);
3 DataInputStream:和DataOutputStream
DataInputStream:属于处理流,它能够以一种与机器无关的方式,直接从底层字节输入流读取Java基本数据类型和String类型的数据。
常用方法
int readInt(); boolean readBoolean();
short readShort(); long readLong();
String readUTF();
DataOutputStream:能够直接将Java基本类型数据写出其他的字节输出流,随后可以使用DataInputStream输入流读取这些数据
常用方法
writeInt(int):一次写入四个字节writeBoolean(boolean);
writeShort(short);
writeLong(long);
writeUTF(String);//按照utf-8修改版将字符数据进行存储,只能通过readUTF读取。
二、对象的序列化
序列化的本意是把并行数据转换成串行数据的处理过程。
对象序列化是指将对象的状态数据以字节流的形式进行处理,一般用于实现对象的持久性,即长久保持一个对象的状态并在需要时获取该对象的信息以重新构造一个状态完全相同的对象。
简单的说,对象的序列化可以理解为使用I/O“对象流”类型实现的对象读/写操作。---ObjectInputStream以及ObjectOutputStream
注意:
Serializable接口中实际上没有定义任何属性和方法,它只是起到标记性作用(标记接口)。
在Java的语言规范中规定,Serializable接口的实现类均应提供无参的构造方法,以供可能的反序列化操作、系统重建对象时自动调用。
类中的静态成员不会被序列化。
对应非静态的成员如果也不想被序列化,可以通过transient关键字修饰。