Java序列化与反序列化(实践)
2010-03-21 12:51:42| 分类: 软件使用 | 标签:java it 学习 软件 |字号大中小 订阅
基本概念:
序列化是将对象状态转换为可保持或传输的格式的过程。与序列化相对的是反序列化,它将流转换为对象。这两个过程结合起来,可以轻松地存储和传输数据。
昨天在一本书上看到了,好好实践了一下,序列化为一般文件,也序列化为XML文件(使用XStream)。
用于序列化的实体类Person.java 代码如下(记得需要实现Serializable接口):
import java.io.Serializable;
@SuppressWarnings("serial")
public class Person implements Serializable{
private String name;
private int age;
public Person(){
}
public Person(String str, int n){
System.out.println("Inside Person's Constructor");
name = str;
age = n;
}
String getName(){
return name;
}
int getAge(){
return age;
}
}
序列化、反序列化为一般的文件,SerializeToFlatFile.java类的代码如下:
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
public class SerializeToFlatFile {
public static void main(String[] args) {
SerializeToFlatFile ser = new SerializeToFlatFile();
ser.savePerson();
ser.restorePerson();
}
public void savePerson(){
Person myPerson = new Person("Jay",24);
try {
FileOutputStream fos = new FileOutputStream("E:\\workspace\\2010_03\\src\\myPerson.txt");
ObjectOutputStream oos = new ObjectOutputStream(fos);
System.out.println("Person--Jay,24---Written");
System.out.println("Name is: "+myPerson.getName());
System.out.println("Age is: "+myPerson.getAge());
oos.writeObject(myPerson);
oos.flush();
oos.close();
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
}
public void restorePerson() {
try {
FileInputStream fis = new FileInputStream("E:\\workspace\\2010_03\\src\\myPerson.txt");
ObjectInputStream ois = new ObjectInputStream(fis);
Person myPerson = (Person)ois.readObject();
System.out.println("\n--------------------\n");
System.out.println("Person--Jay,24---Restored");
System.out.println("Name is: "+myPerson.getName());
System.out.println("Age is: "+myPerson.getAge());
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
}
}
运行结果为(console输出),当然可以查看到myPerson.txt文件已经生成:
Inside Person's Constructor
Person--Jay,24---Written
Name is: Jay
Age is: 24
--------------------
Person--Jay,24---Restored
Name is: Jay
Age is: 24
序列化、反序列化为XML文件,我使用了XStream来序列化,需要引入xstream-1.3.1.jar包的支持,
http://xstream.codehaus.org/download.html 处可以下载jar,然后引入到Eclipse中的build path中。
Serialize.java的代码如下:
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import com.thoughtworks.xstream.*;
public class Serialize {
public static void main(String[] args) {
Serialize ser = new Serialize();
ser.serializeToXml();
ser.deSerializeFromXml();
}
public void serializeToXml(){
Person[] myPerson = new Person[2];
myPerson[0] = new Person("Jay",24);
myPerson[1] = new Person("Tom",23);
XStream xstream = new XStream();
try {
FileOutputStream fos = new FileOutputStream("E:\\workspace\\2010_03\\src\\myPerson.xml");
xstream.toXML(myPerson,fos);
} catch (FileNotFoundException ex) {
ex.printStackTrace();
}
System.out.println(xstream.toXML(myPerson));
}
public void deSerializeFromXml(){
XStream xs = new XStream();
Person[] myPerson = null;
try {
FileInputStream fis = new FileInputStream("E:\\workspace\\2010_03\\src\\myPerson.xml");
myPerson=(Person[])xs.fromXML(fis);
if (myPerson != null)
{
int len = myPerson.length;
for (int i=0;i<len;i++)
{
System.out.println(myPerson[i].getName());
System.out.println(myPerson[i].getAge());
}
}
} catch (FileNotFoundException ex) {
ex.printStackTrace();
}
}
}
运行结果为(console输出),当然可以查看到myPerson.xml文件已经生成:
Inside Person's Constructor
Inside Person's Constructor
<Person-array>
<Person>
<name>Jay</name>
<age>24</age>
</Person>
<Person>
<name>Tom</name>
<age>23</age>
</Person>
</Person-array>
Jay
24
Tom
23
发表评论
-
高效的编程语言
2012-09-18 11:40 01.创建对象:如果是一个工具类,那么就使用静态工厂方法代替构造 ... -
java 的特殊类型修饰
2012-09-18 10:22 685Java中的transient,volatile和 ... -
什么是浅表副本
2012-09-14 11:48 3473什么是浅表副本 ArrayLis ... -
设计模式
2012-08-17 17:11 664Abstract Factory:抽象工厂-- ... -
java lock的机制
2012-08-01 17:23 676Java.util.cocurrent.lock ... -
java 复制文件注意事项
2012-07-10 14:50 5671.复制文件的时候如果文件在某个文件夹里面,要做的不仅是创建文 ... -
Java URLConnection 总结
2012-07-12 17:13 839Java URLConnection 总结 ... -
获取服务器路径
2011-07-02 11:49 6961.request.getRealPath("/&q ...
相关推荐
序列化和反序列化的封装类,只要调用就行 序列化和反序列化的封装类 序列化和反序列化的封装类 序列化和反序列化的封装类 序列化和反序列化的封装类
什么叫反序列化? 就是再把介质中的东西还原成对象,把石子还原成人的过程。 在进行这些操作的时候都需要这个可以被序列化,要能被序列化,就得给类头加[Serializable]特性。 通常网络程序为了传输安全才这么做。不...
java序列化和反序列化java序列化和反序列化java序列化和反序列化
序列化和反序列化dll文件和proto
C++ JSON 序列化与反序列化 相关的博客文章见:http://blog.csdn.net/TragicGuy
java 对象的序列化与反序列化 java 对象的序列化与反序列化
大数据场景下序列化和反序列化技术,谷歌提供技术 protobuf-jetbrains-plugin-0.13.0.zip
Xson是一个Java对象序列化和反序列化程序。支持Java对象到字节数组的序列化,和从字节数组到Java对象的反序列化。 Maven: <groupId>com.github.xsonorg</groupId> <artifactId>xson-core <version>1.0.1 ...
jackson json序列化 json反序列化 jar包 直接下载拷贝到项目中buildpath即可使用
序列化和反序列化实例 序列化和反序列化实例 窗体实例 序列化和反序列化实例 序列化和反序列化实例 序列化和反序列化实例 序列化和反序列化实例
一个简单的学生管理系统,利用序列化和反序列化存储学生信息,使之下次运行时学生信息还在!
Json序列化和反序列化 包含.NET各版本Newtonsoft.Json.dll 以及程序集使用方法详细说明
.net 序列化和反序列化Json,目前在.net 3.5之前序列化json用的Newtonsoft.dll,不过3.5之后包括3.5,可以使用.net自带方法,详见压缩包内文件。
通过html页面调用js获取页面数据转化成json数据插入数据库和写入js文件,读取数据库数据转换成json数据反序列化化在页面上显示
Unity 中使用Protobuf进行序列化和反序列化的Demo
protobuf常用序列化和反序列化API,相关教程:http://blog.csdn.net/tennysonsky/article/details/73920767
C# xml序列化及反序列化(解析xml为对象及对象转xml保存),方法一反序列化取节点KV值,方法二反序列化取节点标签值,方法三取节点KV值,并增加节点对象数组及节点标签组合反序列化
函数API接口感受到非常不适应,你一定非常怀念使用java和C#对一个实体类的那么轻松加简单的直接json序列化,本篇博客使用一个RapidJsonHelper类,将帮你实现对一个C++实体类的的序列化和反序列化。rapidjson的版本是...
Json序列化与反序列化
python序列化反序列化和异常处理笔记