Serialization
title: Serialization
date: 2018-03-26 15:18:26
tags: [JAVA,Read]
categories: other
概述
程序运行时,变量的内容之存在于内存。
比如定义一个int
int i = 65535
这里提出一个概念——“serialization”,在python中成为pickling(序列化)这一个过程实际上是把内存中的数据变成可存储的数据,一般是指将讲数据写入磁盘。
在JAVA中,如果JVM停止后,在内存中的对象必然消失,所以需要通过序列化这一过程,持久化内存中的对象——也就是保持对象。
使用JAVA对象序列化时,会把其状态保存为一组字节,在未来将这些字节组装成对象。
示例
实际上,JDK提供了一个接口java.io.Serializable,通过这个接口,一个类可以被序列化。
public class Person implements Serializable {  
private String name = null;  
private Integer age = null;  
private Gender gender = null;  
public Person() {
    System.out.println("none-arg constructor");
}  
public Person(String name, Integer age, Gender gender) {
    System.out.println("arg constructor");
    this.name = name;
    this.age = age;
    this.gender = gender;
}  
public String getName() {
    return name;
}  
public void setName(String name) {
    this.name = name;
}  
public Integer getAge() {
    return age;
}  
public void setAge(Integer age) {
    this.age = age;
}  
public Gender getGender() {
    return gender;
}  
public void setGender(Gender gender) {
    this.gender = gender;
} 
@Override
public String toString() {
    return "[" + name + ", " + age + ", " + gender + "]";
}
}
public class SimpleSerial {  
public static void main(String[] args) throws Exception {
    File file = new File("person.out");  
    ObjectOutputStream oout = new ObjectOutputStream(new FileOutputStream(file));
    Person person = new Person("John", 101, Gender.MALE);
    oout.writeObject(person);
    oout.close();  
    ObjectInputStream oin = new ObjectInputStream(new FileInputStream(file));
    Object newPerson = oin.readObject(); // 没有强制转换到Person类型
    oin.close();
    System.out.println(newPerson);
}
}
上述代码实现了序列化和反序列化的过程,输出一个对象内容到一个文件,再读取这个文件中的内容并打印。
如果不实现Serializable,则会抛出异常NotSerializableException.
Serialization的更多相关文章
- [LeetCode] Verify Preorder Serialization of a Binary Tree 验证二叉树的先序序列化
		One way to serialize a binary tree is to use pre-oder traversal. When we encounter a non-null node, ... 
- [.net 面向对象程序设计进阶] (13) 序列化(Serialization)(五) Json 序列化利器 Newtonsoft.Json 及 通用Json类
		[.net 面向对象程序设计进阶] (13) 序列化(Serialization)(五) Json 序列化利器 Newtonsoft.Json 及 通用Json类 本节导读: 关于JSON序列化,不能 ... 
- [.net 面向对象程序设计进阶] (12) 序列化(Serialization)(四) 快速掌握JSON的序列化和反序列化
		[.net 面向对象程序设计进阶] (12) 序列化(Serialization)(四) 快速掌握JSON的序列化和反序列化 本节导读: 介绍JSON的结构,在JS中的使用.重点说明JSON如何在.N ... 
- [.net 面向对象程序设计进阶] (11)  序列化(Serialization)(三)  通过接口 IXmlSerializable 实现XML序列化 及 通用XML类
		[.net 面向对象程序设计进阶] (11) 序列化(Serialization)(三) 通过接口 IXmlSerializable 实现XML序列化 及 通用XML类 本节导读:本节主要介绍通过序列 ... 
- 【LeetCode】Verify Preorder Serialization of a Binary Tree(331)
		1. Description One way to serialize a binary tree is to use pre-order traversal. When we encounter a ... 
- CS: Marshalling and Unmarshalling, Serialization and Unserialization
		Link1: https://en.wikipedia.org/wiki/Marshalling_(computer_science) Quote: " Comparison with se ... 
