| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171 |
- //
- // System.IO.StreamReader.cs
- //
- // Author:
- // Dietmar Maurer ([email protected])
- //
- // (C) Ximian, Inc. http://www.ximian.com
- //
- using System;
- using System.Text;
- namespace System.IO {
-
- public class StreamReader : TextReader {
- // buffering members
- private char[] buffer;
- private int pos;
- private Encoding internalEncoding;
- private Decoder decoder;
- private Stream internalStream;
- public new static readonly StreamReader Null = new StreamReader((Stream)null);
- public StreamReader(Stream stream)
- : this (stream, null, false, 0) { }
- public StreamReader(Stream stream, bool detectEncodingFromByteOrderMarks)
- : this (stream, null, detectEncodingFromByteOrderMarks, 0) { }
- public StreamReader(Stream stream, Encoding encoding)
- : this (stream, encoding, false, 0) { }
- public StreamReader(Stream stream, Encoding encoding, bool detectEncodingFromByteOrderMarks)
- : this (stream, encoding, detectEncodingFromByteOrderMarks, 0) { }
-
- [MonoTODO]
- public StreamReader(Stream stream, Encoding encoding, bool detectEncodingFromByteOrderMarks, int bufferSize)
- {
- internalStream = stream;
- // use detect encoding flag
- if (encoding == null) {
- internalEncoding = Encoding.UTF8;
- decoder = Encoding.UTF8.GetDecoder ();
- } else {
- internalEncoding = encoding;
- decoder = encoding.GetDecoder ();
- }
- buffer = null;
- }
- public StreamReader(string path)
- : this (path, null, false, 0) { }
- public StreamReader(string path, bool detectEncodingFromByteOrderMarks)
- : this (path, null, detectEncodingFromByteOrderMarks, 0) { }
- public StreamReader(string path, Encoding encoding)
- : this (path, encoding, false, 0) { }
- public StreamReader(string path, Encoding encoding, bool detectEncodingFromByteOrderMarks)
- : this (path, encoding, detectEncodingFromByteOrderMarks, 0) { }
-
- [MonoTODO]
- public StreamReader(string path, Encoding encoding, bool detectEncodingFromByteOrderMarks, int bufferSize)
- {
- // use detect encoding flag
- if (encoding == null) {
- internalEncoding = Encoding.UTF8;
- decoder = Encoding.UTF8.GetDecoder ();
- } else {
- internalEncoding = encoding;
- decoder = encoding.GetDecoder ();
- }
- internalStream = (Stream) File.OpenRead (path);
- buffer = null;
- }
- public virtual Stream BaseStream
- {
- get {
- return internalStream;
- }
- }
- public Encoding CurrentEncoding
- {
- get {
- return internalEncoding;
- }
- }
- [MonoTODO]
- public override void Close ()
- {
- Dispose (true);
- }
- [MonoTODO]
- public void DiscardBufferedData ()
- {
- }
- public override int Peek ()
- {
- if (!internalStream.CanSeek)
- return -1;
- if ((buffer == null) || ((pos + 1) == buffer.Length)) {
- int cnt = internalEncoding.GetMaxByteCount (1);
- byte[] bytes = new byte[cnt];
- int actcnt = internalStream.Read (bytes, 0, cnt);
- internalStream.Seek (-actcnt, SeekOrigin.Current);
- if (actcnt <= 0)
- return -1;
- int bufcnt = decoder.GetCharCount (bytes, 0, cnt);
- char[] chars = new char [bufcnt];
- bufcnt = decoder.GetChars (bytes, 0, cnt, chars, 0);
- return chars [0];
- }
- return buffer [pos + 1];
- }
- public override int Read ()
- {
- if ((buffer == null) || (++pos == buffer.Length)) {
- byte[] bytes = new byte [8192];
- int cnt = internalStream.Read (bytes, 0, 8192);
- if (cnt <= 0)
- return -1;
- int bufcnt = decoder.GetCharCount (bytes, 0, cnt);
- buffer = new char [bufcnt];
- bufcnt = decoder.GetChars (bytes, 0, cnt, buffer, 0);
- pos = 0;
- }
- return buffer[pos];
- }
- [MonoTODO]
- public override int Read (char[] buffer, int index, int count)
- {
- return 0;
- }
- [MonoTODO]
- public override string ReadLine()
- {
- return String.Empty;
- }
- [MonoTODO]
- public override string ReadToEnd()
- {
- return String.Empty;
- }
- }
- }
|