Java序列化基础
来源:互联网 发布:手机远程控制电脑 知乎 编辑:程序博客网 时间:2024/06/05 00:53
原文地址:http://www.yanwushu.com/post/24.html
本文将简介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(); } }}
0 0
- Java 基础----序列化
- Java序列化基础
- Java序列化基础
- Java序列化基础
- JAVA对象序列化基础
- JAVA序列化基础概念
- Java基础----序列化问题
- Java基础---序列化Serializable
- java基础之序列化
- JavaWeb基础---Java序列化
- 13.Java 基础 - 序列化
- Java序列化基础案例
- Java序列化格式-Java基础
- 【Java基础之三】Java序列化
- java-基础--串行化(序列化)
- Java对象序列化使用基础
- 介绍Java对象序列化使用基础
- Java序列化基础事项回顾
- 地球实时卫星图片资源-与当前时间只相差30分钟
- 面试,学会这些就足够啦!!!
- 从网络获取文件
- MeasureSpec.UNSPECIFIED, MeasureSpec.EXACTLY, MeasureSpec.AT_MOST
- JAVAWEB其他知识
- Java序列化基础
- C语言学习-函数
- 一个实用的Eclipse快捷键
- (转)大型网站的系统架构
- 33 把数组排成最小数
- oracle 分页查询语句
- javamail异常发送邮件出现Exception in thread "main" java.lang.NoClassDefFoundError: com/sun/mail/ut
- 关于在win7上使用colinux蓝屏,死机解决方案,亲测可用
- OpenCV内存池管理(二)