package freenet.support.io;
import java.io.File;
import java.io.FilterOutputStream;
import java.io.IOException;
import java.io.OutputStream;
public class DiskSpaceCheckingOutputStream extends FilterOutputStream {
public DiskSpaceCheckingOutputStream(OutputStream out, DiskSpaceChecker checker, File file, int bufferSize) {
super(out);
this.checker = checker;
this.file = file;
this.bufferSize = bufferSize;
}
private final File file;
private final DiskSpaceChecker checker;
private final int bufferSize;
private long written;
private long lastChecked;
@Override
public void write(byte[] buf) throws IOException {
write(buf, 0, buf.length);
}
@Override
public void write(int i) throws IOException {
write(new byte[] { (byte) i });
}
@Override
public synchronized void write(byte[] buf, int offset, int length) throws IOException {
if(written + length - lastChecked >= bufferSize) {
if(!checker.checkDiskSpace(file, length, bufferSize))
throw new InsufficientDiskSpaceException();
lastChecked = written;
}
out.write(buf, offset, length);
written += length;
}
}