问题标签 [binary-serialization]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
328 浏览

c++ - C++:自定义对象序列化/反序列化失败

我在从其存储的文件中读取序列化对象时遇到问题。(见下面的代码)。

序列化过程“有效”,(尽管可能写得很糟糕),并且因为无法知道用户是否传递了 std::ios::binary 标志,所以我选择不使用带有whitespace. (它还节省了内存,因为我没有丢失大量像素数据的潜力。)

我的第一次尝试看起来与示例相同,但ints 是unsigned chars 的目的是将下半部分和上半部分打包成chars,然后重新组装它们。

目前我可以将所有数据读取到文件中,但是当我尝试读取第一条非校验和数据时,它要么返回 0(在尝试使用chars 的情况下)或垃圾(在尝试使用ints的情况下) )

序列化:

反序列化:

0 投票
1 回答
428 浏览

reflection - 遍历并查找复杂对象图中的所有给定类型实例

(使用 vb.Net 4.0)假设您有一个对象,其图形相当复杂 - 它具有属性、数组和其他集合、具有自己的属性和集合的子类等。我想完全遍历整个对象图并找到所有实例特定类型 T,然后对这些实例执行特定操作。是否有一种防弹的方法来执行对象图的完整遍历?即使有反思,这似乎也是一项容易出错的艰巨任务。

我想知道二进制序列化,因为这似乎以相当健壮的方式克隆了一个对象,无论多么复杂。有什么方法可以修改该技术,而不是将其序列化,而是返回对给定类型 T 的所有子对象的引用列表?但这只是纯粹的猜测,我对任何可行的解决方案持开放态度。

0 投票
3 回答
402 浏览

java - Java:使用反射从数字实例化枚举

信令协议经常使用具有明确定义的整数值的枚举类型。例如

我试图找到一种仅使用枚举类类型和实例的整数值将此类值反序列化为其相应枚举类型的方法。

如果这需要将静态 getEnumFromInt(int) 函数添加到每个枚举,那么如何定义这个“接口”,以便枚举作者可以确保他们的枚举可以序列化。

怎样才能最好地做到这一点?

0 投票
2 回答
1329 浏览

datetime - 为什么 Get-Date 似乎返回 DateTime 对象,但 BinarySerializer 表明它返回一个 PSObject?

以简单的HashTable为例:

关键 StartDate 似乎包含一个DateTime

但是,如果我尝试对其执行二进制序列化,则会收到一个异常,抱怨PSObject不可序列化。

抛出:

如果我像这样对 [DateTime] 使用显式强制转换,这条消息就会消失,一切正常:

Get-Date 是不是真的返回了 DateTime,或者是其他一些 powershell 奇怪的东西在这里工作。

0 投票
1 回答
847 浏览

serialization - 如何最小化序列化数据——二进制序列化开销巨大

通过网络发送序列化整数时,我想减小消息大小。在下面的部分中 buff.Length 是 256 - 为了提高效率,开销很大!如何将其减少到最小(4 字节 + 最小开销)?

在此先感谢,--- KostaZ

0 投票
1 回答
346 浏览

c++ - 简单的位级序列化

我正在寻找一个 C++ API,以方便地将任意位大小的(用户定义的)类型有效地序列化/反序列化为包含一组位的某个结构(最好是模板类)。我相信boost::dynamic_bitset这是一个好的开始,但它不包含用于附加内置类型等的函数/运算uint8_tuint16_t

我希望它像下面的例子一样工作

流操作符也应该支持与状态相关的字节序行为:

我也知道 Boost.Serialization 和 Boost.Endian(在 Boost Sandbox 中)。我希望将类似的东西扩展到位级别。

我相信boost::dynamic_bitset的成员函数

对于大多数用户来说,级别太低了。我想它应该在这些新append功能中重用。为了优化更多的表达式模板,在将它们附加到dynamic_bitset.

0 投票
0 回答
114 浏览

.net - VS2010 构建时序列化以实现快速运行时加载?

