首先解释两个概念,何为序列化?何为反序列化?
序列化:将对象转化成流的过程称为序列化
反序列化:将流转化成对象的过程称之为反序列化
序列化与反序列化必须遵守的原则
a)Java对象
在java中要想使一个java对象可以实现序列化与反序列化,必须让该类实现java.io.Serializable接口
java.io.Serializable接口定义如下:
publicinterfaceSerializable {
}
|
从上述定义中可以看到该接口中未定义任何方法,这大大的简化了开发者
b)序列化主要依赖java.io.ObjectOutputStream类,该类对java.io.FileOutputStream进一步做了封装,这里主要使用ObjectOutputStream类的writeObject()方法实现序列化功能
Demo:
/**
*将对象序列化到磁盘文件中
*@paramo
*@throwsException
*/
publicstaticvoidwriteObject(Object o)throwsException{
File f=newFile("d:""user.tmp");
if(f.exists()){
f.delete();
}
FileOutputStream os=newFileOutputStream(f);
//ObjectOutputStream核心类
ObjectOutputStream oos=newObjectOutputStream(os);
oos.writeObject(o);
oos.close();
os.close();
}
|
c)反序列化主要依赖java.io.ObjectInputStream类,该类对java.io.InputStream进一步做了封装,这里主要使用ObjectInputStream类的readObject()方法实现序列化功能
Demo:
/**
*反序列化,将磁盘文件转化为对象
*@paramf
*@return
*@throwsException
*/
publicstaticUser readObject(File f)throwsException{
InputStream is=newFileInputStream(f);
//ObjectOutputStream核心类
ObjectInputStream ois=newObjectInputStream(is);
return(User)ois.readObject();
}
|
贴出完整的demo
Java对象:
packagecom.io.bean;
importjava.io.Serializable;
publicclassUserimplementsSerializable{
privateintuserId;
privateStringuserName;
privateStringuserSex;
privateintuserAge;
publicintgetUserAge() {
returnuserAge;
}
publicvoidsetUserAge(intuserAge) {
this.userAge= userAge;
}
publicintgetUserId() {
returnuserId;
}
publicvoidsetUserId(intuserId) {
this.userId= userId;
}
publicString getUserName() {
returnuserName;
}
publicvoidsetUserName(String userName) {
this.userName= userName;
}
publicString getUserSex() {
returnuserSex;
}
publicvoidsetUserSex(String userSex) {
this.userSex= userSex;
}
@Override
publicString toString() {
returnthis.getUserId() +" "+this.getUserName()
+" "
+this.getUserSex() +" "+this.getUserAge();
}
}
|
序列化与反序列化
packagecom.io.test;
importjava.io.File;
importjava.io.FileInputStream;
importjava.io.FileOutputStream;
importjava.io.InputStream;
importjava.io.ObjectInputStream;
importjava.io.ObjectOutputStream;
importcom.io.bean.User;
publicclassTestSerializable {
/**
*将对象序列化到磁盘文件中
*@paramo
*@throwsException
*/
publicstaticvoidwriteObject(Object o)throwsException{
File f=newFile("d:""user.tmp");
if(f.exists()){
f.delete();
}
FileOutputStream os=newFileOutputStream(f);
//ObjectOutputStream核心类
ObjectOutputStream oos=newObjectOutputStream(os);
oos.writeObject(o);
oos.close();
os.close();
}
/**
*反序列化,将磁盘文件转化为对象
*@paramf
*@return
*@throwsException
*/
publicstaticUser readObject(File f)throwsException{
InputStream is=newFileInputStream(f);
//ObjectOutputStream核心类
ObjectInputStream ois=newObjectInputStream(is);
return(User)ois.readObject();
}
publicstaticvoidmain(String[] args)throwsException{
/*****************将对象序列化***************/
/*
User user=new User();
user.setUserId(1);
user.setUserName("张艺谋");
user.setUserSex("男");
user.setUserAge(50);
TestSerializable.writeObject(user);
*/
/*****************将对象序反列化***************/
User user=TestSerializable.readObject(newFile("d:""user.tmp"));
System.out.println(user);
}
}
|
分享到:
相关推荐
jackson工具库,支持JSON,XML格式实现java序列化反序列化操作。在XML格式进行反序列化时有一定的限制
java序列化和反序列化java序列化和反序列化java序列化和反序列化
java反序列化工具,覆盖jboss、weblogic、websphere。
Xson是一个Java对象序列化和反序列化程序。支持Java对象到字节数组的序列化,和从字节数组到Java对象的反序列化。 Maven: <groupId>com.github.xsonorg</groupId> <artifactId>xson-core <version>1.0.1 ...
java 对象的序列化与反序列化 java 对象的序列化与反序列化
在应用java进行c-s开发的时候,尤其涉及到图片和视频之间的传输时,需要用序列化和反序列化技术,希望对您有帮助
Java序列化与反序列化 Java序列化与反序列化 Java序列化与反序列化 Java序列化与反序列化 Java序列化与反序列化
java对象 java序列化 java反序列化
java序列化(Serializable)的作用和反序列化.doc 有详细的讲解哦。 在什么地方用的到都有说明的.
序列化是干什么的? 简单说就是为了保存在内存中的各种对象的状态(也就是实例...虽然你可以用你自己的各种各样的方法来保 存object states,但是Java给你提供一种应该比你自己好的保存对象状态的机制,那就是序列化。
java 常用序列化和反序列化框架使用demo ,java 常用序列化和反序列化框架使用demo
java 的序列化与反序列化举例测试
Java Json序列化与反序列化
极好的序列化与发序列化代码。可以处理array集合,数组或者单个对象等的序列化与反序列化。
java反序列化工具;weblogic反序列化工具;jboss反序列化工具。
学习Java序列化,里面包含一份PPT以及相应的源码演示
Java序列化和反序列化
大家请看Java的序列化结构有不足的地方请指教也希望指出不足的地方。
java序列化与反序列化