博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
java 序列化基础_Java序列化基础
阅读量:5732 次
发布时间:2019-06-18

本文共 2207 字,大约阅读时间需要 7 分钟。

本文将简介java序列化和反序列化的概念,并且提供一个简单类的序列化和反序列化实现。

概念

序列化:将实例的结构和数据保存到文件、网络等目的地的过程叫做序列化。

持久化和序列化的区别:持久化和序列化都是指将瞬时的实例结构及其数据存储到一个目的地,但是持久化的目的地是文件或者数据库等持久的,相对持久化来说,序列化的目的地不一定是持久的。

使用场景

1.  网络数据传输,使用ajax请求服务器数据,服务器端一般会将数据实例序列化为xml或者json返回给浏览器,使用js接收到序列化后的数据字符串,然后转为js对象使用。

2.  网络编程中将实例序列化通过sockt传递给接受者,然后接受者反序列化后得到对象,然后使用。

实现简单的序列化和反序列化

本例将java实例序列化到文件,然后读取文件反序列化得到对象实例。在本例中需要注意以下几点:

1.  被序列化的类必须实现 java.io.Serializable 接口,此接口是一个标记接口,并没有待实现的方法。

2.  静态成员不会被序列化。

3.  被transient关键字修饰的成员不会被序列化。

4.  将多个实例序列化到一个目标(在此例中目的地为文件)时,反序列化读对象的顺序应该和序列化写的顺序是相同的。比如有三个实例a、b、c,他们序列化的顺序为a、b、c,那么反序列化时,最先读到的对象实例是a、最后读到的实例为c。

5.  目标文件是一个二进制文件,而不是文本文件。

案例

import java.io.Serializable;

/**

* Created by yanwushu on 2016/7/18. */

public class Cat implements Serializable{

private static String TEMP = "this is a test string";//静态成员不会被序列化

private String name;

private transient int age;//transient修饰符修饰的成员不会被序列化

public Cat(String name, int age) {

this.name = name;

this.age = age;

}

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;

}

@Override

public String toString() {

return "Cat{" +

"temp ="+TEMP+

"name='" + name + '\'' +

", age=" + age +

'}';

}

}

package org.yanwushu.serialize.example;

import org.junit.Test;

import java.io.*;

/**

* Created by yanwushu on 2016/7/18.

*/

public class TestClass {

//简单的类序列化

@Test

public void serializeTest(){

Cat c = new Cat("kitty" , 2);

try {

FileOutputStream fos = new FileOutputStream("cat.yanwushu");

ObjectOutputStream oos = new ObjectOutputStream(fos);

oos.writeObject(c);

oos.flush();

oos.close();

System.out.println("cat serialized completed:" + c.toString());

} catch (FileNotFoundException e) {

e.printStackTrace();

} catch (IOException e) {

e.printStackTrace();

}

}

//简单的类反序列化

@Test

public void deserializeTest(){

try {

FileInputStream fis = new FileInputStream("cat.yanwushu");

ObjectInputStream ois = new ObjectInputStream(fis);

Cat c = (Cat) ois.readObject();

ois.close();

System.out.println("cat deserialize completed , and the content is :"+c.toString());

} catch (IOException e) {

e.printStackTrace();

} catch (ClassNotFoundException e) {

e.printStackTrace();

}

}

}

转载地址:http://jxowx.baihongyu.com/

你可能感兴趣的文章
代码分析系列 内存执行过程
查看>>
iOS开发-邮件发送
查看>>
/etc/resolv.conf文件详解
查看>>
【转】VC的MFC中重绘函数的使用总结(整理)
查看>>
JQuery日记_5.13 Sizzle选择器(六)选择器的效率
查看>>
System.gc()与Object.finalize()的区别
查看>>
Memcache存储大数据的问题
查看>>
HTML5区域范围文本框实例页面
查看>>
oracle查看经常使用的系统信息
查看>>
Windows Server 2012 R2 初体验
查看>>
zabbix自动发现主机,自动注册,自动拉取
查看>>
Collection源码分析(五):HashSet源码分析
查看>>
小博老师解析Java核心技术 ——JDBC参数化查询(一)
查看>>
C++ 重写重载重定义区别
查看>>
C++多态之 虚函数实现机制
查看>>
微信Tinker的一切都在这里,包括源码(一)
查看>>
这些新的生物识别你肯定不知道
查看>>
外籍IT也埋怨。
查看>>
跑酷游戏_1
查看>>
美团闪回工具MyFlash
查看>>