【发布时间】:2014-03-22 10:10:48
【问题描述】:
这个问题有点类似于my previous one,在那里我问了一种“跨语言”的方式来编写和读取 Java 和 C# 程序之间的整数。问题是字节序。
无论如何,我面临着次要问题。我现在的目标是以 Java 和 C# 都可以处理的方式存储和检索无符号字节数组(值从 0 到 255)。
在 C# 中这很容易,因为 unsigned byte[] 存在:
BinaryWriterBigEndian writer = new BinaryWriterBigEndian(fs);
// ...
writer.Write(byteData, 0, byteData.Length);
BinaryWriterBigEndian 是……嗯……一个大端二进制写入器;)
这样,文件将包含由例如以下值组成的序列(以大端表示):
[0][120][50][250][221]...
现在是时候在 Java 下做同样的事情了。由于此处不存在unsigned byte[],因此该数组作为(带符号的)int[] 存储在内存中,以便能够表示高于 127 的值。
如何像 C# 一样将其编写为 unsigned byte 值的序列?
我试过这个:
ByteBuffer byteBuffer = ByteBuffer.allocate(4 * dataLength);
IntBuffer intBuffer = byteBuffer.asIntBuffer();
intBuffer.put(intData);
outputStream.write(byteBuffer.array());
写得很好,但 C# 无法以正确的方式读取它。
【问题讨论】: