对象序列化(串行化)的作用、使用
来源:互联网 发布:网络爬虫工具 编辑:程序博客网 时间:2024/05/29 12:12
一、序列化的作用
序列化定义:将对象转换为二进制数据流(操作目标是对象)。
作用:方便传输及保存,可以帮开发者完成保存和读取对象成员变量取值的过程。
关键点:
1.一个类若想被序列化,则要实现java.io.serializable接口,该接口中没有定义任何方法,是一个标识符(maker interface),当一个类实现了该接口,表示该类是可以被序列化的。
2.在序列化时,static变量是无法序列化的;如果A包含了一个对B的引用,当A序列化的时候也将B一并的序列化;如果A可以序列化,B不可以序列化,则A序列化的时候将会发生异常,将B的引用设为transient,该关键字表示变量不会被序列化,这样A就可以被序列化了。static和transient关键字修饰的变量、引用不可以被序列化。
3.如果一个类可以被序列化,其子类也可以被序列化;因为子类也继承了serializable接口。
二、序列化使用方法
关键点:
1.一个类若想被序列化,则要实现java.io.serializable接口,该接口中没有定义任何方法,是一个标识符(maker interface),当一个类实现了该接口,表示该类是可以被序列化的。
2.在序列化时,static变量是无法序列化的;如果A包含了一个对B的引用,当A序列化的时候也将B一并的序列化;如果A可以序列化,B不可以序列化,则A序列化的时候将会发生异常,将B的引用设为transient,该关键字表示变量不会被序列化,这样A就可以被序列化了。static和transient关键字修饰的变量、引用不可以被序列化。
3.如果一个类可以被序列化,其子类也可以被序列化;因为子类也继承了serializable接口。
二、序列化使用方法
1.首先介绍两个用于序列化操作的类:ObjectlnputStream与ObjectOutputStream
(1)ObjectOutputStream(序列化)——将对象保存在文件之中
java.lang.Object java.io.OutputStream java.io.ObjectOutputStream
public class ObjectOutputStream
protected
ObjectOutputStream()
为完全重新实现 ObjectOutputStream 的子类提供一种方法,让它不必分配仅由 ObjectOutputStream 的实现使用的私有数据。
ObjectOutputStream(OutputStream out)
创建写入指定 OutputStream 的 ObjectOutputStream。(2)ObjectlnputStream(反序列化)——从文件读取已保存的对象
java.lang.Object java.io.InputStream java.io.ObjectInputStream
public class ObjectInputStream
protected
ObjectInputStream()
为完全重新实现 ObjectInputStream 的子类提供一种方式,让它不必分配仅由 ObjectInputStream 的实现使用的私有数据。
ObjectInputStream(InputStream in)
创建从指定 InputStream 读取的 ObjectInputStream。
writeObject
public final void writeObject(Object obj) throws IOException
- 将指定的对象写入 ObjectOutputStream
readObject
public final Object readObject() throws IOException, ClassNotFoundException
- 从 ObjectInputStream 读取对象
3.序列化步骤
(1)步骤1——对象实现Serializable
示例:
class Person implements Serializable
{
private String name;
private int age;
public Person(String name,int age)
{
this.name = name;
this.age = age;
}
public String toString()
{
return "姓名:"+this.name+",年龄:"+this.age;
}
}
(2)步骤2——使用ObjectOutputStream对对象进行序列化(序列化的内容是输出流)
public static void serialize(File f) throws Exception
{
OutputStream out = FileOutputStream(f);
ObjectOutputStream obj = new ObjectOutputStream(out); //把输出流out进行序列化
obj.writeObject(new Person("张三",30));
obj.close();
}
(3)步骤3——使用ObjectInputStream对对象进行反序列化(反序列化的内容是输入流)
public static void deserialize(File f) throws Exception
{
InputStream in = new FileInputStreanm(f);
ObjectInputStream obj = new ObjectInputStream(in);
Person p = (Person)obj.readObject();
System.out.println(p.toString());
}
4.程序完整示例
import java.io.*;
class Person implements Serializable
{
private String name;
private int age;
public Person(String name,int age)
{
this.name = name;
this.age = age;
}
public String toString()
{
return "姓名:"+this.name+",年龄:"+this.age;
}
}
public class PrintDemo
{
public static void main(String[] args) throws Exception
{
File f = new File("g:\\1.txt");
serialize(f);
deserialize(f);
}
public static void serialize(File f) throws Exception
{
OutputStream out = new FileOutputStream(f);
ObjectOutputStream obj = new ObjectOutputStream(out); //把输出流out进行序列化
obj.writeObject(new Person("张三",30));
obj.close();
}
public static void deserialize(File f) throws Exception
{
InputStream in = new FileInputStream(f);
ObjectInputStream obj = new ObjectInputStream(in);
Person p = (Person)obj.readObject();
System.out.println(p.toString());
}
}
class Person implements Serializable
{
private String name;
private int age;
public Person(String name,int age)
{
this.name = name;
this.age = age;
}
public String toString()
{
return "姓名:"+this.name+",年龄:"+this.age;
}
}
public class PrintDemo
{
public static void main(String[] args) throws Exception
{
File f = new File("g:\\1.txt");
serialize(f);
deserialize(f);
}
public static void serialize(File f) throws Exception
{
OutputStream out = new FileOutputStream(f);
ObjectOutputStream obj = new ObjectOutputStream(out); //把输出流out进行序列化
obj.writeObject(new Person("张三",30));
obj.close();
}
public static void deserialize(File f) throws Exception
{
InputStream in = new FileInputStream(f);
ObjectInputStream obj = new ObjectInputStream(in);
Person p = (Person)obj.readObject();
System.out.println(p.toString());
}
}
0 0
- 对象序列化(串行化)的作用、使用
- 对象序列化的作用
- 对象的串行化
- 对象的串行化
- 对象的串行化
- PHP程序对象、数组串行化(序列化)
- 序列化(串行化)-
- 串行化(序列化)
- php对象的序列化(串行化)用作 写入文件或者网络传输
- 使用thrift串行化对象
- 对象的串行化(Serialization)
- 对象的串行化(Serialization)
- 对象的串行化(Serialization)
- 对象的串行化(Serialization)
- 对象的串行化(Serialization)
- 对象的串行化(Serialization)
- 对象的串行化(Serialization)
- 对象的串行化(Serialization)
- android中圆角图片(ImageView)
- 回调函数例子
- 正则表达式五
- IndexWriter中的commit、rollback和close
- 热点分析—model builder 建模 流程
- 对象序列化(串行化)的作用、使用
- Mahout中mahout-examples-0.9-job.jar例子运行记录
- sqlserver 执行大数据脚本
- 2013级Java第1周(春)项目——一个简单的考勤签到程序
- PHP(2):安装Wordpress
- fukan之西柚2.0
- 【CSharp】九九乘法口诀表实现
- pat 1012
- Win8+VS2012 配置OpenGL SuperBible5 环境