欢迎来到天天文库
浏览记录
ID:6578923
大小:35.00 KB
页数:5页
时间:2018-01-18
《java_对象的序列化与反序列化讲解》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、Java对象的序列化与反序列化实践当两个进程在进行远程通信时,彼此可以发送各种类型的数据。无论是何种类型的数据,都会以二进制序列的形式在网络上传送。发送方需要把这个Java对象转换为字节序列,才能在网络上传送;接收方则需要把字节序列再恢复为Java对象。 把Java对象转换为字节序列的过程称为对象的序列化。 把字节序列恢复为Java对象的过程称为对象的反序列化。 对象的序列化主要有两种用途: 1)把对象的字节序列永久地保存到硬盘上,通常存放在一个文件中; 2)在网络上传送对象的字节序列。 一.J
2、DK类库中的序列化API java.io.ObjectOutputStream代表对象输出流,它的writeObject(Objectobj)方法可对参数指定的obj对象进行序列化,把得到的字节序列写到一个目标输出流中。 java.io.ObjectInputStream代表对象输入流,它的readObject()方法从一个源输入流中读取字节序列,再把它们反序列化为一个对象,并将其返回。、 只有实现了Serializable和Externalizable接口的类的对象才能被序列化。Externaliz
3、able接口继承自Serializable接口,实现Externalizable接口的类完全由自身来控制序列化的行为,而仅实现Serializable接口的类可以采用默认的序列化方式。 对象序列化包括如下步骤: 1)创建一个对象输出流,它可以包装一个其他类型的目标输出流,如文件输出流; 2)通过对象输出流的writeObject()方法写对象。 对象反序列化的步骤如下: 1)创建一个对象输入流,它可以包装一个其他类型的源输入流,如文件输入流; 2)通过对象输入流的readObject()方法读取
4、对象。 下面让我们来看一个对应的例子,类的内容如下:importjava.io.*;importjava.util.Date;/***对象的序列化和反序列化测试类.*@authorAmigoXie*@version1.0*Creationdate:2007-9-15-下午21:45:48*/publicclassObjectSaver{ /** *@paramargs *@authorAmigoXie *Creationdate:2007-9-15-下午21:45:37 */publicstaticvoi
5、dmain(String[]args)throwsException{ ObjectOutputStreamout=newObjectOutputStream(newFileOutputStream("D:""objectFile.obj")); //序列化对象 Customercustomer=newCustomer("阿蜜果",24); out.writeObject("你好!"); out.writeObject(newDate()); out.writeObject(customer); out.w
6、riteInt(123);//写入基本类型数据 out.close(); //反序列化对象 ObjectInputStreamin=newObjectInputStream(newFileInputStream("D:""objectFile.obj")); System.out.println("obj1="+(String)in.readObject()); System.out.println("obj2="+(Date)in.readObject()); Customerobj3=(Customer
7、)in.readObject(); System.out.println("obj3="+obj3); intobj4=in.readInt(); System.out.println("obj4="+obj4); in.close();}}classCustomerimplementsSerializable{privateStringname;privateintage;publicCustomer(Stringname,intage){this.name=name;this.age=age;}publ
8、icStringtoString(){return"name="+name+",age="+age;}} 输出结果如下:obj1=你好!obj2=SatSep1522:02:21CST2007obj3=name=阿蜜果,age=24obj4=123 因此例比较简单,在此不再详述。 二.实现Serializable接口 ObjectOutputStream只能对Serializable接口的类的对象进行序列
此文档下载收益归作者所有