2016-10-01 15 views
0

Write();でMemoryStreamにデータを追加しようとしています。方法 しかし、それも位置を移動します。私はポジションを手動で変更できることを知っています。 しかし、ポジション位置を移動せずにMemoryStreamにバイトを追加します。

using (MemoryStream stream = new MemoryStream()) 
      using (BinaryReader reader = new BinaryReader(stream)) 
      { 
       byte[] data = new byte[20]; 
       Random rand = new Random(); 
       rand.NextBytes(data); 

       stream.Write(data, 0, 20); 
       Console.WriteLine(reader.ReadInt32());//Pointer = 20 here 
      } 

を移動せずのMemoryStreamにデータを追加する方法があるおかげで

+2

いいえ、読み書きは論理的に現在の位置を進めます。書き込まれたバイト数で設定し直すことができます。それが必要な場合、ストリームはそれをサポートします。 – CodeCaster

答えて

3

いいえ、MemoryStreamをそれ自身にそれを行うための任意の機能を持っていません。ストリームの場合、これも論理的な動作です。

しかし、これはあなたがこれを自分で行っている場合には何も間違いがないことを意味します。

public static class Extensions 
{ 
    public static void WriteAndResetPosition(this MemoryStream stream, byte[] data, int offset, int count) 
    { 
     stream.Write(data, offset, count); 
     stream.Position -= count; 
    }  
} 

それの脳コンパイルされたコード:)をするので、塩の粒とそれを取る:あなたの意図は、この機能を再利用する良い方法のいくつかの種類を持っているのであれば、私はMemoryStreamため、単純な拡張メソッドを書いてお勧めします。その後、次のように使用することができます。

stream.WriteAndResetPosition(data, 0, 20); 
+1

ブレインコンパイルされたコード...私は常に再帰を含みます。 –

+0

@ShannonHolsinger脳が執行されていない限り、それは問題ありません! –

関連する問題