【java学习笔记】序列化、反序列化
序列化 是将对象的完整信息保存起来的过程(持久化)。 序列化流:ObjectOutputStream
反序列化 是将对象进行还原的过程(反持久化)。 反序列化流:ObjectInputStream
1.序列化
①一个对象想要被序列化,这个对象对应的类必须实现Serializable。Serializable接口中没有任何的方法和属性,仅仅用于标志这个类产生的对象可以被序列化。
②被static/transient关键字修饰的属性不会被序列化
③一个类在实现Serializable接口之后会默认添加一个属性serialVersionUID(版本号),默认是用private static final long 修饰,版本号的值会根据当前类中的属性和方法自动计算。一个对象在序列化的时候会把这个版本号一起序列化出去,反序列化的时候就会比较对象中的版本号和当前类的版本号是否一致---需要手动指定版本号,防止类产生微小改动的时候已经序列化的对象反序列化不回来。
④集合和大部分映射不能被序列化。
import java.io.Serializable;
public class Person implements Serializable {
private static final long serialVersionUID = 1984254532934148317L;
private String name;
private int age;
private char gender;
private double weight;
private transient String cloth; // transient关键字标记的成员变量不参与序列化过程
public static String classroom;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getCloth() {
return cloth;
}
public void setCloth(String cloth) {
this.cloth = cloth;
}
public char getGender() {
return gender;
}
public void setGender(char gender) {
this.gender = gender;
}
public double getWeight() {
return weight;
}
public void setWeight(double weight) {
this.weight = weight;
}
}
Person implements Serializable
import java.io.FileOutputStream;
import java.io.ObjectOutputStream; public class ObjectOutputStreamDemo {
public static void main(String[] args) throws Exception {
Person p = new Person();
p.setName("肉丝");
p.setAge(3);
p.setCloth("无");
// p.classroom = "604"; // 创建序列化流
ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream("D:\\p.data"));
// 写出对象
out.writeObject(p);
// 关流
out.close();
}
}
2.反序列化
import java.io.FileInputStream;
import java.io.ObjectInputStream; public class ObjectInputStreamDemo {
public static void main(String[] args) throws Exception {
// 创建反序列化流
ObjectInputStream in = new ObjectInputStream(new FileInputStream("D:\\p.data"));
// 读取对象
Person p = (Person) in.readObject();
in.close();
System.out.println(p.getName());
System.out.println(p.getAge());
System.out.println(p.getCloth());
// System.out.println(p.classroom);
}
}
结果:

