package ecologylab.oodss.distributed.common; import java.io.FilterInputStream; import java.io.IOException; import java.io.InputStream; public class LimitedInputStream extends FilterInputStream { private int limit; private int left; public LimitedInputStream(InputStream in, int limit) { super(in); this.limit = this.left = limit; } @Override public boolean markSupported() { return false; } @Override public int read(byte[] b, int off, int len) throws IOException { if(len > left) { len = left; } int ret = this.in.read(b, off, len); if(ret > 0) { left -= ret; } return ret; } @Override public int read(byte[] b) throws IOException { if(b.length > left) { int ret = this.in.read(b, 0, left); if(ret > 0) { left -= ret; } return ret; } else { int ret = this.in.read(b); if(ret > 0) { left -= ret; } return ret; } } @Override public int read() throws IOException { int ret; if(left > 0) { ret = this.in.read(); if(ret >= 0) { left--; } } else { ret = -1; } return ret; } @Override public int available() throws IOException { return Math.min(left, in.available()); } @Override public long skip(long n) throws IOException { long ret = 0; if(n > left) { ret = this.in.skip(left); } else { ret = this.in.skip(n); } left -= ret; return ret; } @Override public void mark(int readLimit) { } @Override public void reset() { } }