本文共 1822 字,大约阅读时间需要 6 分钟。
在java程序运行过程中,有许多的对象同时存在,但是程序结束运行或者JVM停止运行时这些对象都会消失。如何将这些对象保存起来以便下一次 再将这些对象读入内存呢?或者如何将某些对象通过网络传到另一端的java程序?实施对象的这种操作叫做对象的序列化(或者叫做持久化),重新读入内存叫 做反序列化。
基本数据类型的包装类和所有容器类都可以被序列化。用户自定义的类默认是不可以被序列化的。如果想要自己定义的类可以序列化就必须让这个类实现java.io.Serializable接口。
下面看一个Demo:1 package com.serializable; 2 3 import java.io.FileInputStream; 4 import java.io.FileNotFoundException; 5 import java.io.FileOutputStream; 6 import java.io.IOException; 7 import java.io.ObjectInputStream; 8 import java.io.ObjectOutputStream; 9 import java.io.Serializable;1011 class Point implements Serializable{12 private int x;13 private int y;14 private transient int z; //用关键字transient修饰的属性不能参与序列化的过程15 public Point(int x,int y,int z) {16 this.x = x;17 this.y = y;18 this.z = z;19 }20 @Override21 public String toString() {22 return “(“ + x + “,” + y + “,” + z + “)”;23 }24 }2526 public class ObjectSerializableDemo {272829 public static void main(String[] args) throws FileNotFoundException, IOException, ClassNotFoundException {30 String fileName = “F:\shar\test\test7.txt”;31 //将二进制文件转换成一个对象输出流32 ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(fileName));33 for (int i = 0; i < 10; i++) {34 oos.writeObject(new Point(i,2i,3i));35 }36 oos.flush();37 oos.close();3839 ObjectInputStream ois = new ObjectInputStream(new FileInputStream(fileName));40 for (int i = 0; i < 10; i++) {41 Point p = (Point)ois.readObject();42 System.out.println(p + “ “);43 }44 ois.close();45 }4647 }
运行结果:
(0,0,0) (1,2,0) (2,4,0) (3,6,0) (4,8,0) (5,10,0) (6,12,0) (7,14,0) (8,16,0) (9,18,0)从运行结果可以看出,所有Piont类对象的z属性都没有被序列化。应为它被一个关键字transient修饰了,被这个关键字修饰的属性是不参与持久化的。
转载地址:http://bmbnm.baihongyu.com/