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);
    }
}

 

posted @ 2016-11-23 13:56  茗::流  阅读(163)  评论(0)    收藏  举报
如有雷同,纯属参考。如有侵犯你的版权,请联系我。