在将 C# 中的文件解析为 Java 之前将其转换为字节数组

Converting a file in C# into byte array before parsing it into Java

如果这个问题的措辞非常糟糕,请原谅,但我会尽力解释(对我来说)一个相当复杂的情况。我完全知道我在这里不知所措,经验丰富,但我希望你们中的一个能帮助我。

有了这个,我让你的头脑更聪明了,因为我一成不变,隧道尽头似乎没有光明。

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

所以我想:

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

这下好了,天下太平了。但是当我尝试将 a 发送到我的 Java 方法时,问题就出现了。

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

org.codehaus.jackson.JsonParseException: Numeric value (181) out of range of Java byte

现在,经过一些(徒劳的)谷歌搜索后,我得出的结论是 C# 认为通过将文件转换为包含值介于 0255.

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

在理想情况下,如果你们中有人知道如何将我的文件 C# 转换为值从 -128 到 [=27 的 byte 数组,我会很高兴=].

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

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

我非常感谢任何人可以提供的帮助。越详细越小白越好!

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

Java方如何解决:

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

如何在C#端解决:

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

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

附带说明一下,文件应该 由无符号字节组成,因此无需讽刺 ("C# thinks its being helpful")。只是 Java 没有合适的数据类型来处理它。