package com.limegroup.gnutella.util;
import java.io.IOException;
import java.io.OutputStream;
/**
* Blocks after writing more than n bytes.
*/
public class BlockingOutputStream extends OutputStream {
private int _bytesBeforeBlock;
private boolean _closed=false;
private OutputStream _delegate;
public BlockingOutputStream(OutputStream delegate, int n) {
_bytesBeforeBlock=n;
_delegate=delegate;
}
public synchronized void write(int b) throws IOException {
if (_bytesBeforeBlock<=0) {
//Wait until closed
while (true) {
if (_closed)
throw new IOException();
try {
wait();
} catch (InterruptedException e) {
throw new IOException();
}
}
}
_delegate.write(b);
_bytesBeforeBlock--;
}
public synchronized void close() throws IOException {
_closed=true;
notifyAll();
_delegate.close();
}
}