一般我们把对应特征写入文件叫序列化,把文件动态变成对象叫反序列化。序列化为文件是常用做法。
能够序列化的类必须实现java.io.Serializable接口,一个类对象是否可以序列化只要查看此类是否实现java.io.Serializable即可判断。
如果有的属性不需要序列化,则可用transient标记。
序列华思路:
1.用FileOutputStream关联对应的文件
2.ObjectOutputStream关联1中的流对象
3.用2中的对象流writeObject写入对象数据
4.关闭对象流和文件流
反序列化思路:
1.用FileInputStream关联对应的文件
2.用ObjectInputStream关联1中的流
3.用2中的对应流readObject获对象(强类型转换)
4.关闭对象流和文件流
import java.io.*; final class Employee implements Serializable { public String nameString; public String Address; public transient int SSN; public int number; public void mailCheck() { System.out.println("Mailing a check to " + nameString + " " + Address); } } public class mytest { public static void main(String[] args) { // TODO Auto-generated method stub /*序列化*/ Employee employee=new Employee(); employee.Address="北京復興大街一號"; employee.nameString="新華書店"; employee.SSN=1234; employee.number=86943; try { FileOutputStream os=new FileOutputStream("d:\ser.ser"); ObjectOutputStream oos=new ObjectOutputStream(os); oos.writeObject(employee); oos.close(); os.close(); System.out.println("Serialized data is saved in d:\ser.ser"); } catch (Exception e) { // TODO: handle exception e.printStackTrace(); } /*反序列化 */ Employee em; try { FileInputStream fs=new FileInputStream("d:\ser.ser"); ObjectInputStream ois=new ObjectInputStream(fs); em=(Employee)ois.readObject(); ois.close(); fs.close(); System.out.println("Deserialized Employee..."); System.out.println("Name: " + em.nameString); System.out.println("Address: " + em.Address); System.out.println("SSN: " + em.SSN); System.out.println("Number: " + em.number); } catch (IOException e) { // TODO: handle exception e.printStackTrace(); } catch (ClassNotFoundException e) { e.printStackTrace(); } } }