IO流-转换流、对象序列化

来源:互联网 发布:软件中的引擎 编辑:程序博客网 时间:2024/06/05 19:14
 

流操作的基本规律有两点:第一,明确数据源和数据汇,其实是为了明确输入流还是输出流。第二,明确操作的数据是否是纯文本数据,其实是为了明确字符流还是字节流。

转换流的特点:

1、是字节流和字符流之间的桥梁

2、该流对象中可以对读取到的字节数据进行指定编码表的编码转换。

什么时候使用呢?

1、当字节和字符之间有转换动作时。

2、流操作的数据需要进行编码表的指定时。

具体的对象体现:

1、InputStreamReader:字节到字符的桥梁。

2、OutputStreamWriter:字符到字节的桥梁。

这两个流对象是字符流体系中的成员。那么它们有转换作用,而本身又是字符流。所以在构造的时候,需要传入字节流对象进来。

对象序列化

ObjectInputStream

ObjectOutputStream

    可以通过这两个流对象直接操作已有对象并将对象进行本地持久化存储。存储后的对象可以进行网络传输。

两个对象的特有方法:

ObjectInputStream

Object readObject():该方法抛出异常:ClassNotFountException。

ObjectOutputStream

void writeObject(Object):被写入的对象必须实现一个接口:Serializable

否则会抛出:NotSerializableException 

1、若序列化对象中有些属性不需要序列化可用关键字transient修饰对象属性

例:

view plaincopy to clipboardprint?

1 Person对象中的name属性可以这样定义:  

2 private transient String name;  


这样在序列化时就不会序列化name属性(反序列化取不到name属性)。

 

2、需要实现自定义序列化的对象类需要在其中加入三方法:

    【1】writeObject(ObjectOutputStream oos)throws IOException {}

    【2】readObject(ObjectInputStream ois) throws IOException,ClassNotFoundException {}

    【3】readObjectNoData()throws throws ObjectStreamException{}

3、自定义序列化的对象类中重写Object writeReplace()throws ObjectStreamException{}方法(待确认)这种方法可以把序列化对象类型按照需要转换。

原创粉丝点击