博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Java 对象序列化与反序列化
阅读量:5100 次
发布时间:2019-06-13

本文共 3428 字,大约阅读时间需要 11 分钟。

对象序列化

对象序列化

对象序列化定义

所谓的对象序列化就是将 保存在内存中的对象数据转换为二进制数据流进行传输的操作 ;但不是所有对象都可以进行序列化,要被序列化的的对象那么其所在的类一定要实现 java.io.Serializable 接口,该接口并没有认识的操作方法,因为该接口是一个 标识接口

可以被序列化的类

import java.io.Serializable;@SuppressWarnings("serial")class Book implements Serializable {     private String title ;     private double price ;    public Book(String title , double price) {        this.price = price ;        this.title = title ;     }    public String toString() {        return "this.title + "\t" + this.price";    }}

如上,就实现了一个可以被序列化的类,(使用了压制警告)。

如此,Book类就可以实现二进制的传输了!

实现序列化和反序列化

序列化类:

  • java.io.ObjectOutputStream
    • 将对象转为指定格式的二进制数据
  • 构造方法:
public ObjectOutputStream(OutputStream out)
  • 输出对象:
public final void writeObject(Object obj)

反序列化类:

  • java.io.ObjectInputStream
    • 将已经序列化的对象转换回原本的对象内容
  • 构造方法:
public ObjectInputStream(InputStream in)
  • 读取对象:
public final Object readObject()

实现序列化对象操作

@SuppressWarnings("serial")class Book implements Serializable {     private String title ;     private double price ;    public Book(String title , double price) {        this.price = price ;        this.title = title ;     }    public String toString() {        return this.title + "\t" + this.price ;    }}public class TestDemo {     public static void main(String [] args) throws Exception {        ser();    }    public static void ser() throws Exception {        ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(new File("F:" + File.separator + "demo" + File.separator + "Byte.txt")));        oos.writeObject(new Book("Java开发",110.1));        oos.close();    }}

实现反序列化类

public static void dser() throws Exception {        ObjectInputStream ois = new ObjectInputStream(new FileInputStream (new File("F:" + File.separator + "demo" + File.separator + "Byte.txt")));        Object obj = ois.readObject();// 按照Object读取        Book book = (Book) obj;// 向下转型        System.out.println(book);        ois.close();    }

序列化与反序列化完整实现

package helloworld;import java.io.File;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.ObjectInputStream;import java.io.ObjectOutputStream;import java.io.Serializable;@SuppressWarnings("serial")class Book implements Serializable {     private String title ;     private double price ;    public Book(String title , double price) {        this.price = price ;        this.title = title ;     }    public String toString() {        return this.title + "\t" + this.price ;    }}public class TestDemo {     public static void main(String [] args) throws Exception {        ser();  // 实现序列化        dser(); // 实现反序列化    }    public static void ser() throws Exception {        ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(new File("F:" + File.separator + "demo" + File.separator + "Byte.txt")));        oos.writeObject(new Book("Java开发",110.1));// 输出        oos.close();    }    public static void dser() throws Exception {        ObjectInputStream ois = new ObjectInputStream(new FileInputStream (new File("F:" + File.separator + "demo" + File.separator + "Byte.txt")));        Object obj = ois.readObject();// 按照Object读取        Book book = (Book) obj;// 向下转型        System.out.println(book);        ois.close();    }}

transient 关键字

通过序列化和反序列化的code实现,我们发现:序列化操作时是将整个对象的所有属性内容进行保存;但是如果某些属性的内容不需要被保存就可以通过 transient 关键字定义。

private transient String title;

由定义可知,title属性不可以被序列化操作。

总结

不是所有的类都需要被序列化,只有需要传输的对象所在的类才需要序列化对象。

转载于:https://www.cnblogs.com/wangyuyang1016/p/11185561.html

你可能感兴趣的文章
【转载】基于vw等viewport视区相对单位的响应式排版和布局
查看>>
<转>关于MFC的多线程类 CSemaphore,CMutex,CCriticalSection,CEvent
查看>>
jquery中ajax返回值无法传递到上层函数
查看>>
css3之transform-origin
查看>>
[转]JavaScript快速检测浏览器对CSS3特性的支持
查看>>
Master选举原理
查看>>
[ JAVA编程 ] double类型计算精度丢失问题及解决方法
查看>>
小别离
查看>>
微信小程序-发起 HTTPS 请求
查看>>
WPF动画设置1(转)
查看>>
backgound-attachment属性学习
查看>>
个人作业——关于K米的产品案例分析
查看>>
基于node/mongo的App Docker化测试环境搭建
查看>>
java web 中base64传输的坑
查看>>
java 中的线程(一)
查看>>
秒杀9种排序算法(JavaScript版)
查看>>
素数判断BFS之“Prime Path”
查看>>
Activiti入门 -- 环境搭建和核心API简介
查看>>
struts.convention.classes.reload配置为true,tomcat启动报错
查看>>
MySQL的并行复制多线程复制MTS(Multi-Threaded Slaves)
查看>>