在将 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#
认为通过将文件转换为包含值介于 0
和 255
.
虽然 Java
期望作为我的方法的参数是一个 byte
数组,其值从 -128
到 128
。
在理想情况下,如果你们中有人知道如何将我的文件 C#
转换为值从 -128
到 [=27 的 byte
数组,我会很高兴=].
但是,如果这实际上是不可能的,我也愿意在 Java
中将我的 byte
数组转换为 0
和 255
之间的值到更理想的 -128
到 128
格式。
我描述的是不可能的,还是有人知道如何做到这一点?
我非常感谢任何人可以提供的帮助。越详细越小白越好!
这是因为 Java 仅适用于有符号数字基元,而 c# byte
s 是无符号 8 位整数。
Java方如何解决:
- 您可以在 integer/short 数组中读取它,然后逐字节强制转换为字节数组。
- 如果您需要处理 [0-255] 区间内的数字,您应该使用整数或短数组。
如何在C#端解决:
- 使用
sbyte
(signed byte) 数组 [-128 到 127]。
在 C# 中转换类型相对简单:
File.ReadAllBytes(filePathHere).Select(b=>(sbyte)b).ToArray();
附带说明一下,文件应该 由无符号字节组成,因此无需讽刺 ("C# thinks its being helpful")。只是 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#
认为通过将文件转换为包含值介于 0
和 255
.
虽然 Java
期望作为我的方法的参数是一个 byte
数组,其值从 -128
到 128
。
在理想情况下,如果你们中有人知道如何将我的文件 C#
转换为值从 -128
到 [=27 的 byte
数组,我会很高兴=].
但是,如果这实际上是不可能的,我也愿意在 Java
中将我的 byte
数组转换为 0
和 255
之间的值到更理想的 -128
到 128
格式。
我描述的是不可能的,还是有人知道如何做到这一点?
我非常感谢任何人可以提供的帮助。越详细越小白越好!
这是因为 Java 仅适用于有符号数字基元,而 c# byte
s 是无符号 8 位整数。
Java方如何解决:
- 您可以在 integer/short 数组中读取它,然后逐字节强制转换为字节数组。
- 如果您需要处理 [0-255] 区间内的数字,您应该使用整数或短数组。
如何在C#端解决:
- 使用
sbyte
(signed byte) 数组 [-128 到 127]。
在 C# 中转换类型相对简单:
File.ReadAllBytes(filePathHere).Select(b=>(sbyte)b).ToArray();
附带说明一下,文件应该 由无符号字节组成,因此无需讽刺 ("C# thinks its being helpful")。只是 Java 没有合适的数据类型来处理它。