2014-02-27 79 views
3

ByteArrayOutputStream我java代码C#相当于在Java

ByteArrayOutputStream baos = new ByteArrayOutputStream(); 
baos.write(tokenBytes); 
baos.write(signedData); 
byte[] finalout = baos.toByteArray(); 

其中tokenBytes和签名数据的字节arrays.In c#我已经写成

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

     } 

其中tokenBytes,签名和finaleBytesToSend是字节阵列。

它是正确的吗?或者还有其他方法可以做到吗?

+2

你有代码。它工作吗? –

回答

1

大概我假设你正在编写一个Java-C#序列化方案。我认为有3件事情可能需要注意:

  1. Java字节数组输出可能在末尾包含特殊的定界符。
  2. 如果您的字节数组中的数据本来不是字节,那么默认情况下使用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基元这样的东西编写自己的反序列化器。这使它工作。

+0

最好使用可移植的序列化格式,如XML,JSON或Protocol Buffers ...当然,如果OP不尝试从Java应用程序中读取数据,而这些数据不能被修改。 – Dennis

+0

@丹尼斯是的,没有。取决于他想处理的数据和频率。因为他在查看字节数组,所以我假定在这种情况下性能和GC很重要,这使得所有XML/JSON /协议缓冲区都处于尴尬境地。有些人可能会认为Protobuf的高性能,但是如果你看看它的Java实现,在序列化过程中会产生很多临时对象。当然,如果性能不是问题,任何事情都可以 - 但我怀疑OP会首先看字节格式。 –

+0

@Alex我应该如何继续?我没有得到你所说的。你能提供任何链接供参考吗? – Vaibhav