11

どちらのBinaryReader コンストラクターにもストリームパラメーターが必要です。を使い終わったときに、基になるストリームをそのまま維持する必要がある場合BinaryReaderでも、それを呼び出す必要がありDispose()ますか?そうでない場合は、不要になった他のクリーンアップはありますBinaryReaderか?

のMSDNページでBinaryReader.Dispose()明確な答えが見つからないため、質問しています。

小さな追加

私のコンテキストでは、を使用して数バイトを読み取り、その後、ストリームの位置を初期化BinaryReader前の位置に戻しました。BinaryReader

また、.Net4を使用しています。

4

4 に答える 4

17

あなた (または回答を探してこれらを読んでいる人) が .NET 4.5 (またはそれ以降) で VS 2012 を使用している場合はBinaryReader、ストリームを閉じない を作成できます。例えば:

using(var reader = new BinaryReader(theStream, new UTF8Encoding(), true)
{
//...
}

new UTF8EncodingBinaryReader(Stream) コンストラクターを使用した場合は がデフォルトです。UTF8Encoding が必要ない場合は、別のものを使用できます。はtrue、「はい、ストリームを開いたままにします」を意味します。

于 2012-08-29T16:34:55.860 に答える
11

いいえ、BinaryReaderストリームを開いたままにしておきたい場合は、を破棄しないでください。

私はおそらく何が起こっているのかを説明するためにコメントを追加するでしょう-そしてあなたが読んだ限り、ストリームからのみ読み取られることが保証されているかどうかはわかりません...それはもっと読んだかもしれませんたとえば、バッファ。明らかに、それからストリームを探す場合、それは問題ではありません。BinaryReaderBinaryReader

于 2012-08-29T16:15:10.377 に答える
2

それが私だったら、整理のために BinaryReader を破棄します...しかし、BinaryReaderこのthis コンストラクターのオーバーロードで を作成したことも確認します。

public BinaryReader(
  Stream   input,
  Encoding encoding,
  bool     leaveOpen
  )

leaveOpen引数を asに指定するtrueと、基になるストリームを開いたままにしておくようにリーダーに指示します。

このルートをたどると、物事の範囲と所有権を明確にします。そのようにして、混乱や誤解の余地が少なくなります。

于 2012-08-29T16:35:05.657 に答える