public override sealed int ReadByte() { if (markpos < 0) { return(readInternal()); } else { if (isDisabled()) { return(stream.ReadByte()); } int c = readInternal(); if (c >= 0 && markpos >= 0) { markpos++; if (markpos > marklimit) { marklimit = 0; markpos = -1; if (buffer != null && isDisabled()) { buffer = null; } } } return(c); } }
public int read() { int c = stream.ReadByte(); if (c >= 0x80) { throw new IOException("Invalid ASCII"); } return(c); }
public int read() { int cp = 0; int bytesSeen = 0; int bytesNeeded = 0; int lower = 0x80; int upper = 0xBF; while (true) { int b = stream.ReadByte(); if (b < 0 && bytesNeeded != 0) { bytesNeeded = 0; throw new IOException("", new DecoderFallbackException()); } else if (b < 0) { return(-1); } if (bytesNeeded == 0) { if (b < 0x80) { return(b); } else if (b >= 0xc2 && b <= 0xdf) { stream.mark(4); bytesNeeded = 1; cp = b - 0xc0; } else if (b >= 0xe0 && b <= 0xef) { stream.mark(4); lower = (b == 0xe0) ? 0xa0 : 0x80; upper = (b == 0xed) ? 0x9f : 0xbf; bytesNeeded = 2; cp = b - 0xe0; } else if (b >= 0xf0 && b <= 0xf4) { stream.mark(4); lower = (b == 0xf0) ? 0x90 : 0x80; upper = (b == 0xf4) ? 0x8f : 0xbf; bytesNeeded = 3; cp = b - 0xf0; } else { throw new IOException("", new DecoderFallbackException()); } cp <<= (6 * bytesNeeded); continue; } if (b < lower || b > upper) { cp = bytesNeeded = bytesSeen = 0; lower = 0x80; upper = 0xbf; stream.reset(); throw new IOException("", new DecoderFallbackException()); } lower = 0x80; upper = 0xbf; bytesSeen++; cp += (b - 0x80) << (6 * (bytesNeeded - bytesSeen)); stream.mark(4); if (bytesSeen != bytesNeeded) { continue; } int ret = cp; cp = 0; bytesSeen = 0; bytesNeeded = 0; return(ret); } }