blob: bf9a21f415e47236daa17fca735a2ef4c502190e [file] [log] [blame]
package aQute.lib.io;
import java.io.*;
public class LimitedInputStream extends InputStream {
final InputStream in;
final int size;
int left;
public LimitedInputStream(InputStream in, int size) {
this.in = in;
this.left = size;
this.size = size;
}
@Override public int read() throws IOException {
if (left <= 0) {
eof();
return -1;
}
left--;
return in.read();
}
@Override public int available() throws IOException {
return Math.min(left, in.available());
}
@Override public void close() throws IOException {
eof();
in.close();
}
protected void eof() {
}
@Override public synchronized void mark(int readlimit) {
throw new UnsupportedOperationException();
}
@Override public boolean markSupported() {
return false;
}
@Override public int read(byte[] b, int off, int len) throws IOException {
int min = Math.min(len, left);
if (min == 0)
return 0;
int read = in.read(b, off, min);
if (read > 0)
left -= read;
return read;
}
@Override public int read(byte[] b) throws IOException {
return read(b,0,b.length);
}
@Override public synchronized void reset() throws IOException {
throw new UnsupportedOperationException();
}
@Override public long skip(long n) throws IOException {
long count = 0;
byte buffer[] = new byte[1024];
while ( n > 0 && read() >= 0) {
int size = read(buffer);
if ( size <= 0)
return count;
count+=size;
n-=size;
}
return count;
}
}