您好,欢迎来到小侦探旅游网。
搜索
您的当前位置:首页java对象序列化资料

java对象序列化资料

来源:小侦探旅游网
对象流:用于存储和读取对象的流

ObjectInputStream类:负责对象的输入处理 ObjectOutputStream类:负责对象的输出处理

序列化:将Java对象转换成统一的字节序列格式的过程

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

对象流的作用:

ObjectOutputStream:对象输出流,把对象转换成二进制流(字节序列),这个过程就是序列化

ObjectInputStream:对象输入流,将二进制流恢复成java对象,这个过程就是反序列化

序列化的实现:将需要被序列化的类实现Serializable接口,该接口没有需要实现的方法,只是为了标注该对象是可被序列化的,然后使用一个输出流(如:FileOutputStream)来构造一个ObjectOutputStream(对象流)对象,接着,使用ObjectOutputStream对象的writeObject(Object obj)方法就可以将参数为obj的对象写出(即保存其状态),要恢复该java对象的话则用对象输入流的readObject()方法。如果想让类中的某个属性不被序列化成二进制字节序列,需要在该属性上添加transient关键字

参考示例:

/**

* 图书类,实现Serializable接口才能被序列化 *

* @author lujun * */

public class Book implements Serializable { // 图书名称,不能被序列化

private transientString bookName; // 图书价格 privateint price; // 图书作者

private String author;

public String getBookName() { returnbookName; }

public void setBookName(String bookName) { this.bookName = bookName; }

publicintgetPrice() { return price; }

public void setPrice(int price) { this.price = price; }

public String getAuthor() { return author; }

public void setAuthor(String author) { this.author = author; }

//输出信息 @Override

public String toString() {

// TODO Auto-generated method stub

returnthis.bookName+\} }

//测试类

public class MyTest {

/**

* 序列化:把java对象转换成二进制流,将二进制字节序列保存在磁盘上

*/

public void trans() { // 在磁盘上创建一个文件,把对象序列化后的二进制字节序列存保存进去

File f = new File(\"D:/book.dat\"); try {

// 用文件输出流接收数据 FileOutputStreamoutStream = new FileOutputStream(f); //封装对象输出流 ObjectOutputStreamos=new ObjectOutputStream(outStream); //创建一个对象 Book b=new Book(); b.setAuthor(\"吴承恩\"); b.setBookName(\"西游记\"); b.setPrice(120); System.out.println(\"序列化前的对象:\"); System.out.println(b); //序列化 os.writeObject(b); //关闭流 os.close(); outStream.close(); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } // } /**

* 反序列化:把二进制流恢复成java对象,将对象写进内存 */

public void revesTrans(){ File f = new File(\"D:/book.dat\"); try { //输入流,读数据 FileInputStreamfis=new FileInputStream(f); //封装成对象输入流 ObjectInputStreamos=new ObjectInputStream(fis); //反序列化,把二进制流恢复成java对象 Object obj= os.readObject(); System.out.println(\"反序列化后对象:\"); System.out.println(obj); } catch (Exception e) { // TODO: handle exception } }

public static void main(String[] args) { MyTest m=new MyTest();

//序列化 m.trans(); //反序列化 m.revesTrans(); } }

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- xiaozhentang.com 版权所有 湘ICP备2023022495号-4

违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务