// Main API //////////////////////////////////////////////////////////////////////////////
+ public void setLimit(int limit) { in.setLimit(limit); }
public char peekc() { flush(); return in.getc(true); }
public char getc() { flush(); return in.getc(false); }
public String readln() { flush(); return in.readln(); }
public void writeBytes(byte[] b, int off, int len) { try { out.write(b, off, len); } catch (IOException e) { ioe(e); } }
public int read(byte[] b, int off, int len) { flush(); return in.readBytes(b, off, len); }
public int read(char[] c, int off, int len) { flush(); return in.readChars(c, off, len); }
+ public int skip(int len) { return in.skip(len); }
public void close() { try { if (in!=null) in.close(); } finally { if (out!=null) out.close(); } }
public void setNewline(String s) { newLine = s; }
public InputStream getInputStream() { return in; }
public char getc(boolean peek) { return cbr.getc(peek); }
public String readln() { return cbr.readln(); }
+ public int skip(int len) { return bbis.skip(len); }
public int read() { return bbis.read(); }
public int read(byte[] b) { try { return bbis.read(b); } catch (IOException e) { ioe(e); return 0; } }
public int read(byte[] b, int off, int len) { return bbis.read(b, off, len); }
public void close() { try { cbr.close(); } catch (Exception e) { Log.error(this, e); } }
public int readBytes(byte[] b, int off, int len) { return bbis.read(b, off, len); }
public int readChars(char[] c, int off, int len) { return cbr.read(c, off, len); }
+ public void setLimit(int len) { bbis.setLimit(len); }
public In(InputStream in) {
bbis = new ByteBufInputStream(in) {