java 序列化.Serializable
2014-12-16 11:04
141 查看
java序列化可以理解为 将数据转化为一个字节序列,并且这些字节流序列可以反转(反序列化)为之前的数据.
常用场景
1.方便传输
举个例子:
网络传输的时候,可以传字符串,亦可以传对象object,例如socket,传字符串的时候接收方很容易解析出来,但是,传一个对象的时候,对方读完字节流后,不知道你传的什么对象,所以没办法给转成原来的对象并解析对象的属性,这时候就要用到序列化和反序列化。
类实现序列化接口,socket发送这个对象的字节流,接收方到流后就可以将流反序列化成对象,然后使用对象的方法和属性。
2.可以用作出错数据、或业务需要保持的数据进行恢复
用法
要继承Serializable接口,Serializable接口没有方法或字段,仅用于标识可序列化的语义
例子:
常用场景
1.方便传输
举个例子:
网络传输的时候,可以传字符串,亦可以传对象object,例如socket,传字符串的时候接收方很容易解析出来,但是,传一个对象的时候,对方读完字节流后,不知道你传的什么对象,所以没办法给转成原来的对象并解析对象的属性,这时候就要用到序列化和反序列化。
类实现序列化接口,socket发送这个对象的字节流,接收方到流后就可以将流反序列化成对象,然后使用对象的方法和属性。
2.可以用作出错数据、或业务需要保持的数据进行恢复
用法
要继承Serializable接口,Serializable接口没有方法或字段,仅用于标识可序列化的语义
例子:
package com.cla.serializa.test; import java.io.Serializable; /** * 可序列化的类,需要实现Serializable接口 */ public class DataBean implements Serializable { private int id; private String name; public DataBean() { System.out.println("无参构造器"); } public DataBean(int id, String name) { System.out.println("全参构造器"); this.id = id; this.name = name; } public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } @Override public String toString() { return "DataBean's data , id:" + id + ",name:" + name; } }
/** * 序列化工具类 */ public class Serializations { /** * 序列化对象到指定路径文件 * @param outPath 文件路径 * @param outObj 需要序列化的对象 * @throws IOException 当I/O发生异常时 */ public static void serialize(String outPath, Object outObj) throws IOException { ObjectOutputStream oos = null; try { oos = new ObjectOutputStream(new FileOutputStream(outPath)); oos.writeObject(outObj); } finally { if(oos != null) oos.close(); } } /** * 从文件中逆序列化出对象 * @param inPath 文件路径 * @return 你序列化出的对象 * @throws IOException 当I/O发生异常时 * @throws ClassNotFoundException 当文件中不存在序列化的对象时 */ public static Object deserialize(String inPath) throws IOException, ClassNotFoundException { ObjectInputStream ois = null; try { ois = new ObjectInputStream(new FileInputStream(inPath)); return ois.readObject(); } finally { if(ois != null) ois.close(); } } }
/** *写测试(序列化) */ public class WriteObject { public static void main(String[] args) throws IOException { DataBean data = new DataBean(1,"Tom"); String path = "D:\\xx.txt" ; Serializations.serialize(path , data); } }
/** *读测试(反序列化) */ public class ReadObject { public static void main(String[] args) throws ClassNotFoundException, IOException { String path = "D:\\xx.txt" ; // 本地备份的文件路径 Object obj = Serializations.deserialize(path); System.out.println(obj); } }
相关文章推荐
- Serializable java序列化
- 序列化 java.io.Serializable
- Java Serializable(序列化)的理解和总结
- Serializable java序列化
- java序列化(Serializable)的作用和反序列化
- Java中的对象序列化Serializable
- java序列化(Serializable)的作用和反序列化
- Serializable java序列化
- java序列化(Serializable)
- java序列化(Serializable)的作用和反序列化
- JAVA序列化Serializable
- Java序列化(serializable)
- Java Serializable(序列化)
- java序列化 java.io.Serializable和java.io.Externalizable【转】
- Serializable java序列化介绍
- java.io.Serializable引发的问题——什么是序列化?在什么情况下将类序列化?
- 简述java序列化(Serializable)
- 序列化:java.io.Serializable
- 我对Java Serializable(序列化)的总结
- Java 序列化 java.io.Serializable