Java对象的序列化和反序列化实践
2013-12-20 14:58
对象序列化的目标是将对象保存在磁盘中,或者允许在网络中直接传输对象。对象序列化机制允许把内存中的Java对象转换成平台无关的二进制流,从而允许把这种二进制流持久的保存在磁盘上或者通过网络将之传送到另一个网络节点。
而一旦其他程序获得这种二进制流,即可将之恢复为Java对象。
转载自: http://dev.yesky.com/76/7562076.shtml
文中,原作者提到了两种序列化&反序列化的方式, 一是直接利用流对象来read/write,这种方式比较简单,按照默认方式序列化,所以有时候需要自己控制类的序列化方式,可以在可序列化类中提供以下形式的writeObject()和readObject()方法。
当进行序列化&反序列化操作时,如果有这两个方法,那么会优先执行这两个方法,测试代码如下:
public class ObjectSaver { public static void main(String[] args) throws Exception {
ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream(
"objectFile.obj")); // 序列化对象
Customer customer = new Customer("阿蜜果", 24);
out.writeObject("你好!");
out.writeObject(new Date());
out.writeObject(customer);
out.writeInt(123); // 写入基本类型数据
out.close(); // 反序列化对象
ObjectInputStream in = new ObjectInputStream(new FileInputStream(
"objectFile.obj"));
System.out.println("obj1=" + (String) in.readObject());
System.out.println("obj2=" + (Date) in.readObject());
Customer obj3 = (Customer) in.readObject();
System.out.println("obj3=" + obj3);
int obj4 = in.readInt();
System.out.println("obj4=" + obj4);
in.close();
}
} class Customer implements Serializable {
private static final long serialVersionUID = 1L;
private String name;
private int age; public Customer(String name, int age) {
this.name = name;
this.age = age;
} public String toString() {
return "name=" + name + ", age=" + age;
} private void writeObject(java.io.ObjectOutputStream out) throws IOException {
out.defaultWriteObject();
System.out.println("writeObject==========");
out.writeObject(name);
out.writeInt(age);
} private void readObject(java.io.ObjectInputStream in) throws IOException,
ClassNotFoundException {
in.defaultReadObject();
System.out.println("writeObject==========");
name=(String) in.readObject();
age=in.readInt();
}
}
如上,如果没有write&read两个方法,程序能正常执行。
如果write&read两个方法存在,但方法体为空,那么发序列化结果为null;
write&read两个方法存在,则只有按照上面代码,结果才是正确的。
有兴趣的可以自己试试。
Java对象的序列化和反序列化实践的更多相关文章
- Java对象的序列化与反序列化
序列化与反序列化 序列化 (Serialization)是将对象的状态信息转换为可以存储或传输的形式的过程.一般将一个对象存储至一个储存媒介,例如档案或是记亿体缓冲等.在网络传输过程中,可以是字节或是 ...
- Java对象的序列化和反序列化[转]
Java基础学习总结--Java对象的序列化和反序列化 一.序列化和反序列化的概念 把对象转换为字节序列的过程称为对象的序列化.把字节序列恢复为对象的过程称为对象的反序列化. 对象的序列化主要有两种用 ...
- Java对象的序列化与反序列化-Json篇
说到Java对象的序列化与反序列化,我们首先想到的应该是Java的Serializable接口,这玩意在两个系统之间的DTO对象里面可能会用到,用于系统之间的数据传输.或者在RPC(远程方法调用)时可 ...
- 一文带你全面了解java对象的序列化和反序列化
摘要:这篇文章主要给大家介绍了关于java中对象的序列化与反序列化的相关内容,文中通过详细示例代码介绍,希望能对大家有所帮助. 本文分享自华为云社区<java中什么是序列化和反序列化?>, ...
- Java基础学习总结——Java对象的序列化和反序列化
一.序列化和反序列化的概念 把对象转换为字节序列的过程称为对象的序列化. 把字节序列恢复为对象的过程称为对象的反序列化. 对象的序列化主要有两种用途: 1) 把对象的字节序列永久地保存到硬盘上,通常存 ...
- Java对象的序列化和反序列化
对象的序列化是指将对象转换为字节序列的过程 对象的反序列化是指将字节序列恢复对象的过程 主要有两种用途: 1.把对象的字节序列永久地保存在硬盘上,通常放在一个文件中. 2.在网络上传输对象的字节序列. ...
- java对象的序列化与反序列化使用
1.Java序列化与反序列化 Java序列化是指把Java对象转换为字节序列的过程:而Java反序列化是指把字节序列恢复为Java对象的过程. 2.为什么需要序列化与反序列化 我们知道,当两个进程进 ...
- Java基础学习总结--Java对象的序列化和反序列化
一.序列化和反序列化的概念 把对象转换成字节序列的过程称之为对象的序列化 把字节序列恢复为对象的过程称之为对象的反序列化 对象序列化的主要用途: 1)把对象的字节序列永久的保存到硬盘上,通常放在一个文 ...
- 深入理解Java对象的序列化与反序列化的应用
当两个进程在进行远程通信时,彼此可以发送各种类型的数据.无论是何种类型的数据,都会以二进制序列的形式在网络上传送.发送方需要把这个Java对象转换为字节序列,才能在网络上传送:接收方则需要把字节序列再 ...
随机推荐
- 转:Effective c + + notes
补充自己的. 转自:http://blog.csdn.net/ysu108/article/details/9853963#t0 Effective C++ 笔记 目录(?)[-] 第一章 从C转向C ...
- SqlServer_事务
事务处理是在数据处理时经常遇到的问题,经常用到的方法有以下三种总结整理如下:方法1:直接写入到sql 中在存储过程中使用 BEGIN TRANS, COMMIT TRANS, ROLLBACK TRA ...
- 转!!MAC和PHY的区别
一块以太网网卡包括OSI(开方系统互联)模型的两个层,物理层和数据链路层.物理层定义了数据传送与接收所需要的电与光信号.线路状态.时钟基准.数据编码和电路等,并向数据链路层设备提供标准接口.数据链路层 ...
- xcode黑科技
1多开模拟器 使用命令行: cd /Applications/Xcode1.app/Contents/Developer/Applications/&open -n Simulator.app ...
- SQL中SUBSTRING函数的用法
功能:返回字符.二进制.文本或图像表达式的一部分 语法:SUBSTRING ( expression, start, length ) SQL 中的 substring 函数是用来抓出一个栏位资料中的 ...
- android:layout_weight的真实含义
首先声明只有在Linearlayout中,该属性才有效.之所以android:layout_weight会引起争议, 是因为在设置该属性的同时,设置android:layout_width为wrap_ ...
- Supervisor管理列队
学习了使用 Beanstalkd 管理队列之后,Supervisor 则是用来监听队列的任务,并在队列存在任务的情况下自动帮我们去执行,免去手动敲 php artisan queue:work 的命令 ...
- js二级导航
js写二级导航要点 1.ul li 2.js获取元素 3.setInterval(function(),time); 代码如下 <style type="text/css"& ...
- 1029c语言文法2理解
program → external_declaration | program external_declaration <程序>→ <外部声明>|<程序>< ...
- CSDN中的Bug
简述 在用CSDN的过程中,发现了许许多多的Bug.之前没有做记录,直接反馈给客服了,有时没图说得不太清楚,现在不都追求有图有真相么O(∩_∩)O~,所以在此记录一下. 作为程序员的一份子,Bug对我 ...