【问题标题】:Converting a file in C# into byte array before parsing it into Java [duplicate]在将 C# 中的文件解析为 Java 之前将其转换为字节数组 [重复]
【发布时间】:2015-04-28 12:58:23
【问题描述】:

如果这个问题的措辞非常糟糕,请原谅,但我会尽力解释(对我而言)什么是相当复杂的情况。我完全意识到我在这里不知所措,经验丰富,但我希望你们中的一个可以帮助我。

我用这个来告诉你更聪明的想法,因为我完全陷入了困境,隧道尽头似乎没有光。

我有一个文件我希望用C# 转换为byte 数组,因为byte 数组将作为参数发送到Java 方法中。

所以我想:

byte[] a = System.IO.File.ReadAllBytes(filePathHere);

现在,这行得通,世界上一切都很平静。但是当我尝试将a 发送到我的Java 方法时,问题就出现了。

当我尝试通过JSON 将其发送到我的Java 文件时,它引发的错误是:

org.codehaus.jackson.JsonParseException: 数值 (181) 超出 Java字节范围

现在,经过一番(徒劳的)谷歌搜索后,我得出的结论是,C# 认为通过将文件转换为包含值在0255 之间的项目的byte 数组是有帮助的。

虽然Java 期望作为我的方法的参数得到一个byte 数组,但其值从-128128

在理想情况下,如果你们中有人知道如何将我的文件 C# 转换为 byte 数组,其值从 -128128,我会很高兴。

但是,如果这实际上是不可能的,我也愿意在Java 中将值在0255 之间的byte 数组转换为更理想的-128 到@987654350 @ 格式。

我所描述的是不可能的,还是有人知道如何做到这一点?

我非常感谢任何人可以提供的任何帮助。越详细和对新手友好越好!

【问题讨论】:

标签: java c# arrays json byte


【解决方案1】:

在 C# 中转换类型相对简单:

File.ReadAllBytes(filePathHere).Select(b=>(sbyte)b).ToArray();

附带说明,文件假定由无符号字节组成,因此不需要讽刺(“C# 认为它很有帮助”)。只是Java没有适当的数据类型来处理它。

【讨论】:

    【解决方案2】:

    这是因为 Java 仅适用于有符号数字原语,而 c# bytes 是无符号 8 位整数。

    如何在Java端解决:

    • 您可以在整数/短数组中读取它,然后逐字节强制转换为字节数组。
    • 如果您需要处理 [0-255] 区间内的数字,您应该使用整数或短数组。

    C#端如何解决:

    【讨论】:

      猜你喜欢
      • 2014-06-25
      • 2015-04-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-30
      • 2013-11-08
      相关资源
      最近更新 更多