.NET System.IO.BinaryWriter 写入的原始字节是否可以被其他平台读取?

2024-01-06

背景

我正在手动将大数据块写入二进制文件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(使用前将#替换为@)

.NET System.IO.BinaryWriter 写入的原始字节是否可以被其他平台读取? 的相关文章

随机推荐

  • C# 多线程控制台应用程序 - 控制台在线程完成之前退出

    我有一个 C 控制台应用程序 最多可创建 5 个线程 线程执行良好 但 UI 线程在完成工作后关闭 有没有办法让主 UI 线程在副线程运行时保持运行 foreach var url in urls Console WriteLine sta
  • Google Apps 自定义域 SSL 已配置但连接失败

    我已按照以下步骤操作https cloud google com appengine docs ssl https cloud google com appengine docs ssl and https support google c
  • 不同浏览器窗口中的 JSF 会话问题

    我们有一个基于 JSF 2 0 MyFaces 构建并在 Weblogic 应用服务器上运行的应用程序 我们面临一个有关 http 会话的问题 Issue 假设我在两个不同的 IE 窗口中打开应用程序 并在第一个窗口中提供一些搜索输入 在第
  • R:考虑因素按周计算移动最大坡度

    我有一个数据框 其中包括下面的供暖度日 HDD structure list WinterID structure c 1L 1L 1L 1L 1L 1L 1L 1L 1L 1L 1L 1L 1L 1L 1L 1L 1L 1L 1L 1L
  • mysql 分区

    只是想验证数据库分区仅在数据库级别实现 当我们查询分区表时 我们仍然执行正常查询 我们的查询没有什么特别的 解析查询时会自动执行优化 对吗 例如我们有一个名为 地址 的表 其中有一列名为 国家 地区代码 和 城市 所以如果我想获得美国纽约的
  • 如何创建 RSS 提要并显示它?

    在我为广播电台维护的网站上 他们有一个显示新闻文章的页面 现在新闻发布在一个 html 页面中 然后由包含所有导航的 php 页面读取 我被要求将其制作成 RSS 源 我该怎么做呢 我知道如何制作 XML 文件 但编辑新闻文件的人缺乏技术
  • 避免在 Android 上尝试/捕获

    我是 Android 环境的新手 我已经开始编写一些代码来对数据库执行一些查询 当我必须处理异常时 我不知道正确的方法是什么 我曾经使用过 Androidthrows方法声明 但似乎throws安卓不允许吗 只是try catch 我这样说
  • 使用 VBA 以编程方式安装 Microsoft Access 加载项

    查找有关 Microsoft Access 加载项开发的信息就像拔掉所有牙齿一样 是的 我发现了几篇托管加载项文章 但几乎找不到非托管加载项的内容 我确实找到了一篇很棒的文章 它在创建基本上是一个非托管的 mda 项目方面非常古老 我已经遵
  • PIP 在 Windows 8 上的哪里存储/保存 Python 3 模块/包?

    我到处都找过了 但找不到软件包的安装位置 此外 包裹是来自pip questions tagged pip 模块 库或只是包python questions tagged python术语 使用此命令列出全局包及其位置 pip list v
  • Gradle 获得“sudo”权限

    我有下一个问题 我需要使用 Gradle 在服务器上执行一些部署内容 但为此 Gradle 应该在目标部署服务器上具有 root 访问权限 我有 sudo 的密码 但我不知道如何将其插入服务器 有没有办法从 Gradle 任务中获得 sud
  • 注释属性必须是类文字吗?为什么?常量也应该没问题

    有人可以解释为什么字符串和类注释参数的预期不同吗 为什么编译器需要类的文字 同时也接受字符串的常量 使用 Spring 的 RequestMapping 的工作示例 public class MyController public stat
  • UIView 动画后 UIView 内的 UIButton 不起作用

    我在这个论坛上看到了很多问题 这些问题给出了这个主题 UIButton inside a UIView when animated does not work 的答案 但是在尝试了类似的答案之后 a UIViewAnimationOptio
  • R 中的函数工厂

    我尝试通过返回专门函数的字典来提出一个函数工厂 或多或少类似于函数式编程风格 我尝试在下面的代码中执行此操作 require hash names c aa bb cc funs hash for i in seq length names
  • PHP 中 ::(双冒号)和 ->(箭头)有什么区别?

    PHP 中有两种不同的方法来访问方法 但是有什么区别呢 response gt setParameter foo bar and sfConfig set foo bar 我假设 gt 带有大于号或 V 形的破折号 用于变量函数 并且 双冒
  • 将 this 传递给函数的基本查询

    我正在尝试更好地理解 JavaScript function foo console log this normal function call foo this will refer to window 当我尝试将其传递给函数时 它会抛出
  • 如何判断这个内存泄漏是从哪里来的呢?

    如何确定代码中的内存泄漏来自何处 除了我的应用程序中的 main 函数之外 它没有引用任何内容 看来您正在尝试同时使用 NSZombieEnabled 和泄漏 这两种诊断技术不能一起工作 NSZombieEnabled 使所有已释放的对象都
  • 我应该如何在 Perl 中序列化代码引用?

    我希望nstore一个 Perl 哈希值 其中还包含代码引用 按照此perldoc http perldoc perl org Storable html CODE REFERENCEShttp perldoc perl org Stora
  • 为什么二叉搜索树中的查找时间复杂度为 O(log(n))?

    我可以看到 当在 a 中查找值时 如何BST每次将节点与我们要查找的值进行比较时 我们都会留下一半的树 但是我不明白为什么时间复杂度是O log n 所以 我的问题是 如果我们有一个包含 N 个元素的树 为什么查找树并检查特定值是否存在的时
  • 从 PHP 文本中提取 URL

    我有这样的文字 string this is my friend s website http example com I think it is coll 如何将链接提取到另一个变量中 我知道应该特别使用正则表达式preg match 但
  • .NET System.IO.BinaryWriter 写入的原始字节是否可以被其他平台读取?

    背景 我正在手动将大数据块写入二进制文件System IO BinaryWriter 我之所以选择这种方法 是因为与各种其他序列化和反序列化方法相比 它的性能得到了提高 我目前正在使用System IO BinaryReader Quest