StreamReader、StreamWriter
StreamReader
public class StreamReader : TextReader {
public StreamReader(Stream stream, Encoding encoding, bool detectEncodingFromByteOrderMarks, int bufferSize, bool leaveOpen) { if (stream == null || encoding == null) throw new ArgumentNullException((stream == null ? "stream" : "encoding")); if (!stream.CanRead) throw new ArgumentException(Environment.GetResourceString("Argument_StreamNotReadable")); if (bufferSize <= 0) throw new ArgumentOutOfRangeException("bufferSize", Environment.GetResourceString("ArgumentOutOfRange_NeedPosNum")); Contract.EndContractBlock(); Init(stream, encoding, detectEncodingFromByteOrderMarks, bufferSize, leaveOpen); } internal void Init(Stream stream) { this.stream = stream; _closable = true; } public override void Close() { Dispose(true); } protected override void Dispose(bool disposing) { try { if (!LeaveOpen && disposing && (stream != null)) stream.Close(); } finally { if (!LeaveOpen && (stream != null)) { stream = null; encoding = null; decoder = null; byteBuffer = null; charBuffer = null; charPos = 0; charLen = 0; base.Dispose(disposing); } } } }
StreamWriter
public class StreamWriter : TextWriter { public override void Close() { Dispose(true); GC.SuppressFinalize(this); } protected override void Dispose(bool disposing) { try { if (stream != null) { if (disposing || (LeaveOpen && stream is __ConsoleStream)) { #if FEATURE_ASYNC_IO CheckAsyncTaskInProgress(); #endif Flush(true, true); #if MDA_SUPPORTED // Disable buffered data loss mda if (mdaHelper != null) GC.SuppressFinalize(mdaHelper); #endif } } } finally { if (!LeaveOpen && stream != null) { try { if (disposing) stream.Close(); } finally { stream = null; byteBuffer = null; charBuffer = null; encoding = null; encoder = null; charLen = 0; base.Dispose(disposing); } } } } public override void Flush() { #if FEATURE_ASYNC_IO CheckAsyncTaskInProgress(); #endif Flush(true, true); } }

浙公网安备 33010602011771号