IOの对象流

来源:互联网 发布:类似淘宝联盟的网站 编辑:程序博客网 时间:2024/06/05 16:32

对象流

对象的序列化机制

允许把内存中的java对象转换成平台无关的二进制流,从而允许把这种二进制流持久地保存在磁盘上,或通过网络将这种二进制流传输到另一个网络节点。当其它程序获取了这种二进制流,就可以恢复成原来的java对象

优点

序列化的好处在于可将任何实现了Serializable接口的对象转化为字节数据,使其在保存和传输时可以被还原

序列化是RMIRemote Method Invoke-远程方法调用)过程的参数和返回值都必须实现的机制,而RMIJavaEE的基础,因此序列化机制是JavaEE平台的基础

如果需要让某个对象支持序列化机制,则必须让其类是可序列化的,为了让某个类是可序列化的,该类必须实现如下两个接口之一:

Serializable

Externalizable

package IO;import java.beans.PersistenceDelegate;import java.io.File;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.IOException;import java.io.ObjectInputStream;import java.io.ObjectOutputStream;import java.io.Serializable;import org.junit.Test;public class TestObjectInputOutputStream {// 对象的反序列化过程,将硬盘中文件通过ObjectInputStream转换为相应的对象/* * 要求: 1.此类是可序列化的:Serializable接口或者Externalizable接口  * 2.要求属性也要同样实现接口 * 3.凡是实现Serializable接口的类都有一个表示序列化版本标识符的静态变量 * private static final long serialVersionUID=45465445L; * private static final long serialVersionUID * 4.不能序列化static和transient修饰的变量和属性 */@Testpublic void TestObjectInputOutputStream() {ObjectInputStream objectInputStream = null;try {objectInputStream = new ObjectInputStream(new FileInputStream("person.txt"));Person p1 = (Person) objectInputStream.readObject();Person p2 = (Person) objectInputStream.readObject();System.out.println(p1 + "\n" + p2);} catch (FileNotFoundException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (ClassNotFoundException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();} finally {if (objectInputStream != null) {try {objectInputStream.close();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}}// 对象的序列化过程,将内存中的对象通过ObjectOutPutStream转换为二进制流,存储在硬盘文件中@Testpublic void testObjectOutputStream() {ObjectOutputStream objectOutputStream = null;try {objectOutputStream = new ObjectOutputStream(new FileOutputStream(new File("person.txt")));Person p1 = new Person("Hadi", 11,new Pet("dahua"));Person p2 = new Person("Qiao", 24,new Pet("bigFlower"));objectOutputStream.writeObject(p1);objectOutputStream.flush();objectOutputStream.writeObject(p2);objectOutputStream.flush();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();} finally {if (objectOutputStream != null) {try {objectOutputStream.close();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}}}// 要实现序列化的类java.io.NotSerializableException// 实现接口class Person implements Serializable {private static final long serialVersionUID=45465445L;String name;Integer age;Pet pet;public Person(String name, Integer age, Pet pet) {this.name = name;this.age = age;this.pet = pet;// new Pet("huahua")}@Overridepublic String toString() {return "Person [name=" + name + ",age=" + age + "Pet" + pet + "]";}}class Pet implements Serializable{String name;public Pet(String name) {this.name = name;}public String toString(){return"Pet [name="+name+"]";}}

0 0
原创粉丝点击