C#等效于java中的ByteArrayOutputStream

Vai*_*hav 6 c# java stream windows-phone-8

我的java代码是

ByteArrayOutputStream baos = new ByteArrayOutputStream();
baos.write(tokenBytes);
baos.write(signedData);
byte[] finalout = baos.toByteArray();
Run Code Online (Sandbox Code Playgroud)

其中tokenBytes和signedData是字节数组.c#我写的是

 using (MemoryStream stream = new MemoryStream())
        {
            using (BinaryWriter writer = new BinaryWriter(stream))
            {
                writer.Write(tokenBytes);
                writer.Write(signature);
            }
            finalBytesToSend = stream.ToArray();

        }
Run Code Online (Sandbox Code Playgroud)

其中tokenBytes,signature和finaleBytesToSend是字节数组.

这是对的吗?或者还有其他方法吗?

Ale*_*Suo 1

我假设您正在编写 Java-C# 序列化方案。我认为您可能需要注意以下三件事:

  1. Java 字节数组输出可能在末尾包含特殊的分隔符。
  2. 如果字节数组中的数据最初不仅仅是字节,那么 Java 默认使用 Big-Endian 编码;而C#默认是Little Endian编码。
  3. 对于字符串,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 基元等内容编写自己的反序列化器。这样就可以了。