Java的序列化与反序列化(一):初识
2017-01-09 14:53
375 查看
Java提供了一种对象序列化的机制:一个对象可以被表示为一个字节序列,该字节序列包含对象的数据、有关对象的类型的信息和存储在对象中数据的类型。
将序列化对象写入文件之后,可以从文件中读取出来,并且对它进行反序列化,也就是说,对象的类型信息、对象的数据,还有对象中的数据类型可以用来在内存中新建对象。
整个过程都是 Java 虚拟机(JVM)独立的,也就是说,在一个平台上序列化的对象可以在另一个完全不同的平台上反序列化该对象。
对象可序列化实现,只需要实现Serializable接口即可,实例:
【程序实例1】
序列化对象
【程序实例2】
【运行结果】
反序列化对象
【程序实例3】
【运行结果】
transient关键字是控制变量的序列化,在变量声明前加上该关键字,可以阻止该变量被序列化到文件中,在被反序列化后,transient 变量的值被设为初始值,如 int 型的是 0,对象型的是 null。
参考资料:
1、http://www.runoob.com/java/java-serialization.html
2、http://www.hollischuang.com/archives/1140
将序列化对象写入文件之后,可以从文件中读取出来,并且对它进行反序列化,也就是说,对象的类型信息、对象的数据,还有对象中的数据类型可以用来在内存中新建对象。
整个过程都是 Java 虚拟机(JVM)独立的,也就是说,在一个平台上序列化的对象可以在另一个完全不同的平台上反序列化该对象。
对象可序列化实现,只需要实现Serializable接口即可,实例:
【程序实例1】
package SerializableTest; import java.io.Serializable; public class User implements Serializable { private static final long serialVersionUID = 3271953743747705799L; private String name; private String pwd; private transient String emial; public String getName() { return name; } public void setName(String name) { this.name = name; } public String getPwd() { return pwd; } public void setPwd(String pwd) { this.pwd = pwd; } public String getEmial() { return emial; } public void setEmial(String emial) { this.emial = emial; } @Override public String toString() { return "User{" + "name='" + name + '\'' + ", pwd='" + pwd + '\'' + ", emial='" + emial + '\'' + '}'; } }
序列化对象
【程序实例2】
import java.io.*; public class SerializeDemo { public static void main(String[] args){ User user = new User(); user.setName("amdin"); user.setPwd("123456"); user.setEmial("admin@gmail.com"); try{ FileOutputStream fileOut = new FileOutputStream("user.ser"); ObjectOutputStream out = new ObjectOutputStream(fileOut); out.writeObject(user); out.close(); fileOut.close(); System.out.println("序列化user对象到文件user.ser中: "+user); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } }
【运行结果】
序列化user对象到文件user.ser中: User{name='amdin', pwd='123456', emial='admin@gmail.com'}
反序列化对象
【程序实例3】
import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import java.io.ObjectInputStream; public class DeserializeDemo { public static void main(String[] args){ try{ FileInputStream fileIn= new FileInputStream("user.ser"); ObjectInputStream in = new ObjectInputStream(fileIn); User user = (User) in.readObject(); System.out.println("从文件user.ser中反序列化对象: "+user); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } catch (ClassNotFoundException e) { e.printStackTrace(); } } }
【运行结果】
从文件user.ser中反序列化对象: User{name='amdin', pwd='123456', emial='null'}
transient关键字是控制变量的序列化,在变量声明前加上该关键字,可以阻止该变量被序列化到文件中,在被反序列化后,transient 变量的值被设为初始值,如 int 型的是 0,对象型的是 null。
参考资料:
1、http://www.runoob.com/java/java-serialization.html
2、http://www.hollischuang.com/archives/1140
相关文章推荐
- Java序列化Serializable初识(2)——与SignedObject结合使用
- Java对象序列化(整理篇)
- Java下利用Jackson进行JSON解析和序列化示例
- JAVA的对象序列化
- Java对象序列化
- java 中的对象序列化
- 关于 Ajax 的 Java 对象序列化 及获得数据后如何展现出来
- JAVA的对象序列化(转自sjh1106djc的专栏)
- JAVA对象序列化保存为XML文件的工具类
- Java学习之对象序列化(二)
- Java我的感情岁月——初识
- 看JAVA序列化的性能 -- 一个简单的例子
- [Java]java对象序列化学习笔记
- Serializable java序列化
- java对象序列化学习笔记(z)
- java对象序列化学习笔记
- Java学习之对象序列化(二)
- Serializable java序列化
- Serializable java序列化
- Java 中对象的序列化技术