------- android培训、java培训、期待与您交流! ----------
一、概念
- 将堆中的对象保存到介质(如硬盘)中叫对象持久化或序列化。静态区的不行。
- 操作对象:
- ObjectInputStream
- ObjectOutputStream
- 被操作的对象需要实现Serializable(标记接口:没方法的接口)。
二、对象
- ObjectOutStream
- ObjectOutputStream 将 Java 对象的基本数据类型和图形写入 OutputStream。可以使用 ObjectInputStream 读取(重构)对象。通过在流中使用文件可以实现对象的持久存储。如果流是网络套接字流,则可以在另一台主机上或另一个进程中重构对象。
- ObjectInputStream
- ObjectInputStream 对以前使用 ObjectOutputStream 写入的基本数据和对象进行反序列化。
三、代码
-
/*
对象的序列化:
ObjectOutputStream把源(如内存)中的对象序列化到目的(如硬盘)上,
ObjectInputStream把源(如硬盘)中的序列化对象读取到目的(如内存)中。
ObjectOutputStream序列化时,会给这个对象加一个序列化UID,
当ObjectInputStream 方法readObject();会匹配这个类的UID和序列化UID,
transient 关键字可以保证成员不被序列化。
*/
import java.io.*;
class ObjectStreamDemo
{
public static void main(String[] args) throws Exception
{
//writeObj();
readObj();
}
public static void readObj() throws Exception
{
ObjectInputStream ois = new ObjectInputStream(new FileInputStream("obj.txt"));
Person p = (Person) ois .readObject();
System.out.println(p);
ois.close();
}
public static void writeObj() throws Exception
{
ObjectOutputStream oos =
new ObjectOutputStream(new FileOutputStream("obj.txt"));
oos.writeObject(new Person("lisi0",399));
oos.close();
}
}
- 注意16行,
-
- 一是会报类型不匹配异常,因为文件中的序列号对象不一定是定义的对象。
- 二是person对象成员代码改变的时候,编译时本地类会与流中的类进行比较,序列化号会不同导致InvalibClassException编译不通过。因为序列号是根据成员获取出的。
- 怎么解决改成员改变还可以使用,可以自己定义UID,
- 注意:静态是不能被序列化的。
- 注意:transient修饰的成员不能被序列号。
- 如果ObjectOutStreamWrite了多个对象,那么 ObjectInputStream的read会依次读出。
分享到:
相关推荐
54-IO流(对象的序列化).avi
序列化(Serialization)是指把结构化对象转化为字节流。 反序列化(Deserialization)是序列化的逆过程。即把字节流转回结构化对象。 Java序列化(java.io.Serializable) Hadoop序列化的特点 ...
对象序列化是Java编程中的必备武器 Java高级程序设计实战教程第五章-Java序列化机制全文共15页,当前为第4页。 5.2.2 序列化应用 当你想把内存中的对象状态保存到一个文件中或者数据库中时候; 当你想用套接字在...
序列化的过程就是对象写入字节流和从字节流中读取对象。...对象序列化功能非常简单、强大,在RMI、Socket、JMS、EJB都有应用。对象序列化问题在网络编程中并不是最激动人心的课题,但却相当重要,具有许多实用意义。
1-1-7 指针声明类型与对象类型相一致.................................. 13 1-1-8 int 与char 不再等价............................................. 13 1-1-9 结构数据类型的变化.................................
主要介绍了Java IO流对象的序列化和反序列化实例详解的相关资料,需要的朋友可以参考下
主要介绍了java IO数据操作流、对象序列化、压缩流代码解析,具有一定借鉴价值,需要的朋友可以参考下
类加载器 ClassLoader 反射 Stream 流 函数式编程 Lambda 表达式 网络编程-协议 网络编程-端口 网络编程-IP 多线程 IO流-字节流 IO流-字符流 IO流-转换流 File Map HashMap 序列化和反序列化 可变参数 类型通配符 ...
实例1:对象的序列化 ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 import java.io.File; import java....
内容概要:以上列出的Java面试题涵盖了Java语言的基础知识、面向对象编程、集合、IO流、多线程、反射、类加载器、JVM、序列化、泛型、异常处理、注解等多个方面。 适用人群:以上Java面试题适用于准备Java开发...
反序列化就是序列化的逆过程,把磁盘文件中或网络节点的二进制数据恢复成java对象的过程,通常是将二进制数据转换为对象。 序列化的应用场景:将对象存储在文件或数据库中,利用套接字在网络上进行对象传输,RMI...
File 类、RandomAccessFile 类、字节流(文件字节流、缓冲字节流、基本数据类型字节流、打印流、对象序列化流、字节数组流)、字符流(缓冲字符流、文件字符流、转换流、格式化输出流、字符数组流) 这份代码源码...
第一章 缓冲流昨天学习了基本的一些流,作为IO流的入门,今天我们要见识一些更强大的流。比如能够高效读写的缓冲流,能够转换编码的转换流,能够持久化存储对象的序列化
IO实现本地序列化和反序列化,面向对象,集合等
序列化:将对象写入IO流中; 反序列化:从IO流中恢复对象; 意义:序列化机制允许将实现序列化的Java对象转换为字节序列,并将字节序列保存在磁盘中,或通过网络传输,以达到以后恢复成原来的对象。序列化机制使地...
对象序列化和反序列化生成一个 2. 流的种类: io包下 扩展nio包下 1. IO分类: 输入流 输出流 字节流 InputStream(抽象类) OutputStream(抽象类) 字符流 Reader (抽象类) ...
1.掌握文件类(File类)的使用 2.IO输入/输出流的概念3.IO的分类4.掌握IO包中的流的基本应用5.了解字符编码问题6.掌握对象序列化(串行化)
Protobuf & json | 数据序列化 | [https://github.com/google/protobuf](https://github.com/google/protobuf) Jenkins | 持续集成工具 | [https://jenkins.io/index.html](https://jenkins.io/index.html) Maven | ...
io-demo I / O in or out code 编码 file 学习 java.io.File 类 random-access-file 学习 RandomAccessFile i-o io流 包括file流,字节流 serialize-demo 深入学习 对象序列化与反序列化
本文将从流的分类、流的转换、对象序列化、字节流和字符流的区别、对象克隆等方面对 Java IO 进行总结。 1. 流的分类 Java 中有两种类型的流:输入流(inputStream)和输出流(outputStream)。输入流用于从外部...