我有 java
代码作为
ByteArrayOutputStream baos = new ByteArrayOutputStream();
baos.write(tokenBytes);
baos.write(signedData);
byte[] finalout = baos.toByteArray();
其中 tokenBytes 和 signedData 是字节数组。在 c#
中我写成
using (MemoryStream stream = new MemoryStream())
{
using (BinaryWriter writer = new BinaryWriter(stream))
{
writer.Write(tokenBytes);
writer.Write(signature);
}
finalBytesToSend = stream.ToArray();
}
其中 tokenBytes 、 signature 和 finaleBytesToSend 是字节数组。
是否正确?或者还有其他方法吗?
最佳答案
我假设您正在编写 Java-C# 序列化方案。我认为您可能需要注意 3 件事:
- Java 字节数组输出可能在末尾包含特殊的分隔符。
- 如果字节数组中的数据最初不是字节,则 Java 默认使用 Big-Endian 编码;而 C# 默认是 Little Endian 编码。
- 对于字符串,Java 使用 UTF-16 (Big Endian),而 C# UTF-16 默认是 Little Endian。
在我看来,如果要在 Java 和 C# 之间传输数据,最好在 Java 端使用 ByteBuffer,在 C# 端使用 MemoryStream/BinaryReader/BinaryWrite。在 C# 端正确设置 UTF-16 Big Endian,并为诸如 int/long/double 基元之类的东西编写自己的反序列化程序。这使它起作用。
关于C# 等效于 Java 中的 ByteArrayOutputStream,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22062521/