- 浏览: 26800 次
- 性别:
- 来自: 北京
最新评论
//序列化 FileOutputStream fileStream = new FileOutputStream("MyGame.ser"); ObjectOutputStream os = new ObjectOutputStream(fileStream); os.writeObject(characterOne);//将变量所引用的对象序列化并写入MyGame.ser这个文件,且characterOne所属的类必须继承Serializable接口(此接口没有方法需要实现,标记用接口) os.writeObject(characterTwo);//另一个对象 os.close();
一般来说,串流要两两连接才能做出有意义的事情——其中一个表示连接,另一个则是调用方法的。为何要两个?因为连接的串流通常都是很底层的。以FileOutputStream为例,它有可以写入字节的方法。但我们通常不会直接写入字节,而是以对象层次的观点来写入,所以需要高层的连接流串。这是考虑到良好的面向对象设计,每个类只要做好一件事。这样还可以通过不同的串流组合来达到最大的适应性。
当对象被序列化时,被该对象引用的实例变量也会被序列化。且所有被引用的对象也会被序列化。这些操作都是自动进行的。
整个对象版图都必须正确的序列化,不然就得全部失败。比如某个对象A继承了Serializable接口,但是他有一个成员变量是其他对象B(该对象不能被序列化)的引用,那么A将不能被序列化。
如果你需要序列化程序能够跳过某个实例变量,就把它标记成transient的变量。(比如该变量必须当场创建才有意义,或者没有实现Serializable)。这个变量还是有的,只是给序列化程序的值为null。
序列化聪明得足以分辨两个对象是否相同,在此情况下只有一个对象会被存储。
//解序列化 FileInputStream fileStream = new FileInputStream("MyGame.ser"); ObjectInputStream os = new ObjectInputStream(fileStream); Object one = os.readObject(); Object two = os.readObject();//每次调用readObject()都会从Stream中读出下一个对象,与写入顺序相同 GameCharacter elf = (GameCharacter )one;//转换对象类型 GameCharacter troll = (GameCharacter )two; os.close();//FileInputStream会自动跟着关掉
解序列化时transient的变量是null或者是primitive主数据类型的默认值。构造函数不会执行,因为一旦执行对象的状态又变成全新的了,这不是解序列化想要的结果。
如果对象在继承树上有个不可序列化的祖先类,则该不可序列化类以及在它之上的类的构造函数(就算是可序列化也一样)就会执行。
静态变量不会被序列化,因为它不是“每个对象一个”。
对象的序列化可能会存储一些基本的类的信息(比如类名,能保证在解序列化时能找到类),其他的大部分关于类的信息都不会存储,需要时去找内存中类的定义。----自己想的
读文件的时候文件不存在不会创建,写文件时若不存在则会创建
对象被序列化的同时,该对象会被盖上一个类的版本识别ID(serialVersionUID)。如果想在类变动后还能成功还原被序列化了的对象,就要把当初的serialVersionUID放在class中,让类在演化的过程中保持相同ID。但是前提是你得要对带回旧对象的任何问题负起全责。
发表评论
-
deee
2011-12-14 01:44 953string htmlcode = "<H ... -
布局管理器
2011-06-24 11:33 710布局管理器是个与特定组件相关联的Java对象,它大多数是背景组 ... -
内部类
2011-06-24 10:27 593内部类 内部类对外部的类有一张特殊的通行证,能够自由存取它的内 ... -
集合与泛型
2011-06-23 14:44 668ArrayList TreeSet 以有序状 ... -
PrintWriter
2011-06-22 21:53 1057PrintWriter可能比BufferedWriter更高级 ... -
网络与线程
2011-06-22 21:26 619常见的TCP端口号 FTP 20 T ... -
Java读文件(转)
2011-06-22 17:09 6981 File类 File 类封装了对用户机器的文件系统进行操 ... -
异常处理
2011-06-21 21:41 550编译器不会注意RuntimeException类型的异常。以为 ... -
HashMap中的泛型
2011-06-21 21:09 1313HashMap<String,Integer> h ... -
逐字符的读文件
2011-06-21 17:23 783BufferedReader reader = new Buf ... -
数字与静态
2011-06-20 21:26 560静态方法不能调用非静态的变量(方法内定义的变量当然可以用,这里 ... -
构造器与垃圾收集器
2011-06-20 17:16 576对象(包括实例变量)的生存空间:堆 方法调用及变量(局部变量) ... -
super和this
2011-06-20 16:50 595super和this的异同: 1)super(参数):调用基 ... -
接口与抽象类
2011-06-20 15:50 607方法中有一个是抽象的,该类就必须是抽象类 继承树结构下的第一 ... -
继承与多态
2011-06-20 14:55 732继承:extends java虚拟机 ... -
编程方法
2011-06-19 16:03 536先写测试码,再写程序。 因为: 1 思索与编写测试用的程序代码 ... -
对象的行为
2011-06-19 15:48 532Java是通过值传递的,也就是说通过拷贝传递 封装:将实例变 ... -
认识变量
2011-06-19 15:21 593变量有两种:primitive主数据类型和引用 Java pr ...
相关推荐
这使得XML序列化和反序列化变得简单,因为编译后的类可以直接与XML文件进行转换,无需手动编写解析和构造对象的代码。 在实际应用中,XML序列化和反序列化有多种用途,例如: 1. 存储和加载应用程序设置:用户配置...
Java程序设计中的输入输出流和文件操作是编程中不可或缺的部分,它们允许程序与外部世界进行数据交换,包括读取文件内容、写入数据到文件、以及处理标准输入输出。以下是对这些概念的详细阐述: 1. **文件和流的...
Java文件输入输出是Java编程中的基础且重要的一部分,它涵盖了数据在文件系统和程序之间的传输。这个主题包括了多种类和方法,使得开发者能够高效地处理文件内容。本文将深入探讨Java中的文件输入输出机制,以及如何...
我们将通过标题"io_输入输出流_序列化反序列化_04.zip"中的内容,详细解析这些关键知识点。 首先,让我们从IO流的基本概念开始。在Java中,IO流被分为两类:字节流和字符流。字节流处理的是8位的字节数据,适用于...
- 实现此接口后,Java虚拟机就能够自动进行序列化和反序列化操作。 2. **序列化过程:** - 创建一个`java.io.ObjectOutputStream`实例。 - 使用`ObjectOutputStream`的`writeObject()`方法将对象写出到输出流中...
在VB.NET编程环境中,XML和JSON序列化与反序列化是常见的数据处理技术,用于将对象转换为文本格式(XML或JSON),以便于存储、传输和解析。这两者都是轻量级的数据交换格式,广泛应用于Web服务和客户端应用程序之间...
`CObject`提供了一个`Serialize`函数,它接受一个`CArchive`对象,`CArchive`是MFC封装的`IStream`和`OStream`,可以实现对象到文件的输入/输出。 3. **如何实现序列化**:首先,你需要在自定义类中声明`Serialize`...
《基于对象输入输出流和数据结构的图书管理系统》是一个使用JAVA编程语言开发的DOS版本图书管理系统。这个系统充分利用了JAVA中的对象输入输出流技术以及高效的数据结构,以实现对图书信息的有效管理和操作。 首先...
5. **CArchive类**:MFC提供的一个类,用于处理序列化过程中的数据输入输出。`CArchive`对象可以与文件或内存流关联,从而实现对象的序列化和反序列化。 6. **打开和关闭档案**:在序列化之前,你需要创建一个`...
【JAVA对象序列化保存为XML文件的工具类】 在Java编程中,对象序列化是一种将对象的状态转换为字节流的过程,以便可以存储或在网络上传输。而在反序列化时,这个字节流又可以恢复为原来的对象。Java提供了一个方便...
Java I/O 包是Java平台的核心部分,它提供了丰富的类和接口用于处理输入输出操作,包括文件操作和流式输入输出。在这个主题中,我们将深入探讨如何使用Java进行文件管理和流处理。 首先,我们来看看`java.io`包中的...
该程序的核心功能包括序列化和文件输入输出。序列化是指将对象的状态转换为可以存储或传输的形式,如XML、JSON或二进制格式。在这个上下文中,序列化可能被用来保存用户创建的流程图,以便在将来打开或继续编辑。...
以上就是Java文件输入输出流的基本用法和实例代码,涵盖了字节流、字符流、缓冲流、转换流、对象序列化以及NIO等关键知识点。通过这些技术,开发者能够有效地在程序中进行文件的读取、写入和复制等操作。在实际项目...
### C语言中的文件输入输出 #### 知识点概述 本文将通过分析一段关于C语言文件操作的示例代码,来详细介绍C语言中文件输入输出的基本概念、函数使用方法及其应用场景。 #### 文件输入输出基本概念 在C语言中,...
- Java序列化是Java平台提供的一种持久化机制,它允许将对象转换为字节序列,这样就可以保存在文件中或在网络上传输。 - 序列化不仅可以用来持久化数据,还可以用于进程间通信(IPC)和远程方法调用(RMI)。 2. ...
输入XML文档,它会分析元素和属性,并创建相应的类定义,这大大简化了序列化和反序列化的准备工作。 4. **实例代码**: 提供的实例代码可能包含以下部分: - 创建可序列化类的定义,包括必要的属性和标记。 - ...
通常,它可能包含了源代码、数据集、README文件、模型配置和训练脚本等资源,供开发者研究和复现LSTM在多输入输出时间序列预测上的实现。 总结来说,LSTM多输入输出时间序列预测是一种利用深度学习技术解决复杂预测...
3. **反序列化过程**:使用`java.io.ObjectInputStream`类的`readObject()`方法从输入流中读取对象。 #### 文件序列化实例 文件序列化是一种常见的序列化应用场景,用于将对象状态保存到文件中。这一过程涉及将...
通过学习IO流与序列化,开发者能够更好地理解Java中数据的读写和对象状态的保存,这对于开发涉及文件操作、网络通信和持久化存储的程序至关重要。同时,熟悉这些技术也有助于提升代码的可维护性和性能。