C#等效于java中的ByteArrayOutputStream

时间:2014-02-27 08:04:10

标签: c# java windows-phone-8 stream

我有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是字节数组。

这是对的吗?还有其他办法吗?

1 个答案:

答案 0 :(得分:1)

据推测,我假设您正在编写Java-C#序列化方案。我认为有三件事你可能要小心:

  1. Java字节数组输出最后可能包含特殊的分隔符。
  2. 如果字节数组中的数据最初只是字节数,那么Java默认使用Big-Endian编码;而C#默认是Little Endian编码。
  3. 对于字符串,Java使用UTF-16(Big Endian),默认情况下C#UTF-16是Little Endian。
  4. 在我看来,如果你在Java和C#之间传输数据,你最好在Java端使用ByteBuffer,在C#端使用MemoryStream / BinaryReader / BinaryWrite。在C#端正确设置UTF-16 Big Endian,并为int / long / double primitives之类的东西编写自己的反序列化器。这使它工作。