前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Java 对象序列化与反序列化

Java 对象序列化与反序列化

作者头像
Mirror王宇阳
发布2020-11-13 11:01:35
4660
发布2020-11-13 11:01:35
举报
文章被收录于专栏:Mirror的技术成长

对象序列化

对象序列化

对象序列化定义

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

可以被序列化的类

代码语言:javascript
复制
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
    • 将对象转为指定格式的二进制数据
  • 构造方法:
代码语言:javascript
复制
public ObjectOutputStream(OutputStream out)
  • 输出对象:
代码语言:javascript
复制
public final void writeObject(Object obj)
反序列化类:
  • java.io.ObjectInputStream
    • 将已经序列化的对象转换回原本的对象内容
  • 构造方法:
代码语言:javascript
复制
public ObjectInputStream(InputStream in)
  • 读取对象:
代码语言:javascript
复制
public final Object readObject()
实现序列化对象操作
代码语言:javascript
复制
@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();
	}
} 
实现反序列化类
代码语言:javascript
复制
	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();
	}
序列化与反序列化完整实现
代码语言:javascript
复制
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 关键字定义。

代码语言:javascript
复制
private transient String title;

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

总结

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

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019-07-14 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 对象序列化
    • 对象序列化
      • 对象序列化定义
      • 可以被序列化的类
      • 实现序列化和反序列化
    • transient 关键字
      • 总结
      相关产品与服务
      文件存储
      文件存储(Cloud File Storage,CFS)为您提供安全可靠、可扩展的共享文件存储服务。文件存储可与腾讯云服务器、容器服务、批量计算等服务搭配使用,为多个计算节点提供容量和性能可弹性扩展的高性能共享存储。腾讯云文件存储的管理界面简单、易使用,可实现对现有应用的无缝集成;按实际用量付费,为您节约成本,简化 IT 运维工作。
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档