在 .NET4 下的 Visual Studio 2010 中,是否有一种在构建过程中实例化、填充和二进制序列化类的好方法?我正在编写一个应用程序,每次都需要几秒钟的时间将一组复杂的相互关联的类加载到相同的“启动状态”,我怀疑如果我可以从序列化图像加载它们,加载时间实际上会消失。

我的问题不是关于 XNA,但我最近花了一些时间在 XNA 框架下玩 Xbox 编程。该框架添加了一个有趣的预处理功能(内容管道),它完全符合我的描述:来自主应用程序的重要类可以被实例化和填充(使用不同的代码块,仅在构建时预处理),然后序列化为部署文件。此序列化版本在运行时重新加载,以显着提高初始化性能。(在 XNA 下,此过程还允许目标平台进行调整,例如字节顺序更改,这对我的问题无关紧要。)

我意识到我必须手动启动反序列化,我知道它不会自动化到那种程度——我担心的是构建方面。

XNA 框架之外的 VS2010 是否存在类似的东西?这不是 T4 风格的代码生成(它仍然需要运行时处理,尽管它可能比读取外部文件执行得更好),我不确定我是否可以编写一个单独的项目来创建这些类并将其转储到磁盘稍后在不同的项目中安全地重新加载它们(可能需要进行一些实验),但即使可行,它仍然缺乏与构建过程的集成。我不能仅仅劫持 XNA Framework 插件,因为它有许多 XNA 特定的关系,并且加载端进程只是 XNA。

请注意,我愿意考虑价格合理的第三方插件(我不会为此犹豫 30 美元或 40 美元,但我不会购买价值数百美元的工具)。

0 投票
2 回答
638 浏览

c# - 自定义类型对象的C#序列化实践

我创建了一些自定义类型,例如:

和一个类似的Mass,等等。

我还有一个自定义对象,例如Planet,它使用这些自定义类型作为属性。

Planet考虑到这一点,在这种情况下进行序列化的最佳实践是什么,Mass并且Temperature将来可能会略有变化(例如添加KelvinTemperature)?我是否应该拥有MassTemperature继承类似IQuantity.

0 投票
1 回答
1141 浏览

c# - 带有大对象的 C# UDP 对象二进制序列化

我正在编写一个网络库,它同时利用 TCP 和 UDP 通过 Internet 传输序列化对象。

库(简化)分为客户端和服务器。

在编写 TCP 元素时,我没有遇到任何问题。每次我想发送一个序列化对象时,我只需在对象本身之前发送传入对象的大小,然后等待 NetworkStream 有足够的字节排队。

但是,编写 UDP 服务器有点困难。我有个问题:

做的时候:

我不确定在服务器端会发生什么。在第一个示例中,我将假设没有数据丢失或排序错误。但是,如果我序列化的对象被分成多个数据包,并且来自多个客户端,会发生什么?例如,如果这两个事件同时发生:

  • 客户端 A 发送 10,000 字节的对象
  • 客户端 B 发送 12,000 字节的对象

然后我会按这个顺序(或足够接近)收到这样的东西吗?

  • 客户 A 对象部分 1/5
  • 客户 B 对象部分 1/6
  • 客户 A 对象部分 2/5
  • 客户 B 对象部分 2/6
  • ETC...

如果是这样,我是否应该将我收到的每个客户端的数据存储在某个地方,直到我认为我有足够的数据,然后尝试反序列化它?

谢谢

0 投票
1 回答
1968 浏览

c# - binaryFormatter.Deserialize(stream) :调试和修复错误

我正在使用 BinaryFormatter 序列化和反序列化自定义文件类型。我有一个独立的应用程序和一个 Web 应用程序,它们可以读取和写入相同的文件。独立应用程序运行良好,但是当我使用 Web 应用程序读取文件时,会引发异常。问题是我看不到到底发生了什么,我该如何调试或修复这个错误?

“System.String”类型的对象无法转换为“System.Decimal”类型。

相同的文件在独立应用程序中反序列化很好??