java笔记九:对象序列化与反序列化

王朝学院·作者佚名  2016-04-26
窄屏简体版  字體: 小  |  中  |  大  |  超大  

在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;

10

11 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 @Override

21 public String toString() {

22 return "(" + x + "," + y + "," + z + ")";

23 }

24 }

25

26 public class ObjectSerializableDemo {

27

28

29 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,2*i,3*i));

35 }

36 oos.flush();

37 oos.close();

38

39 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 }

46

47 }

运行结果:

(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修饰了,被这个关键字修饰的属性是不参与持久化的。

 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
© 2005- 王朝網路 版權所有 導航