package org.archive.server;
import java.io.FilterInputStream;
import java.io.IOException;
import java.io.InputStream;
import com.google.common.io.FileBackedOutputStream;
public class FileBackedInputStream extends FilterInputStream {
FileBackedOutputStream backer;
public static int MAX_RAM = 1024 * 1024 * 2;
protected FileBackedInputStream(InputStream in) {
super(in);
backer = new FileBackedOutputStream(MAX_RAM,false);
}
/* (non-Javadoc)
* @see java.io.FilterInputStream#markSupported()
*/
@Override
public boolean markSupported() {
return false;
}
public InputStream getInputStream() throws IOException {
return backer.getSupplier().getInput();
}
public void resetBacker() throws IOException {
backer.reset();
}
@Override
public int read(byte[] b, int off, int len) throws IOException {
int amt = super.read(b, off, len);
if(amt != -1) {
backer.write(b,off,amt);
}
return amt;
}
@Override
public int read() throws IOException {
int r = super.read();
if(r != -1) {
backer.write(r);
}
return r;
}
@Override
public int read(byte[] b) throws IOException {
return read(b,0,b.length);
}
@Override
public synchronized void reset() throws IOException {
throw new UnsupportedOperationException("no reset!");
}
}