2014-02-27 42 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