package org.exoplatform.commons.utils;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.OutputStream;
public class GrowingOutputStream extends OutputStream {
private final OutputStream out;
private ByteArrayOutputStream buffer;
private boolean open;
public GrowingOutputStream(OutputStream out, int initialBufferSize) {
if (out == null) {
throw new NullPointerException("No null output stream");
}
if (initialBufferSize < 0) {
throw new IllegalArgumentException("No initial buffer size under 0");
}
this.out = out;
this.buffer = new ByteArrayOutputStream(initialBufferSize);
this.open = true;
}
@Override
public void write(int b) throws IOException {
if (!open) {
throw new IOException("closed");
}
buffer.write(b);
}
@Override
public void write(byte[] b, int off, int len) throws IOException {
if (!open) {
throw new IOException("closed");
}
buffer.write(b, off, len);
}
@Override
public void flush() throws IOException {
if (!open) {
throw new IOException("closed");
}
//
out.write(buffer.toByteArray());
//
out.flush();
}
@Override
public void close() throws IOException {
if (!open) {
throw new IOException("closed");
}
//
out.write(buffer.toByteArray());
//
open = false;
out.close();
}
}