【java学习笔记】序列化、反序列化的更多相关文章
- Java学习笔记——序列化和反序列化
寒雨连江夜入吴,平明送客楚山孤. 洛阳亲友如相问,一片冰心在玉壶. --芙蓉楼送辛渐 持久化数据的第一种方式.在序列化之前也可以把数据打散逐行存储在文件中,然后在逐行读取. 比如定Student类 用 ...
- Java学习笔记4
Java学习笔记4 1. JDK.JRE和JVM分别是什么,区别是什么? 答: ①.JDK 是整个Java的核心,包括了Java运行环境.Java工具和Java基础类库. ②.JRE(Java Run ...
- 0032 Java学习笔记-类加载机制-初步
JVM虚拟机 Java虚拟机有自己完善的硬件架构(处理器.堆栈.寄存器等)和指令系统 Java虚拟机是一种能运行Java bytecode的虚拟机 JVM并非专属于Java语言,只要生成的编译文件能匹 ...
- java学习笔记10--枚举
java学习笔记10--枚举 在JDK1.5之前,java可以有两种方式定义新类型:类和接口.对于大部分面向对 象编程来说,这两种方法看起来似乎足够了,但是在一些特殊情况下,这些方法就不适合.例如,想 ...
- java学习笔记16--I/O流和文件
本文地址:http://www.cnblogs.com/archimedes/p/java-study-note16.html,转载请注明源地址. IO(Input Output)流 IO流用来处理 ...
- java学习笔记10--泛型总结
java学习笔记系列: java学习笔记9--内部类总结 java学习笔记8--接口总结 java学习笔记7--抽象类与抽象方法 java学习笔记6--类的继承.Object类 java学习笔记5-- ...
- Java学习笔记【一、环境搭建】
今天把java的学习重新拾起来,一方面是因为公司的项目需要用到大数据方面的东西,需要用java做语言 另一方面是原先使用的C#公司也在慢慢替换为java,为了以后路宽一些吧,技多不压身 此次的学习目标 ...
- 0037 Java学习笔记-多线程-同步代码块、同步方法、同步锁
什么是同步 在上一篇0036 Java学习笔记-多线程-创建线程的三种方式示例代码中,实现Runnable创建多条线程,输出中的结果中会有错误,比如一张票卖了两次,有的票没卖的情况,因为线程对象被多条 ...
- 0035 Java学习笔记-注解
什么是注解 注解可以看作类的第6大要素(成员变量.构造器.方法.代码块.内部类) 注解有点像修饰符,可以修饰一些程序要素:类.接口.变量.方法.局部变量等等 注解要和对应的配套工具(APT:Annot ...
- Java学习笔记(04)
Java学习笔记(04) 如有不对或不足的地方,请给出建议,谢谢! 一.对象 面向对象的核心:找合适的对象做合适的事情 面向对象的编程思想:尽可能的用计算机语言来描述现实生活中的事物 面向对象:侧重于 ...
随机推荐
- nagios 数据更新不及时的问题
配置nagios的时候发现一个问题,就是改变了某个主机或者服务的描述之后,在主页信息总是更新很慢,而且告警信息还是老的信息,重启多次 nagios甚至重启主机都没有解决,其实这些都是由于nagios每 ...
- postgres允许别人访问连接配置
- python _init_学习
今天继续学习python,接触了_init_,感觉很好玩照着教程手写了一些代码,感觉编程语言是互通的,只是换个了形式来表达 #coding=utf-8#类似于java的构造器class Person: ...
- Apache 配置SSI速记
1. 启用模块 httpd.conf LoadModule filter_module modules/mod_filter.so 2. <Directory 的Options配置中增加Incl ...
- Python之Suds库调用WCF实现复杂参数序列化
今年主要做自动化测技术支持工作,最近一直在做接口自动化这块,前些天在研究将web页面模拟http进行接口自动化,这周杭州那边想测试WCF服务,所以这两天一直在探索.遇到的第一个问题就是服务参数传参序列 ...
- 网络搬砖是件苦力活 CMS推荐GHOS博客程序
搬砖不是技术活,而是苦力(bi)活,富有技术含量的苦力活说不定就是一门可以持续的生意. 我们不生产内容,我们只是互联网的内容搬运工,这是大部分不具备原创能力个人站长的心声.虽然原创能力不够,但是服务目 ...
- BZOJ 3907: 网格 [Catalan数 高精度]
3907: 网格 Time Limit: 1 Sec Memory Limit: 256 MBSubmit: 402 Solved: 180[Submit][Status][Discuss] De ...
- Python图形界面开发编程:wxPython(浅尝篇)
Python 提供了多个图形开发界面的库,几个常用 Python GUI 库如下: Tkinter: Tkinter 模块(Tk 接口)是 Python 的标准 Tk GUI 工具包的接口 .Tk 和 ...
- jquery对象和DOM对象的区别和转换
jquery对象和DOM对象的区别和转换 在使用jquery时,我们直接通过jq的选择器获取元素,然后对元素进行操作,用jq选择器获取到的对象是一个jq对象,jq对象能够使用jq提供的方法,但是不能用 ...
- JMETER_16个逻辑控制器详解
Jmeter逻辑控制器(Logic Controller)介绍: 1. Jmeter官网对逻辑控制器的解释是:"Logic Controllers determine the order i ...