java的Serialization 机制
来源:互联网 发布:软件测试原理与实践 编辑:程序博客网 时间:2024/05/17 06:16
Serialization是指把类或者基本的数据类型持久化(persistence)到数据流(Stream)中,包括文件、字节流、网络数据流。
1. 这两个类都是decorator模式的,在创建他们的时候,都要传入一个基于字节的流,真正在底下存贮序列化数据的都是这些流。
2. 被持久化的类要实现Serializable接口,这个接口没有任何函数,只是一个标记接口。如果在一台机器上进行序列化,把得到的数据传送到另外一个机器上进行反序列化,那么这两台机器上的类应该是完全一样的,否则序列化是不会成功的。
3. 切记不要把上面代码中的bos用toString得到String,然后再从这个String中得到ByteArrayInputStream,再进行反序列化。bos是以字节存贮的,转成以字符存贮的String必然会造成数据的变化,而从String中到的byte[]也不会是之前那个byte[]了。我遇到过这个问题,是因为我想把序列化之后的数据存在xml文件中。
JAVA中实现serialization主要靠两个类:ObjectOuputStream和ObjectInputStream。他们是JAVA IO系统里的OutputStream和InputStream的子类。既然他们是JAVA IO中的流,那么就可以像操作一般的流一样来操作他们。下面是他们使用方法:
import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; import java.io.Serializable; public class Pair implements Serializable{ private static final long serialVersionUID = -1874850715617681161L; private int type; private String name; public int getType() { return type; } public void setType(int type) { this.type = type; } public String getName() { return name; } public void setName(String name) { this.name = name; } public Pair(int type, String name) { super(); this.type = type; this.name = name; } public static void main(String[] args) throws IOException, ClassNotFoundException { // TODO Auto-generated method stub //serialize object pair ByteArrayOutputStream bos = new ByteArrayOutputStream(); ObjectOutputStream oos = new ObjectOutputStream(bos); Pair pair = new Pair(1, "charlie"); oos.writeObject(pair); //deserialize object, get new object newpair ByteArrayInputStream bis = new ByteArrayInputStream(bos.toByteArray()); ObjectInputStream ois = new ObjectInputStream(bis); Pair newpair = (Pair) ois.readObject(); System.out.println(newpair.getType()+":"+newpair.getName()); } }
1. 这两个类都是decorator模式的,在创建他们的时候,都要传入一个基于字节的流,真正在底下存贮序列化数据的都是这些流。
2. 被持久化的类要实现Serializable接口,这个接口没有任何函数,只是一个标记接口。如果在一台机器上进行序列化,把得到的数据传送到另外一个机器上进行反序列化,那么这两台机器上的类应该是完全一样的,否则序列化是不会成功的。
3. 切记不要把上面代码中的bos用toString得到String,然后再从这个String中得到ByteArrayInputStream,再进行反序列化。bos是以字节存贮的,转成以字符存贮的String必然会造成数据的变化,而从String中到的byte[]也不会是之前那个byte[]了。我遇到过这个问题,是因为我想把序列化之后的数据存在xml文件中。
0 0
- java的Serialization机制
- java的Serialization 机制
- java的Serialization 机制
- java的Serialization 机制
- Java Serialization机制和transient
- 通过JAVA的Serialization机制进行对象的拷贝
- Java的serialization
- Java中的Serialization机制和transient关键字
- java之序列化Serialization 机制
- Java的序列化(Serialization)
- Java 的序列化 (Serialization)
- 回首Java——Java序列化机制(Serialization,Deserialization)
- Java Serialization
- Java Serialization
- Java Serialization
- Java Serialization UID 问题的完美解决方案
- java中对象的串行化(Serialization)
- java 对象的串行化(Serialization)
- UVALive - 3027 - Corporative Network (并查集!!)
- IntelliJ IDEA 14 注册码
- 正向代理与反向代理的区别【Nginx读书笔记】
- css性能及规范要点
- TI C6000系列DSP的流水线介绍和软件流水优化
- java的Serialization 机制
- Java关键字(key)
- 你最深爱的编程语言其实很烂
- 提高工作激情的九种方法
- 线程间通信
- ASP.NET截取上传视频,swf文件第一帧作为预览图片
- php 操作sqlite类。增删改查,pdo链接
- loadrunner运行场景时,常见错误及解决方法
- iOS Developer:真机测试