X-Git-Url: http://git.nikiroo.be/?p=nikiroo-utils.git;a=blobdiff_plain;f=src%2Fbe%2Fnikiroo%2Futils%2Fstreams%2FBufferedOutputStream.java;fp=src%2Fbe%2Fnikiroo%2Futils%2Fstreams%2FBufferedOutputStream.java;h=5f7e6ebc7011d4df33c10e95356ad1a91f08b925;hp=8b74ae162d2b58bf90040650bf7d02312134fece;hb=e838eb0ef7ce247c2d3adbc1e01e8aef9161b125;hpb=3b4319db57971bce3afd9092a0f9db9809d47ca2 diff --git a/src/be/nikiroo/utils/streams/BufferedOutputStream.java b/src/be/nikiroo/utils/streams/BufferedOutputStream.java index 8b74ae1..5f7e6eb 100644 --- a/src/be/nikiroo/utils/streams/BufferedOutputStream.java +++ b/src/be/nikiroo/utils/streams/BufferedOutputStream.java @@ -37,6 +37,7 @@ public class BufferedOutputStream extends OutputStream { private boolean closed; private int openCounter; + private byte[] b1; /** * Create a new {@link BufferedInputStream} that wraps the given @@ -49,19 +50,15 @@ public class BufferedOutputStream extends OutputStream { this.out = out; this.buffer = new byte[4096]; + this.b1 = new byte[1]; this.start = 0; this.stop = 0; } @Override public void write(int b) throws IOException { - checkClose(); - - if (available() <= 0) { - flush(false); - } - - buffer[start++] = (byte) b; + b1[0] = (byte) b; + write(b1, 0, 1); } @Override @@ -86,7 +83,7 @@ public class BufferedOutputStream extends OutputStream { return; } - if (sourceLength >= buffer.length) { + if (bypassFlush && sourceLength >= buffer.length) { /* * If the request length exceeds the size of the output buffer, * flush the output buffer and then write the data directly. In this @@ -94,6 +91,7 @@ public class BufferedOutputStream extends OutputStream { */ flush(false); out.write(source, sourceOffset, sourceLength); + bytesWritten += (sourceLength - sourceOffset); return; } @@ -103,7 +101,7 @@ public class BufferedOutputStream extends OutputStream { flush(false); } - int now = Math.min(sourceLength, available()); + int now = Math.min(sourceLength - done, available()); System.arraycopy(source, sourceOffset + done, buffer, stop, now); stop += now; done += now; @@ -245,7 +243,7 @@ public class BufferedOutputStream extends OutputStream { openCounter--; } else { closed = true; - flush(true); + flush(includingSubStream); if (includingSubStream && out != null) { out.close(); }