首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么我们不能序列化这些对象?

问为什么我们不能序列化这些对象?
EN

Stack Overflow用户
提问于 2009-08-23 14:26:35
回答 2查看 2K关注 0票数 0

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

""C#不提供在运行时获取对象大小的方法。这意味着,如果我们序列化这个类,我们不能保证一个固定长度的记录大小"“(来自我读的那本书)。

所以我们不能读取随机存取文件,因为我们不知道文件中每个对象的大小,所以我们如何查找?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2009-08-23 14:32:37

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

您是否在问为什么对象图不能部分反序列化?.NET序列化只反序列化整个对象图。否则,您将不得不转向其他序列化格式化程序,或者编写自己的序列化格式化程序。

对于对文件的直接随机访问,必须使用支持查找的流打开该文件。

编辑:

在序列化得到的流中查找没有实际意义--只有序列化格式化程序知道里面有什么,并且应该始终在流的最开始处输入。

为了将数据持久化到其他结构中;在两个阶段的过程中这样做:首先,将串行化字节定向到一个即内存后备的流,然后使用所述大小的知识将数据写入实际的后备存储器。

您无法预测序列化对象的大小,因为序列化表示可能与运行时表示有很大不同。

如果您只使用原语类型,并且使用BinaryWriter编写,那么仍然有可能实现对输出大小的精确控制-但这本身并不是序列化。

票数 2
EN

Stack Overflow用户

发布于 2009-08-23 15:30:10

.NET中默认的二进制序列化序列化整个对象图,由于其图的性质,它没有恒定的大小,这意味着每个序列化对象(记录)都不会有恒定的大小,从而防止随机访问。

为了能够随机访问文件中的任何记录,请编写您自己的类的二进制序列化实现,或者使用数据库。如果您需要一个简单的、无需安装的单线程数据库引擎,可以看看SQL Server Compact。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1318702

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档