new: ReplaceOutputStream
[nikiroo-utils.git] / src / be / nikiroo / utils / streams / BufferedOutputStream.java
index 6f600eba7c06384db6f254ed8a89642257641156..8b74ae162d2b58bf90040650bf7d02312134fece 100644 (file)
@@ -22,13 +22,22 @@ public class BufferedOutputStream extends OutputStream {
        protected byte[] buffer;
        /** An End-Of-File (or buffer, here) marker. */
        protected boolean eof;
+       /** The actual under-laying stream. */
+       protected OutputStream out;
+       /** The number of bytes written to the under-laying stream. */
+       protected long bytesWritten;
+       /**
+        * Can bypass the flush process for big writes (will directly write to the
+        * under-laying buffer if the array to write is > the internal buffer
+        * size).
+        * <p>
+        * By default, this is true.
+        */
+       protected boolean bypassFlush = true;
 
        private boolean closed;
-       private OutputStream out;
        private int openCounter;
 
-       private long bytesWritten;
-
        /**
         * Create a new {@link BufferedInputStream} that wraps the given
         * {@link InputStream}.
@@ -165,19 +174,23 @@ public class BufferedOutputStream extends OutputStream {
        }
 
        /**
-        * Flush the {@link BufferedOutputStream}, and optionally the under-laying
-        * stream, too.
+        * Flush the {@link BufferedOutputStream}, write the current buffered data
+        * to (and optionally also flush) the under-laying stream.
+        * <p>
+        * If {@link BufferedOutputStream#bypassFlush} is false, all writes to the
+        * under-laying stream are done in this method.
         * 
         * @param includingSubStream
         *            also flush the under-laying stream
         * @throws IOException
         *             in case of I/O error
         */
-       private void flush(boolean includingSubStream) throws IOException {
+       protected void flush(boolean includingSubStream) throws IOException {
                out.write(buffer, start, stop - start);
                bytesWritten += (stop - start);
                start = 0;
                stop = 0;
+
                if (includingSubStream) {
                        out.flush();
                }