正常にBufferedStream
動作します-フラッシュされません:閉じstream.Length
られる8
までです。すなわち
// note these should really use "using" statements of similar
FileStream stream = new FileStream("test", FileMode.Create);
BufferedStream buff = new BufferedStream(stream, 8);
BinaryWriter writer = new BinaryWriter(buff);
writer.Write(1);
writer.Write(2);
writer.Write(3);
Console.WriteLine(stream.Length); // 8
Console.WriteLine(buff.Length); // 12
その理由buff.Length
は、それが基になるストリームの長さ12
だからです。基本的には、下のストリームを再公開し、バッファリングされたデータを見逃さないようにするために、バッファリングされたデータがある場合は追加します。BufferedStream
Flush()
public override long Length
{
get
{
this.EnsureNotClosed();
if (this._writePos > 0)
{
this.FlushWrite();
}
return this._stream.Length;
}
}
したがって:
Console.WriteLine(stream.Length); // 8
Console.WriteLine(buff.Length); // 12
Console.WriteLine(stream.Length); // 12
FileStream
は独自のバッファリングも持つことができることに注意してください