2011-07-19 5 views
0

myByteの配列を取得します - すべてのバイトは、あなたがWriteときを呼んでいる理由はなぜゼロ

答えて

10

何ができるか= "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA =="

var memoryStream = new MemoryStream(); 
    var binaryFormatter = new BinaryFormatter(); 
    binaryFormatter.Serialize(memoryStream, m_workspace.ListPlatforms.ToArray()); 

    myByte = new byte[memoryStream.Length]; 
    memoryStream.Seek(0, SeekOrigin.Begin); 
    memoryStream.Write(myByte, 0, myByte.Length); 

    string a = System.Convert.ToBase64String(myByte); 

ゼロ

です私はあなたがReadに電話をかけることを意味すると思う。言い換えれば、あなたはから新しく作成された(したがって、フル・オブ・ゼロ)であなたのシリアル化されたデータを持っているMemoryStreamに配列を書いている。を読み込みますRead代わりWriteのを使用して配列からにストリーム。

しかしToArrayを呼び出すために簡単になります:あなたは、MemoryStreamにラウンドされていない他の方法をバイト配列を書いている

byte[] myByte = memoryStream.ToArray(); 
1

Writeをreadと置き換えると、すぐに問題が解決されます。

しかし、MemoryStreamには、すでにお望みの方法があるToArray()の方法があります。このような複雑な方法で行う必要はありません。

1

理由:

  1. あなたがbinaryFormatterをフラッシュしていなかったので、memoryStreamも書かれてしまっていなかったあなたがとにかくやろうとしているもの

(1)正しい場合、memoryStreambinaryFormatterの両方を中心に使用して置きます。

+0

BinaryFormatterには、私が知る限り、Flushメソッドはありません。 –

+0

私はあなたが正しいと確信していますが、私はあなたと同じくらい気分が良くなりませんでしたので、Writeの代わりにReadを意味することがわかりました。だから私は、memoryStreamを記述するためには、いくつかの追加ステップが必要であると推測しました。 –

関連する問題