zoukankan      html  css  js  c++  java
  • java笔记九:对象序列化与反序列化

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

  • 相关阅读:
    静态页转换平台(StaticPol)-静态页生成终极解决方案
    用DataSetSurrogate加速WebService
    压缩和解压缩数据流
    Stream 和 byte[] 之间的转换(转)
    优化网站性能 提高网站速度访问速度的14条实践(转)
    常用WebServices返回数据的4种方法比较
    .Net 中的序列化与反序列化
    对象序列化反序列化
    ASP.Net中自定义Http处理及应用之HttpModule篇
    利用UrlRewrite,asp.net动态生成htm页面
  • 原文地址:https://www.cnblogs.com/liuling/p/serializable.html
Copyright © 2011-2022 走看看