StringReader
StringReader
public class StringReader : TextReader { private String _s; private int _pos; private int _length; public override void Close() { Dispose(true); } protected override void Dispose(bool disposing) { _s = null; _pos = 0; _length = 0; base.Dispose(disposing); } public override String ReadLine() { //..... } public override String ReadToEnd() { //..... } #region ASYNC_IO public override Task<String> ReadLineAsync() { return Task.FromResult(ReadLine()); } public override Task<String> ReadToEndAsync() { return Task.FromResult(ReadToEnd()); } #endregion }
TextReader
public abstract class TextReader : MarshalByRefObject, IDisposable { public virtual void Close() { Dispose(true); GC.SuppressFinalize(this); } public void Dispose() { Dispose(true); GC.SuppressFinalize(this); } protected virtual void Dispose(bool disposing) { } public virtual String ReadToEnd() { Contract.Ensures(Contract.Result<String>() != null); char[] chars = new char[4096]; int len; StringBuilder sb = new StringBuilder(4096); while ((len = Read(chars, 0, chars.Length)) != 0) { sb.Append(chars, 0, len); } return sb.ToString(); } public override String ReadLine() { //..... } public virtual Task<String> ReadLineAsync() { return Task<String>.Factory.StartNew(_ReadLineDelegate, this, CancellationToken.None, TaskCreationOptions.DenyChildAttach, TaskScheduler.Default); } public async virtual Task<String> ReadToEndAsync() { char[] chars = new char[4096]; int len; StringBuilder sb = new StringBuilder(4096); while ((len = await ReadAsyncInternal(chars, 0, chars.Length).ConfigureAwait(false)) != 0) { sb.Append(chars, 0, len); }
return sb.ToString(); } }

浙公网安备 33010602011771号