protected final Out out;
private StringBuffer log = loggingEnabled ? new StringBuffer(16 * 1024) : null;
private String newLine = "\r\n";
- private Stream in_next = null;
+ private Stream in_next = null;
public Stream append(String in_next) { return appendStream(new Stream(in_next)); }
public Stream appendStream(Stream in_next) {
- if (this.in_next != null) return this.in_next.appendStream(in_next);
- this.in_next = in_next;
+ if (this.in_next != null)
+ this.in_next.appendStream(in_next);
+ else
+ this.in_next = in_next;
return this;
}
byte[] buf = new byte[1024];
while(true) {
int numread = in.read(buf, 0, buf.length);
- if (numread==-1) break;
+ if (numread==-1) { in.close(); break; }
out.out.write(buf, 0, numread);
}
if (close) out.close();
char[] buf = new char[1024];
while(true) {
int numread = in.read(buf, 0, buf.length);
- if (numread==-1) return;
+ if (numread==-1) { in.close(); return; }
out.append(buf, 0, numread);
}
//} catch (IOException ioe) { ioe(ioe); }
public static int countLines(Stream s) {
int ret = 0;
while(s.readln() != null) ret++;
+ s.close();
return ret;
}
- public Stream(byte[] b, int off, int len) { this.in = new Stream.In(new ByteArrayInputStream(b, off, len)); this.out=null; }
+ public Stream(byte[] b, int off, int len) { this.in = new Stream.In(new ByteArrayInputStream(b, off, len)); this.out=null; }
public Stream(InputStream in) { this.in = new Stream.In(in); this.out = null; }
public Stream( OutputStream out) { this.in = null; this.out = new Stream.Out(out); }
public Stream(InputStream in, OutputStream out) { this.in = new Stream.In(in); this.out = new Stream.Out(out); }
boolean flushing = false;
public int available() { return flushing ? 0 : (end - start); }
- public void close() { try { if (orig!=null) orig.close(); } catch (Exception e) { Log.error(this, e); } }
+ public void close() { try {
+ if (orig!=null) orig.close();
+ if (in_next != null) in_next.close(); // FIXME: correct?
+ } catch (Exception e) { Log.error(this, e); } }
public char getc(boolean peek) { try {
if (cstart == cend) {
cstart = 0;
cend = reader.read(cbuf, 0, cbuf.length);
if (cend == -1) {
+ reader.close();
cend = cstart;
if (in_next == null) throw new EOF();
- // FIXME: sketchy
- orig = in_next.in.orig;
- in_next = in_next.in_next;
return getc(peek);
}
}
ensurec(256);
int numread = reader.read(cbuf, cend, cbuf.length - cend);
if (numread == -1) {
+ reader.close();
if (cstart == cend) return null;
String ret = new String(cbuf, cstart, cend-cstart);
cstart = cend = 0;
if (cstart == cend) {
cstart = 0;
cend = reader.read(cbuf, 0, cbuf.length);
- if (cend == -1) { cend = cstart; return -1; }
+ if (cend == -1) { reader.close(); cend = cstart; return -1; }
}
if (len > cend - cstart) len = cend - cstart;
System.arraycopy(cbuf, cstart, c, pos, len);
if (start == end) {
start = 0;
end = orig.read(buf, 0, buf.length);
- if (end == -1) { end = start; return -1; }
+ if (end == -1) {
+ orig.close();
+ end = start;
+ if (in_next==null) return -1;
+ return in_next.read(b, pos, len);
+ }
}
if (len > end - start) len = end - start;
System.arraycopy(buf, start, b, pos, len);
private void flushchars() {
try {
flushing = true;
- for(; reader.ready(); reader.read(cbuf, cend++, 1)) ensurec(1);
- unreader.write(cbuf, cstart, cend);
+ for(; reader.ready(); reader.read(cbuf, cend++, 1)) ensurec(10);
+ if (cend>cstart)
+ unreader.write(cbuf, cstart, cend-cstart);
cstart = cend = 0;
unreader.flush();
} catch (IOException e) { ioe(e);