- 浏览: 80728 次
- 性别:
- 来自: 广州
文章分类
- 全部博客 (66)
- Html (4)
- j2se (19)
- jsp (1)
- xml (0)
- eclipse (1)
- Linux (7)
- 心情 (13)
- javascript (2)
- db (1)
- javascript常用代码 (1)
- PHP (1)
- spring source (0)
- Spring (0)
- Ibatis (0)
- Memcached (0)
- Ehcache (0)
- freeMarker (0)
- velocity (0)
- UML (0)
- SQL (0)
- DB2 (0)
- Oracle (0)
- Mysql (0)
- Spring Security (0)
- Log4j (0)
- Tomcat (0)
- MongoDB (0)
- Solr (0)
- Spring CXF (0)
- Maven (0)
- JPbm (0)
- Design Pattern (0)
- JVM (0)
最新评论
-
greathjt:
watchpoint等等怎么设置?
eclipse debugger use
Java对象序列化将那些实现了Serializable接口的对象转换成一个字节序列,并能够以后将这个字节序列完全恢复为原来的对象。利用对象的序列化,可以实现轻量级持久性,这意味着一个对象的生存周期并不取决于程序是否正在执行,它可以生存于程序的调用之间。通过将一个序列化对象写入磁盘,然后在重新调用程序时恢复该对象,就能够实现持久性的效果。JDO、Hibernate等中间件为我们提供了更规范、完善的持久化机制,这里所述只是最基本的基于文件I/O的持久化。
对象序列化主要是为了支持两种主要的特性,一是Java远程方法调用(RMI),另外一个是序列化Java Beans。
1. 实现了Serializable接口的对象的序列化
要序列化一个对象,首先要创建OutputStream对象,然后将其封装在一个ObjectOutputStream对象内。此时,调用writeObject()方法将对象序列化并发送给OutputStream。在反序列化时,需要将一个InputStream封装在ObjectInputStream内,然后调用readObject(),得到的结果是一个Object对象,需要进行转型得到最后所需的对象。需要注意的是,在对一个Serializable对象进行反序列化的过程中,没有调用任何构造器,包括缺省的构造器,整个对象都是通过从InputStream中取得数据恢复过来的。对象序列化是面向字节的,因此采用InputStream和OutputStream层次结构。
2. 实现了Externalizable接口的对象的序列化
Externalizable接口继承了Serializable接口,同时添加了writeExternal()和readExternal(),它们在序列化和反序列化过程中会被自动调用。出于安全的考虑,可以将需要序列化的对象在上述方法中显式处理,否则不用在上述两个方法内考虑。注意,对于实现了Serializable接口的对象,对象完全以它存储的二进制位为基础来构造,不调用构造器。而对于一个Externalizable对象,所有普通的缺省构造器都会被调用,然后调用readExternal()。
3. transient关键字
在某些情况下,有些特定的子对象不希望Java序列化机制自动保存与恢复,即使对象中的这些信息是private的,经过序列化处理,就可以通过读取文件或者拦截网络传输的方式来访问到它。实现了Externalizable接口的对象的writeExternal()方法可以对需要的对象进行显式的序列化,但是如果我们操作的是一个实现了Serializable接口的对象,就只能用transient关键字逐个字段的关闭序列化,只需要在字段定义前加上该关键字即可。
4. 实现了Serializable接口的同时,提供两个方法
private void writeObject(ObjectOutputStream stream) throws IOException
private void readObject(ObjectInputStream stream)
throws IOException, ClassNotFoundException
这种方法使用起来比较混乱,仅仅提供了这样的一种功能,绝大多数情况下,使用前面三种方法就能满足需求。
发表评论
-
Java中获取系统环境信息
2013-03-15 07:10 896将 getProperty(String) 方法使用的当前 ... -
Java 编程的动态性
2012-10-11 02:04 0Java 编程的动态性,第 1 部分: 类和类装入 ... -
读《重构》笔记
2009-02-12 01:08 828重构:改善即有代码 重构是一个过程,在不改变即有代码的外在行为 ... -
Object 源码
2008-12-21 12:24 1281Oject 源码: /* * @(#)Object.java ... -
thread 源码
2008-12-21 11:57 1051线程的状态:NEW , RUNNABLE , BLOCKED, ... -
java gc工作原理
2008-12-19 11:20 3014GC基本工作原理: java内 ... -
看《告诉你最真实的招聘潜规则》 有感
2008-12-18 09:31 709告诉你最真实的招聘潜规则 http://www.iteye.c ... -
时间管理
2008-12-17 14:20 541积极主动 ; 按计划行事 ; 任务细分----按任务分段- ... -
测试驱动开发 笔记
2008-12-14 17:14 710测试驱动开发是测试作为软件开发过程的中心,它要求在编写任何产品 ... -
集合类
2008-12-12 17:58 671集合类 Set HashSet 优点: 后台 ... -
oracle 基础
2008-12-04 12:54 1381解锁用户:alert user scott acco ... -
think pattern in java 笔记1
2008-11-25 00:40 936模式概念: 模式是帮助 ... -
Linux jdk 安装
2008-10-22 19:54 7731.下载成功后上传至服务器任意目录 ... -
Hibernate对象持久化方法分析
2008-10-19 11:46 1928Hibernate对象持久化方 ... -
编写好的面向对象代码
2008-10-13 11:47 807本文是java.net上的一篇 ... -
Java I/O中的数据编码转换
2008-10-13 11:34 1023作者:Flyingis JDK1.4开始便引入了ja ... -
???Java容器分析--Map
2008-10-13 11:31 835作者:Flyingis标准的Java类库中包含了几种类型的M ... -
Java容器分析--List和Set
2008-10-13 11:26 831作者:Flyingis ... -
eclipse debugger use
2008-10-11 13:32 1791最基本的操作是:1, 首先在一个java文件中设断点,然后运行 ... -
java信徒齐(七)步走
2008-10-08 16:19 945Java信徒齐(七)步走: 0) ...
相关推荐
通过《Java I/O, 2nd Edition》这本著作,读者将能够深入理解Java的I/O系统,掌握高效、安全的I/O编程技巧,无论是处理文件、网络通信还是序列化,都能游刃有余。对于Java开发者来说,这是一本不可多得的参考资料。
`ObjectInputStream`和`ObjectOutputStream`用于序列化和反序列化Java对象,使对象可以保存到文件或在网络上传输。对象流继承自字节流,因此可以处理非原始数据类型。 8. 数据流小结: 在Java I/O编程中,理解不同...
6. **对象序列化与反序列化** Java提供了Serializable接口,使得对象可以被序列化成字节流,便于存储或通过网络传输。ObjectInputStream和ObjectOutputStream负责对象的序列化和反序列化操作。 7. **NIO(非阻塞I/...
除了基本的读写操作,Java I/O还提供了对象序列化和反序列化的功能。`ObjectOutputStream`和`ObjectInputStream`可以将Java对象转换为字节流并存储到磁盘或网络中,反之亦然。这对于持久化数据和远程通信非常有用。 ...
4. 对象序列化:ObjectOutputStream允许我们将Java对象转换为字节流,以便存储或网络传输。 三、文件操作 1. RandomAccessFile:提供随机访问文件的功能,可以跳过某些字节,直接读写指定位置的数据。 2. 文件的...
6. **对象序列化** - **ObjectInputStream和ObjectOutputStream**:支持Java对象的序列化和反序列化,使对象能保存到磁盘或在网络间传输。 7. **内存I/O** - **ByteArrayInputStream和ByteArrayOutputStream**:...
Java提供了ObjectInputStream和ObjectOutputStream,用于序列化和反序列化对象,实现对象的持久化存储或网络传输。 5. 转换流(Wrapper Streams): InputStreamReader和OutputStreamWriter将字节流转换为字符流...
`ObjectInputStream`和`ObjectOutputStream`则用于对象的序列化和反序列化,实现对象的持久化存储。 9. **分词(Tokenizing)** `Scanner`类是进行简单分词和格式化输入的工具,它可以解析文本并提取数字、字符串...
8. **对象序列化与反序列化**: - Java提供了ObjectOutputStream和ObjectInputStream,可以将Java对象转换为字节流(序列化),并从字节流中恢复对象(反序列化)。 9. **转换流**: - InputStreamReader和...
Java I/O系统还包含过滤流(Filter Stream)、对象流(Object Stream)以及管道流(Piped Stream)等,它们提供了更高级的功能,如数据压缩、错误检测和校验、对象序列化等。了解并熟练掌握这些概念对于任何Java...
Java输入与输出(I/O)是Java编程语言中不可或缺的一部分,它允许程序与外部资源进行数据交换,如文件系统、网络、硬件设备等。在Java中,I/O操作被封装在许多类和接口中,形成了丰富的API。以下将详细介绍几个重要...
除此之外,Java I/O还提供了对象序列化和反序列化的功能。Serializable接口标记一个类可以被序列化,ObjectInputStream和ObjectOutputStream则负责将对象转换为字节流并还原。 在处理大量数据时,流的连接是必不可...
本教程涵盖了从基础到高级的Java流知识,包括文件读写、缓冲流、对象序列化等多个方面。 1. **文件的编码**:在处理文本文件时,了解字符编码至关重要。Java中的`FileReader`和`FileWriter`类默认使用平台的默认...
这些类可以确保数据的正确序列化和反序列化。 总的来说,Java的I/O包提供了强大且灵活的工具来处理文件和数据流,无论是在简单文本操作还是复杂的二进制数据交换中,都能找到相应的解决方案。通过熟练掌握这些类和...
5. **对象序列化**: - 序列化和反序列化:将Java对象转换为字节流,以便存储或在网络上传输。 - ObjectInputStream和ObjectOutputStream:实现对象的序列化和反序列化。 6. **字符编码**: -字符编码的理解,如...
- **对象状态保存:** 序列化不仅可以保存对象本身的数据成员,还能跟踪并保存对象中的引用关系,即所谓的“对象图”。 - **自动化处理:** Java序列化过程大部分是由JVM自动完成的,开发者只需关注对象的设计和实现...
在网络传输中,可以将对象序列化后发送,接收端再进行反序列化。 5. **示例**:`序列化.txt`可能包含以下代码: ```java import java.io.*; class SerializableClass implements Serializable { private ...
- **IOException**:Java 中用于表示 I/O 错误的异常类,几乎所有 I/O 操作都可能会抛出此异常。 #### 四、系统流 - **System.out**:标准输出流,通常用于向控制台输出信息。 - **System.in**:标准输入流,用于...
以及 `ObjectInputStream` 和 `ObjectOutputStream` 支持对象的序列化和反序列化。 掌握Java的二进制I/O对于开发高效、可靠的文件处理程序至关重要,尤其是在需要处理大量非文本数据或跨平台传输时。了解这些概念和...