X-Git-Url: http://git.megacz.com/?p=org.ibex.io.git;a=blobdiff_plain;f=src%2Forg%2Fibex%2Fio%2FStream.java;h=2cc2e1486abdad1354fc263f4a80de0e0cbeec8d;hp=ea43ba7471266b51280cf010389b3c32026c9b00;hb=6f7f893c243dd915524f89f8b7dc319122d7be7f;hpb=3e1c83f8d1d65b96a3e24c3aa2a042c21f005111 diff --git a/src/org/ibex/io/Stream.java b/src/org/ibex/io/Stream.java index ea43ba7..2cc2e14 100644 --- a/src/org/ibex/io/Stream.java +++ b/src/org/ibex/io/Stream.java @@ -9,6 +9,7 @@ import java.net.*; import java.util.*; import java.util.zip.*; import org.ibex.util.*; +import org.ibex.crypto.*; // Features: // - automatically flush writer before reading on linked read/write pairs @@ -25,9 +26,8 @@ public class Stream { protected final In in; protected final Out out; private String newLine = "\r\n"; - private Stream in_next = null; - 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); } @@ -49,10 +49,14 @@ public class Stream { public void print(String s) { out.write(s); flush(); } public void println(String s) { print(s); print(newLine); } public void flush() { if (out != null) out.flushWriter(); } + 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 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 void setInputDigest(Digest d) { in.bbis.digest = d; } private static class Out extends BufferedOutputStream { private Writer writer = new OutputStreamWriter(this); @@ -91,6 +95,7 @@ public class Stream { public In(InputStream in) { bbis = new ByteBufInputStream(in) { public void preread() { + cbr.unbuffer(unreader); try { if (!cbr.ready()) return; } catch (IOException e) { ioe(e); } @@ -108,31 +113,22 @@ public class Stream { unreader = new OutputStreamWriter(new UnReaderStream(bbis)); cbr = new CharBufReader(new InputStreamReader(bbis)); } - } - // Utilities: append() and transcribe() ////////////////////////////////////////////////////////////////////////////// + // Utilities: append() and transcribe() /////////////////////////////////////////////////////// public Stream append(String in_next) { return appendStream(new Stream(in_next)); } - public Stream appendStream(Stream in_next) { - if (this.in_next != null) - this.in_next.appendStream(in_next); - else - this.in_next = in_next; - return this; - } + public Stream appendStream(Stream in_next) { in.bbis.appendStream(in_next); return this; } public void transcribe(Stream out) { transcribe(out, false); } public void transcribe(Stream out, boolean close) { - try { - byte[] buf = new byte[1024]; - while(true) { - int numread = in.read(buf, 0, buf.length); - if (numread==-1) { in.close(); break; } - out.out.write(buf, 0, numread); - } - if (close) out.close(); - } catch (IOException ioe) { ioe(ioe); } + byte[] buf = new byte[1024]; + while(true) { + int numread = in.read(buf, 0, buf.length); + if (numread==-1) { in.close(); break; } + out.writeBytes(buf, 0, numread); + } + if (close) out.close(); } public void transcribe(StringBuffer out) { @@ -145,13 +141,20 @@ public class Stream { } public static int countLines(Stream s) { - System.out.println("counting lines..."); int ret = 0; while(s.readln() != null) ret++; s.close(); return ret; } + // FIXME: ugly + public static int countBytes(Stream s) { + int ret = 0; + while(s.in.read() != -1) ret++; + s.close(); + return ret; + } + // Exceptions ////////////////////////////////////////////////////////////////////////////// static int ioe(IOException e) {