package mandelbrot.ocamljava_maven_plugin.io; import java.io.ByteArrayOutputStream; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.OutputStream; import com.google.common.base.Preconditions; /*** * Wraps an output stream and simply suppresses checked {@link IOException}s from the method signatures. * @author carm * */ public class UncheckedOutputStream<T extends OutputStream> extends OutputStream { final T outputStream; private UncheckedOutputStream(final T streamToWrap) { this.outputStream = Preconditions.checkNotNull(streamToWrap); } @SuppressWarnings("unchecked") private UncheckedOutputStream(final File file) { try { this.outputStream = (T) new FileOutputStream(file); } catch (final Exception e) { throw new RuntimeException(e); } } @Override public void write(int arg0) throws IOException { outputStream.write(arg0); } @Override public void close() { try { outputStream.close(); } catch (final IOException e) { throw new RuntimeException(e); } } @Override public void flush() { try { outputStream.flush(); } catch (final IOException e) { throw new RuntimeException(e); } } @Override public void write(final byte[] b) { try { outputStream.write(b); } catch (final IOException e) { throw new RuntimeException(e); } } @Override public void write(final byte[] b, final int off, final int len) { try { outputStream.write(b, off, len); } catch (final IOException e) { throw new RuntimeException(e); } } public T getWrappedOutputStream() { return outputStream; } public static UncheckedOutputStream<ByteArrayOutputStream> fromBytes(final int size) { return new UncheckedOutputStream<ByteArrayOutputStream>(new ByteArrayOutputStream(size)); } public static UncheckedOutputStream<FileOutputStream> fromFile(final File file) { return new UncheckedOutputStream<FileOutputStream>(file); } public static <T extends OutputStream> OutputStream wrap(final T outputStream) { return new UncheckedOutputStream<T>(outputStream); } }