sbamwdx
35156
|
2008/7/31 17:50:04 |
这确实不是持久化。不过偶已经比你们落后三年了。惭愧啊!今天才开始读李维<深入vcl架构剖析>。 |
nihaoqiang
15412
|
2005/6/5 20:48:38 |
你这个不是持久化,你这个只是把对象的数据保存到流中罢了,Delphi中的持久化不单保存的有数据(主要是公开的属性值和通过DefineProperties方法定制的数据),还保存有类的信息,是所有继承于TPersistent的对象可在流中保存和恢复自己的一种方法,你的方法并不能检测到流中保存的是什么数据,可以说不是很安全的。也不能称之为持久化 |
wang_phoenix
15368
|
2005/6/2 22:09:29 |
持久化?????这是吗?InstantObject还差不多! |
o_o
15361
|
2005/6/2 17:19:19 |
刚看完李维<深入vcl架构剖析>讲的对象持久化这一章.下来先看看.向你学习. |
mmzmagic
15358
|
2005/6/2 16:43:39 |
TO iamdream : 呵呵 如何存储只是一个方式,换一种存储方式是解决不了这个问题的。 改写了一下保存和读取的2个过程, 现在是通用的 。 ========== Procedure MyobjSaveToFile(IobjList:TObjectList;IfileName:String); Var I: Integer; LOpt:TFileStream; PPos:PInteger; Begin LOpt:=TFileStream.Create(IfileName,fmCreate); For I := 0 To IobjList.Count - 1 Do Begin // Iterate PPos:=Pointer(IobjList.Items[i]); Inc(PPos); LOpt.WriteBuffer(ppos^,IobjList.Items[i].InstanceSize-4); End; // for LOpt.Free; End;
Procedure MyobjLoadFromFile(Iobjlist:TObjectList;IfileName:String;Ltep:TClass); Var LOpt:TFileStream; Ppos:PInteger; lObj:TObject; Begin LOpt:=TFileStream.Create(IfileName,fmOpenRead); Iobjlist.Clear; while LOpt.Position<>LOpt.Size do Begin lObj:=ltep.Create; pPos:=Pointer(lObj); Inc(Ppos); LOpt.ReadBuffer(Ppos^,lObj.InstanceSize-4); Iobjlist.Add(lObj); End; LOpt.Free; End; |
mmzmagic
15357
|
2005/6/2 16:39:30 |
呵呵 我是因为将对象生命周期从运行期扩长到了磁盘文件甚至其它电脑上,所以才这么称呼的。尽管保存和还原的的并非运行期那个对象。 也许我不应该用“对象持久化”这个词汇,因为它已经成为一个标志性概念了。在此表示抱歉。 |
jhwh
15356
|
2005/6/2 16:14:58 |
楼主这个不是对象持久化,是保存对象信息。两者差别大了。 |
iamdream
15355
|
2005/6/2 15:08:26 |
要支持变长字符串等功能可用数据库存储代替普通文件存储来实现。 |
tim001
15348
|
2005/6/2 13:38:40 |
学习 |