java笔记九:对象序列化与反序列化
2023-09-14 08:57:54 时间
在java程序运行过程中,有许多的对象同时存在,但是程序结束运行或者JVM停止运行时这些对象都会消失。如何将这些对象保存起来以便下一次 再将这些对象读入内存呢?或者如何将某些对象通过网络传到另一端的java程序?实施对象的这种操作叫做对象的序列化(或者叫做持久化),重新读入内存叫 做反序列化。
基本数据类型的包装类和所有容器类都可以被序列化。用户自定义的类默认是不可以被序列化的。如果想要自己定义的类可以序列化就必须让这个类实现java.io.Serializable接口。
下面看一个Demo:
1 package com.serializable; 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; 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; 20 @Override 21 public String toString() { 22 return “(“ + x + “,” + y + “,” + z + “)”; 26 public class ObjectSerializableDemo { 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 i++) { 34 oos.writeObject(new Point(i,2i,3i)); 36 oos.flush(); 37 oos.close(); 39 ObjectInputStream ois = new ObjectInputStream(new FileInputStream(fileName)); 40 for (int i = 0; i i++) { 41 Point p = (Point)ois.readObject(); 42 System.out.println(p + “ “); 44 ois.close(); 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修饰了,被这个关键字修饰的属性是不参与持久化的。
java中的IO流之序列化与反序列化(对象数据和文件的读写交互) 在之前的IO流中,都是内存与磁盘进行交互的读写,要传输只能在本地上进行传输。想要在网络上进行传输,那就要通过进行对象的传输,java万物皆对象嘛。
相关文章
- Java进阶(二十三)java中long类型转换为int类型
- java除法保留两位小数_JAVA除法保留小数点后两位的两种方法
- java工具类-Java对象转换成Map
- java bufferedwriter 编码,Java BufferedWriter对象与utf-8
- java编译命令是什么_Java编译命令整理
- java locale 中国_Java描述语言、国家和地理的类——Locale
- java高级工程师_一名Java高级工程师需要学什么?
- java mencoder_mencoder java linux[通俗易懂]
- JAVA对象转map_java处理字符串类型的map
- 青空の霞光Java新特性笔记
- JAVA 新提案:努力简化Hello World,让初学者更好地接受 Java !
- Java基础学习笔记十 Java基础语法之final、static、匿名对象、内部类详解编程语言
- Java学习笔记之五java数组详解编程语言
- Java学习笔记之三java中的变量和常量详解编程语言
- 《Effect Java》学习笔记1———创建和销毁对象详解编程语言
- java 标准输出与标准错误 out与 err 区别 用法 联系 java中的out与err区别 System.out和System.err的区别 System.out.println和System.err.println的区别 Java重定向System.out和System.err详解编程语言
- 深入Java:利用API快速创建MySQL表(java创建mysql表)
- 失效控制Redis与Java实现基于失效时间的控制(redisjava过期)
- Java与Linux:前景迷人的新科技(java和linux前景)
- java使用Weka、Linux和Java构建强大的数据分析系统(weka linux)
- Linux上善用Java:实现智能开发(linux 运行java)