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
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); }
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);
public In(InputStream in) {
bbis = new ByteBufInputStream(in) {
public void preread() {
+ cbr.unbuffer(unreader);
try {
if (!cbr.ready()) return;
} catch (IOException e) { ioe(e); }
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) {
}
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) {