Java序列化与反序列化
来源:互联网 发布:turn.js翻页触发动画 编辑:程序博客网 时间:2024/06/08 05:15
前言
1、静态变量无法序列化;
2、transient修饰的变量无法序列化
有些时候我们不需要把对象的全部属性都序列化,就可以使用transient关键字。
3、序列化的好处
序列化的好处包括可以持久化对象,将对象保存在本地磁盘,下次直接读取出来就可以使用;
在远程传输的过程中,除了需要传输文字、图片等等,有时候需要传输对象,而传输对象就需要将其转化为字节,传输在网络上,接收端将其接收到以后再转为对象,而这个过程不需要我们自己实现,只要类实现了Serializable接口就行了,这是个标记接口,没有方法需要我们实现。
下面通过代码来看序列化和反序列化,下面代码功能是将对象序列化存储在本地,然后再反序列化读取到对象。
package cn.zhoucy.serializable;import java.io.File;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.ObjectInputStream;import java.io.ObjectOutputStream;import java.io.Serializable;class Person implements Serializable{ private static final long serialVersionUID = 1L; private String name; private int age; private transient String nickName; static byte count = 1; public Person(){ super(); } public Person(String name, int age,String nickName) { super(); this.name = name; this.age = age; this.nickName = nickName; count++; } public String getInfo(){ return this.name +" "+ this.age+" "+ this.nickName; }}public class SerializableTest { public static void main(String[] args) throws Exception { File path = new File("E:/javaA/person"); path.createNewFile(); //先序列化保存到本地 Person p1 = new Person("peter", 12,"littleP"); FileOutputStream fos = new FileOutputStream(path); ObjectOutputStream oos = new ObjectOutputStream(fos); oos.writeObject(p1); oos.close(); fos.close(); //Person.count = 10; //开始读出来 FileInputStream fis = new FileInputStream(path); ObjectInputStream ois = new ObjectInputStream(fis); Person p2 = (Person)ois.readObject(); ois.close(); fis.close(); System.out.println(p2.getInfo()); System.out.println(p2.count); }}
输出结果:
这里有两个点要注意:
1、最后一个nickName属性输出是null,是因为被transient 修饰,所以不会被序列化,故而读出来是null;
2、count属性是static修饰的,按理说是不会被序列化的,为什么这里又会输出2呢?是因为这个测试代码在同一台机器上同一个进程里面,static只保存一份,本地的进程中保存有count的量,所以可以读取出来,如果是远程通信就不会有这种情况了。总之这里输出的count=2并不是因为序列化保存了count属性。如果把注释掉的Person.count = 10;打开,那么控制台打印输出的就会是10。
阅读全文
0 0
- java序列化与反序列化
- java序列化与反序列化
- java序列化与反序列化
- java序列化与反序列化
- Java序列化与反序列化
- Java序列化与反序列化
- java 序列化 与 反序列化
- java序列化与反序列化
- JAVA序列化与反序列化
- java序列化与反序列化
- java序列化与反序列化
- java序列化与反序列化
- Java序列化与反序列化
- Java序列化与反序列化
- Java序列化与反序列化
- Java序列化与反序列化
- Java序列化与反序列化
- java序列化与反序列化
- 数字货币开发专题(创世区块里藏着什么秘密)
- java常用集合效率测试
- Java基础编程2—邮件验证
- BOS项目
- 欢迎使用CSDN-markdown编辑器
- Java序列化与反序列化
- AOP实现日志和异常处理
- 判断是否是手机访问
- vue路由
- LeetCode 104 Maximum Depth of Binary Tree(DFS)
- codevs 2072 分配房间(贪心+二分)
- JS与Android原生交互
- C# 跨线程调用
- Java 中 Comparable 和 Comparator 比较