diff --git a/src/main/java/mpo/dayon/common/buffer/MemByteBuffer.java b/src/main/java/mpo/dayon/common/buffer/MemByteBuffer.java index 76c05733..7c5fd11b 100644 --- a/src/main/java/mpo/dayon/common/buffer/MemByteBuffer.java +++ b/src/main/java/mpo/dayon/common/buffer/MemByteBuffer.java @@ -10,7 +10,6 @@ public class MemByteBuffer extends OutputStream { private static final int DEFAULT_INITIAL_CAPACITY = 32; private byte[] buffer; - private int count; public MemByteBuffer() { @@ -26,8 +25,8 @@ private MemByteBuffer(int capacity) { * the newly created buffer is adopting that byte array (!) */ public MemByteBuffer(byte[] data) { - buffer = data.clone(); count = data.length; + buffer = Arrays.copyOf(data, count); } public int size() { @@ -35,7 +34,7 @@ public int size() { } public byte[] getInternal() { - return buffer.clone(); + return Arrays.copyOf(buffer, count); } public int mark() { @@ -53,8 +52,8 @@ private void resetToMark(int mark) { * b. The 24 high-order bits of b are ignored. */ @Override - public void write(int val) { - increaseBuffer(count + 1); + public void write(int val) { + ensureCapacity(count + 1); buffer[count++] = (byte) val; } @@ -62,25 +61,24 @@ public void write(int val) { * @see #write(int) */ private void write(int val1, int val2) { - increaseBuffer(count + 2); + ensureCapacity(count + 2); buffer[count++] = (byte) val1; buffer[count++] = (byte) val2; } @Override - public void write(byte[] buffer) { + public void write(byte[] buffer) { write(buffer, 0, buffer.length); } @Override - public void write(byte[] buffer, int off, int len) { + public void write(byte[] buffer, int off, int len) { if (len == 0) { return; } - final int newCount = count + len; - increaseBuffer(newCount); + ensureCapacity(count + len); System.arraycopy(buffer, off, this.buffer, count, len); - count = newCount; + count += len; } /** @@ -107,22 +105,20 @@ public void writeLenAsShort(int mark) { } public void fill(int len, int val) { - final int newCount = count + len; - increaseBuffer(newCount); - Arrays.fill(buffer, count, newCount, (byte) val); - count = newCount; + ensureCapacity(count + len); + Arrays.fill(buffer, count, count + len, (byte) val); + count += len; } public void arraycopy(byte[] in, int start, int len) { - final int newCount = count + len; - increaseBuffer(newCount); + ensureCapacity(count + len); System.arraycopy(in, start, buffer, count, len); - count = newCount; + count += len; } - private void increaseBuffer(int newCount) { + private void ensureCapacity(int newCount) { if (newCount > buffer.length) { buffer = Arrays.copyOf(buffer, Math.max(buffer.length << 1, newCount)); } } -} +} \ No newline at end of file diff --git a/src/main/java/mpo/dayon/common/capture/Capture.java b/src/main/java/mpo/dayon/common/capture/Capture.java index 869467ec..2eca2d96 100644 --- a/src/main/java/mpo/dayon/common/capture/Capture.java +++ b/src/main/java/mpo/dayon/common/capture/Capture.java @@ -129,7 +129,7 @@ public void mergeDirtyTiles(Capture[] olders) { } skipped.addAndGet(xskipped); merged.set(1 + xmerged); - Log.warn(String.format("Merged [id:%d] [count:%d] [skipped:%d][merged:%d]", id, olders.length, skipped.get(), merged.get())); + Log.warn(String.format("Merged [id:%d][count:%d][skipped:%d][merged:%d]", id, olders.length, skipped.get(), merged.get())); } /** @@ -163,9 +163,7 @@ private void doMergeDirtyTiles(Capture older) { */ public AbstractMap.SimpleEntry createBufferedImage(byte[] prevBuffer, int prevWidth, int prevHeight) { final boolean isGray = stream(dirty) - .parallel() - .filter(Objects::nonNull) - .anyMatch(tile -> tile.getCapture().size() == tile.getWidth() * tile.getHeight()); + .anyMatch(tile -> tile != null && tile.getCapture().size() == tile.getWidth() * tile.getHeight()); return isGray ? createBufferedMonochromeImage(prevBuffer, prevWidth, prevHeight) : createBufferedColorImage(prevBuffer, prevWidth, prevHeight); }