同一类型的对象的持久和变化过程是能够相同的,因为一个特性不能够影响其它的特
性。另一类观点认为持久化只是可持久对象的行为,某些行为可能被应用于持久性对
象。后面的方法提倡通知可持久化对象存储和从存储器检索,模型提供一个实体对象
的应用试图――通常延伸虚拟内存。
规范化和语言独立
一种语言同一类型的对象应该已同样的方式储存到持久的储存器上,不管它们的表
现形式是怎么样的。把对象的布局改变成普通形式的过程被大家称做对象形式的规范
化。在编译语言中,静态类型对象一种语言编写,但在不同的系统下编译,在吃酒储
存器中应该具有相同的表现形式。
对独立语言对象表示规范化的进行扩展。如果对象能以单独的一种语言表示,那么
同一对象的不同表现形式就可以共享同一持久化存储器。
一种策略为达到这个目的就是通过接口定义语言(IDL)引进一个新的层。通过
IDL 可以生成对象数据库接口和相应的数据结构。IDL 机构的底部包括两种,第一,额
外的中间层总是需要额外的转换成,这样会影响系统的总体性能;第二,它限制了数
据库服务对于特定厂商是唯一的价值 ,这样可能对于应用开发人员来说是相当有价值
的。
另一种简单的策略是通过对 SQL 的扩展来实现对对象服务的支持。关系数据库厂
商和较小的对象/关系厂商都提倡这种做法;然而,这些公司在塑造对象存储框架上是
否能成功仍有待观察。
但是问题依然存在:对象持久化是对象特征的一部分或者是外部服务通过提供分离
的接口给对象?通过什么样的对象集合和方法查询它们?在对象数据库和 java 语言本
身视持久化为语言的内在时,关系,扩展关系,对象/关系往往在语言之间主张分裂的
做法。
串行化实现 java 持久化
对象串行化是 java 语言中对象和元素的流的存储和读取的特殊策略。值得提醒的
是,虽然有商用的第三方库对串行化 C++对象的支持,但是 C++本身并没有提供对
象串行化的策略。下面是如何使用 java 的串行化:
// Writing "foo" to a stream (for example, a file)
// Step 1. Create an output stream
// that is, create bucket to receive the bytes
FileOutputStream out = new FileOutputStream("fooFile");
// Step 2. Create ObjectOutputStream
// that is, create a hose and put its head in the bucket
ObjectOutputStream os = new ObjectOutputStream(out)
// Step 3. Write a string and an object to the stream
// that is, let the stream flow into the bucket
os.writeObject("foo");
os.writeObject(new Foo());
// Step 4. Flush the data to its destination
os.flush();
评论10