- System.Web.Script.Serialization引用找不到的问题
		之前在项目中要使用JavascriptSerializer这个类,需要引入System.Web.Script.Serialization命名空间,但是在添加引用中找不到这个命名空间,后来才得知Syst ... 
- 找不到方法:“Boolean System.Runtime.Serialization.DataContractAttribute.get_IsReference()”的解决办法
		找不到方法:“Boolean System.Runtime.Serialization.DataContractAttribute.get_IsReference()”.的解决办法站点发布后部署到了两 ... 
- [.net 面向对象程序设计进阶]  (9)    序列化(Serialization) (一) 二进制流序列化
		[.net 面向对象程序设计进阶] (9) 序列化(Serialization) (一) 二进制流序列化 本节导读: 在.NET编程中,经常面向对象处理完以后要转换成另一种格式传输或存储,这种将对 ... 
- 重写成员“log4net.Util.ReadOnlyPropertiesDictionary.GetObjectData(System.Runtime.Serialization.SerializationInfo,  System.Runtime.Serialization.StreamingContext)”时违反了继承安全性规则
		在.NET 4.0下使用最新版本的log4Net 1.2.10,会遇到下面这样的错误: 重写成员“log4net.Util.ReadOnlyPropertiesDictionary.GetObject ... 
随机推荐
- linux下SS 网络命令详解
			ss命令用来显示处于活动状态的套接字信息. ss命令可以用来获取socket统计信息,它可以显示和netstat类似的内容. 但ss的优势在于它能够显示更多更详细的有关TCP和连接状态的信息,而且比n ... 
- Mesos源码分析(13): MesosContainerier运行一个Task
			MesosContainerizer的实现在文件src/slave/containerizer/mesos/containerizer.cpp中 Future<bool> MesosC ... 
- 算法与数据结构(四) 图的物理存储结构与深搜、广搜(Swift版)
			开门见山,本篇博客就介绍图相关的东西.图其实就是树结构的升级版.上篇博客我们聊了树的一种,在后边的博客中我们还会介绍其他类型的树,比如红黑树,B树等等,以及这些树结构的应用.本篇博客我们就讲图的存储结 ... 
- React Native调试实用技巧,React Native开发者必会的调试技巧
			在做React Native开发时,少不了的需要对React Native程序进行调试.调试程序是每一位开发者的基本功,高效的调试不仅能提高开发效率,也能降低Bug率.本文将向大家分享React Na ... 
- win7系统下dos界面无法自由调整大小
			刚开始在win7系统,在dos界面下做MySQL的实验,很多数据不能显示界面上,只能显示固定的大小,以为这是系统的原因,后来在网上查找了一些资料.终于发现可以自由调节dos界面大小的方法.下面给出截图 ... 
- [Swift]LeetCode31. 下一个排列 | Next Permutation
			Implement next permutation, which rearranges numbers into the lexicographically next greater permuta ... 
- [Swift]LeetCode659. 分割数组为连续子序列 | Split Array into Consecutive Subsequences
			You are given an integer array sorted in ascending order (may contain duplicates), you need to split ... 
- Python Django(WEB电商项目构建)
			(坚持每一天,就是成功) Python Django Web框架,Django是一个开放源代码的Web应用框架,由Python写成.采用了MTV的框架模式,即模型M,模板T和视图V组成. 安装Pyth ... 
- TortoiseSVN客户端的使用说明
			1 安装TortoiseSVN客户端 准备安装文件,TortoiseSVN-1.6.16.21511-x64-svn-1.6.17.msi,双击进行安装,按照提示步骤安装,安装完成后需重启计算机,SV ... 
- 要想学好Java编程,构造器、方法重载、this关键字、垃圾回收机制,这4关一定要过!
			有人说,你应该关注时事.财经,甚至流行的电影.电视剧,才有可能趁着热点写出爆文:有人说,你别再写“无聊”的技术文了,因为程序员的圈子真的很小,即便是像鸿洋那样的招牌大牛,文章是那么的干货,浏览量有多少 ... 
