2011-08-30 19 views
114

あなたが最初にストリームをリセットする必要があります(たとえば、MemoryStream)は、Stream.Seek(0、SeekOrigin.Begin)またはポジション= 0

stream.Seek(0, SeekOrigin.Begin); 

または

stream.Position = 0; 
を使用することをお勧めします

私は両方の作業がうまくいっているのを見ましたが、一方がもう一方のものよりも正しいかどうか疑問に思っていますか?

+0

メモリストリームの内容を返す場合、ToArrayは位置に関係なく動作します –

+3

回答:最も読みやすいものです。 – jgauffin

+6

私は個人的には 'stream.Position = 0;'が好きですが、@ jgauffinに同意しなければなりません。 – lenniep

答えて

96

絶対位置を設定する場合はPositionを使用し、相対位置を設定する場合はSeekを使用してください。どちらも利便性のために提供されているので、コードのスタイルと可読性に合ったものを選択できます。位置にアクセスするには、ストリームをシーク可能にする必要があります。そのため、ストリームは安全に交換できます。

+39

相対位置でもこのプロパティを使用します: 'stream.Position + = 10;'は私にはかなり読みやすいようです。 –

+4

SeekOrigin.BeginとSeekOrigin.Currentの使用には速度差がありますか? – gonzobrains

+6

@gonzobrains ["戻り値:ストリーム内の新しい位置。初期参照ポイントとオフセットを組み合わせて計算されます。"](http://msdn.microsoft.com/en-us/library/system.io.memorystream .seek.aspx)。だから、組み合わせのコストはちょうど直接位置を設定するよりも少しコストがかかります。実際には、それはニトピッキング以外何も意味しません。 ))))) – user808128

関連する問題