博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
java笔记九:对象序列化与反序列化
阅读量:7304 次
发布时间:2019-06-30

本文共 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/

你可能感兴趣的文章
spring5新响应式框架-webflux实战
查看>>
软甲架构笔记 三
查看>>
STL training (uva上一些比较好的用来熟悉STL)
查看>>
[未完成]关于CSS的总结
查看>>
陈皓一起写Makefile 概述
查看>>
linux下安装启动rpc服务
查看>>
Software Testing, Lab 1
查看>>
World发布博客测试
查看>>
IIS 提高连接的并发数,和CPU的使用率。
查看>>
修改Sysvol复制方式
查看>>
python3.x中如何使用base64、base32、base16编码解码
查看>>
HDOJ 1084 排序 水
查看>>
深度拷贝一个链表
查看>>
POJ3229
查看>>
用promise封装ajax
查看>>
git创建工程
查看>>
UIScrollView的contentSize、contentOffset和contentInset属性
查看>>
IOS开发之自定义UITabBarController
查看>>
关于UI设计中的交互软件Axure7.0运用
查看>>
将网站项目转为 Web form应用程序(转)
查看>>