背景
我正在手动将大数据块写入二进制文件System.IO.BinaryWriter
。我之所以选择这种方法,是因为与各种其他序列化和反序列化方法相比,它的性能得到了提高(我目前正在使用System.IO.BinaryReader
).
Question
我可能需要使用其他编程语言中的序列化格式,例如Java
and/or Rust
。他们能否理解由System.IO.BinaryWriter
并以与 .NET 'System.IO.BinaryReader' 类似的方式读取它?
(我假设新平台(Java/Rust)隐含地了解原始二进制文件的编写顺序。)
侧面信息
我知道协议缓冲区是一个高性能且与语言无关的框架,用于在这种情况下进行序列化/反序列化,但是:
(1) 我正在使用 F#,它与受歧视的工会作斗争
(2) 编写我自己的自定义序列化器实际上并没有那么费力,因为我的类型不太复杂
这取决于您使用的类型BinaryWriter
.
-
byte
, sbyte
and byte[]
: 没问题。
-
(U)IntXX
: 字节序问题。互联网BinaryWriter
以小端格式转储这些类型。
-
float
and double
:如果两个系统都使用相同的 IEEE 754 标准,并且两个系统都使用相同的字节序,那么就没有问题。
-
decimal
:这是 .NET 特定的类型,类似于Currency
但使用不同的格式。小心使用。
-
char
and char[]
:使用当前Encoding
of the BinaryWriter
。双方使用相同的编码,一切正常。
-
string
:字符串的长度被编码为所谓的7 位编码 int格式(1 个字节最多 127 个字符等),and使用当前编码。为了使事情兼容,也许您应该使用手动转储的长度信息转储字符数组。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)