Java序列化

    Java提供了一种对象序列化的机制,即一个对象可以被表示为一个字节序列,该字节序列包括该对象的数据、有关对象的类型的信息和存储在对象中数据的类型。

    将序列化对象写入文件之后,可以从文件中读取出来,并且对它进行反序列化,也就是说,对象的类型信息、对象的数据和对象中的数据类型可以用来在内存中新建对象。

    序列化的整个过程都是在Java虚拟机(JVM)中独立的,即在一个平台上序列化的对象可以在另一个完全不同的平台上反序列化该对象。


public final void writeObject(Object x) throws IOException

    ObjectOutputStream类包含的该方法序列化一个对象,并将它送到输出流。

public final Object readObject() throws IOException, ClassNotFoundException 

    相似的,ObjectInputStream类包含的该方法从流中取出一个对象,并将该对象反序列化。它的返回值为Object,因此需要将它转换成合适的数据类型。


    下面将通过一个例子来演示序列化在Java中是怎样工作的,首先定义Employee类,该类实现了Serializable接口。

Employee.java文件代码

public class Employee implements java.io.Serializable {
public String name;
public String address;
public transient int SSN;
public int number;
public void mailCheck()
{
System.out.println("Mailing a check to " + name
+ " " + address);
}
}


    接着,将在主程序中实例化一个Employee对象,并将该对象序列化到一个文件中。该程序执行后,就创建了一个名为employee.ser文件。

SerializeDemo.java
import java.io.*;

public class SerializeDemo {
public static void main(String[] args) {
Employee e = new Employee();
e.name = "Reyan Ali";
e.address = "Phokka Kuan, Ambehta Peer";
e.SSN = 11122333;
e.number = 101;

try {
FileOutputStream fileOut = new FileOutputStream("F://java/employee.ser");
ObjectOutputStream out = new ObjectOutputStream(fileOut);
out.writeObject(e);
out.close();
fileOut.close();
System.out.println("Serialized data is saved in F://java/employee.ser");
} catch (Exception exception) {
exception.printStackTrace();
}
}
}

    下面的程序实例了反序列化,F://java/employee.ser储存了该对象。

DeserializeDemo.java
import java.io.*;

public class DeserializeDemo {
public static void main(String[] args) {
Employee e = null;
try {
FileInputStream fileIn = new FileInputStream("F://java/employee.ser");
ObjectInputStream in = new ObjectInputStream(fileIn);
e = (Employee) in.readObject();
in.close();
fileIn.close();
} catch (Exception exception) {
//TODO: handle exception
}
System.out.println("Deserialized Employee...");
System.out.println("Name: " + e.name);
System.out.println("Address: " + e.address);
System.out.println("SSN: " + e.SSN);
System.out.println("Number: " + e.number);
}
}

以上程序编译运行结果如下:





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值