`
- 浏览:
1571336 次
- 性别:
- 来自:
北京
-
http://wenda.tianya.cn/wenda/thread?tid=69107dac24f05f58
引:无意间找到的,说的很浅显易懂,故引到这里。
Java的"对象序列化"能让你将一个实现了Serializable接口的对象转换成一组byte,这样日后要用这个对象时候,你就能把这些byte数据恢复出来,并据此重新构建那个对象了。这一点甚至在跨网络的环境下也是如此,这就意味着序列化机制能自动补偿操作系统方面的差异。也就是说,你可以在Windows机器上创键一个对象,序列化之后,再通过网络传到Unix机器上,然后在那里进行重建。你不用担心在不同的平台上数据是怎样表示的,byte顺序怎样,或者别的什么细节。
对象序列化本身就非常有趣,因为它能让你实现"轻量级的persistence(lightweight persistence)"。所谓persistence是指,对象的生命周期不是由程序是否运行决定的;在程序的两次调用之间对象仍然还活着。通过"将做过序列化处理的对象写入磁盘,等到程序再次运行的时候再把它读出来",你可以达到persistence的效果。之所以说"轻量级",是因为你不能用像"persistent"这样的关键词来直接定义一个对象,然后让系统去处理所有细节(虽然将来有可能会这样)。相反,你必须明确地进行序列化(serialize)和解序列化(deserialize)。如果你需要更为正式的persistence功能,可以考虑Java Data Object( 简称是JDO)或Hibernate之类的工具(http://hibernate.sourceforge.net)。
之所以要在语言里加入对象序列化是因为要用它来实现两个重要的功能。Java的远程方法调用(Remote Method Invocation简称RMI)能让你像调用自己机器上的对象那样去调用其它机器上的对象。当你向远程对象传递消息的时候,就需通过对象序列化来传送参数和返回值了。RMI会在Thinking in Enterprise Java作讨论。
我们会在第14章讲到JavaBean。对JavaBean来说,对象序列化也是必不可少的。Bean的状态信息通常是在设计时配置的。这些状态信息必须保存起来,供程序启动的时候用;对象序列化就负责这个工作。
序列化一个对象还是比较简单的,只要让它实现Serializable接口就行了(这是一个"标记接口(tagging interface)",没有任何方法)。但是,当语言引入序列化概念之后,它的很多标准类库的类,包括primitive的wrapper类,所有的容器类,以及别的很多类,都会相应地发生改变。甚至连Class对象都会被序列化。
要想序列化对象,你必须先创建一个OutputStream,然后把它嵌进ObjectOutputStream。这时,你就能用writeObject( )方法把对象写入OutputStream了。读的时候,你得把InputStream嵌到ObjectInputStream里面,然后再调用readObject( )方法。不过这样读出来的,只是一个Object的reference,因此在用之前,还得先下传。
对象序列化最聪明的一点是,它不仅能保存对象的副本,而且还会跟着对象里面的reference,把它所引用的对象也保存起来,然后再继续跟踪那些对象的reference,以此类推。这种情形常被称为"单个对象所联结的'对象网'"。这个机制所涵盖的范围不仅包括对象的成员数据,而且还包含数组里面的reference。如果你要自己实现对象序列化的话,那么编写跟踪这些链接的程序将会是一件非常痛苦的任务。但是,Java的对象序列化就能精确无误地做到这一点,毫无疑问,它的遍历算法是做过优化的。
分享到:
Global site tag (gtag.js) - Google Analytics
相关推荐
JavaBean 应该实现 Serializable 接口,提供无参构造方法,且所有的属性都应该提供 getter 和 setter 方法。 2. 使用 JavaBean 实现用户登录验证 在上述代码中,我们定义了一个 User 类,用于封装用户名、密码和...
3. **序列化**:为了支持持久化或跨网络传输,JavaBean可以实现Serializable接口。 在用户管理的场景中,我们通常需要创建一个User类,这个类将包含如ID、用户名、密码、电子邮件等属性。接下来,我们将讨论如何...
5. **标准命名**:属性、方法和事件的命名应遵循一定的标准,以确保与其他JavaBean的兼容性。 6. **可读性**:代码应该清晰易懂,注释充分,以利于其他开发者理解其用途和功能。 在这个"JavaBean示例"中,我们可以...
- **序列化支持**:JavaBean可以通过实现`Serializable`接口来支持序列化,以便持久化对象状态。 2. **JavaBean在数据库操作中的应用** - **数据访问对象(DAO)模式**:JavaBean常被用于实现DAO层,提供对数据库...
4. **序列化**:JavaBean通常实现Serializable接口,允许对象的状态被序列化和反序列化。 5. **事件处理**:JavaBean可能支持事件监听机制,允许其他组件订阅并响应Bean的特定事件。 在Java开发中,JavaBean广泛...
- **封装性**:JavaBean通过私有变量和公共的getter与setter方法封装数据,确保数据安全。 - **可重用性**:由于其模块化设计,JavaBean可以在多个项目中重复使用,降低了代码冗余。 - **可扩展性**:JavaBean...
- **序列化**:为了持久化JavaBean对象,通常需要实现`Serializable`接口。 - **命名约定**:属性名、getter和setter方法应遵循驼峰命名法,如属性`message`对应的getter是`getMessage()`,setter是`setMessage...
- **序列化**:为了能够持久化或在网络中传输,JavaBean需要实现`java.io.Serializable`接口。 2. **属性**: - **私有属性**:属性应声明为私有的,以确保数据安全。 - **访问器和 mutator 方法**:getter方法...
4. **序列化**:为了支持持久化或跨网络传输,JavaBean应实现Serializable接口。 5. **属性通知**:JavaBean可以提供属性改变的通知机制,通过实现PropertyChangeSupport类,可以监听和处理属性值的变化。 在“01_...
- **序列化与反序列化**:在分布式系统中,JavaBean可以通过序列化实现对象的持久化存储或在网络间传输。 - **代码生成工具**:例如Eclipse、IntelliJ IDEA等IDE,可以自动根据JavaBean生成getter和setter方法,...
1. MVC架构:在Model部分,JavaBean用于封装业务逻辑和数据,与View和Controller进行交互。 2. JSP页面:在JSP中,通过`<jsp:setProperty>`和`<jsp:getProperty>`标签可以方便地将表单数据绑定到JavaBean,实现数据...
3. **可序列化**:为了能够在网络中传输或持久化存储JavaBean,需要实现Serializable接口。 4. **命名规则**:属性、getter和setter方法的命名遵循驼峰命名法,如属性名为`username`,则对应的getter方法为`...
### Javabean与DTO的区别 #### 一、JavaBean简介 JavaBean 是由 Sun 公司提出的一种标准组件模型,旨在提供一种可重用、跨平台的组件解决方案。JavaBean 的主要目的是使得 Java 类能够封装状态(属性)和行为...
JavaBean的设计目的是为了提高程序代码的可重用性和可维护性,使得程序与界面能够更好地分离,从而让开发团队能够更高效地分工合作。 ##### 1.1 JavaBean简介 JavaBean主要应用于Web开发领域,特别是在JSP(Java ...
- **序列化**:为了能在网络上传输或持久化,JavaBean通常实现`Serializable`接口。 - **命名规则**:属性、getter和setter方法的命名应遵循驼峰命名法,如属性`name`对应getter方法`getName()`和setter方法`set...
JavaBean可以通过实现`java.io.Serializable`接口实现序列化,使得对象的状态能够被保存到磁盘或在网络上传输。这对于持久化存储、会话管理或远程方法调用(RMI)非常有用。 四、JavaBean的生命周期 JavaBean的生命...
在JavaBean与XML结合使用时,XML常用来描述JavaBean的结构和属性,这在配置文件、数据交换或跨系统通信中非常有用。例如,Spring框架就使用XML配置文件来定义bean的实例化和依赖关系。此外,Hibernate等ORM(对象...
同时,JavaBean默认实现了Serializable接口,可被序列化和反序列化,方便在网络间传输或持久化存储。 在描述中提到的“可直接用”,意味着这个JavaBean可能已经预设了一些常用的功能,可以直接在项目中导入和使用。...