为什么我们不能对象序列化为随机访问文件?并且,另一方面,我们可以对象序列化为顺序访问文件?

“” C#不提供在运行时,以获得对象的大小的装置。这意味着, 如果我们序列化类,我们不能保证一个固定长度的记录大小“”(从我读书中)。

所以我们无法读取随机访问文件,因为我们不知道该文件中的每个对象的大小,所以我们怎么可以寻求??????

有帮助吗?

解决方案

标有SerializableAttribute属性的任何对象可以被序列化(在大多数情况下)。从序列化的结果总是指向一个流,其很可能是一个文件的输出流。

您问为什么对象图不能被反序列化部分?只有.net序列〔脱〕完整序列化的对象图。否则,你将不得不转向其他序列化格式化,或者自己编写。

有关直接随机访问到一个文件,你必须打开该文件与支持寻求流。

编辑:

从序列化所产生的数据流中寻找有没有实际意义 - 只有serialiation格式化器知道在那里有什么呢,应该不停进食流的最开始

有关持续数据到其他结构;做在一个两阶段过程:首先,目标在串行化字节到[即存储器支持]流可以从以后读取的大小,然后将数据写入到实际的后备存储器,使用尺寸的所述知识。

您无法预测的序列化对象的大小,这是因为序列化表示可以从运行时表示差别很大。

有它仍然能够实现对输出的大小精确控制,如果仅使用原始类型,并且你写使用的BinaryWriter - 但不是每本身串行化

其他提示

在.NET默认二进制序列化序列化整个对象图,其中,由被一个曲线图的性质,不具有恒定的尺寸,这意味着每个对象序列化(记录)将不具有恒定的尺寸,防止随机接入。

要能够随机地访问任何记录在一个文件,写自己的实现类的二进制序列化的,或者使用一个数据库。如果你需要一个简单,无需安装单线程的数据库引擎,看一看的 SQL Server精简

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top