From ff382aff859188a97426a9e54ceeec858a506384 Mon Sep 17 00:00:00 2001 From: Looly Date: Tue, 18 Apr 2023 18:21:15 +0800 Subject: [PATCH] fix code --- .../hutool/core/io/buffer/FastByteBuffer.java | 19 +++++++++++++++++++ .../io/stream/FastByteArrayOutputStream.java | 10 ++++++++++ .../hutool/core/io/stream/StreamReader.java | 2 +- 3 files changed, 30 insertions(+), 1 deletion(-) diff --git a/hutool-core/src/main/java/org/dromara/hutool/core/io/buffer/FastByteBuffer.java b/hutool-core/src/main/java/org/dromara/hutool/core/io/buffer/FastByteBuffer.java index 23b89d2a1..ebecfe32d 100644 --- a/hutool-core/src/main/java/org/dromara/hutool/core/io/buffer/FastByteBuffer.java +++ b/hutool-core/src/main/java/org/dromara/hutool/core/io/buffer/FastByteBuffer.java @@ -12,6 +12,8 @@ package org.dromara.hutool.core.io.buffer; +import org.dromara.hutool.core.io.IORuntimeException; + /** * 代码移植自blade
* 快速缓冲,将数据存放在缓冲集中,取代以往的单一数组 @@ -264,6 +266,23 @@ public class FastByteBuffer { return array; } + /** + * 返回快速缓冲中的数据,如果缓冲区中的数据长度固定,则直接返回原始数组
+ * 注意此方法共享数组,不能修改数组内容! + * + * @return 快速缓冲中的数据 + */ + public byte[] toArrayZeroCopyIfPossible() { + if(1 == currentBufferIndex){ + final int len = buffers[0].length; + if(len == size){ + return buffers[0]; + } + } + + return toArray(); + } + /** * 返回快速缓冲中的数据 * diff --git a/hutool-core/src/main/java/org/dromara/hutool/core/io/stream/FastByteArrayOutputStream.java b/hutool-core/src/main/java/org/dromara/hutool/core/io/stream/FastByteArrayOutputStream.java index b1e11f340..6280a73f5 100644 --- a/hutool-core/src/main/java/org/dromara/hutool/core/io/stream/FastByteArrayOutputStream.java +++ b/hutool-core/src/main/java/org/dromara/hutool/core/io/stream/FastByteArrayOutputStream.java @@ -120,6 +120,16 @@ public class FastByteArrayOutputStream extends OutputStream { return buffer.toArray(); } + /** + * 转为Byte数组,如果缓冲区中的数据长度固定,则直接返回原始数组
+ * 注意此方法共享数组,不能修改数组内容! + * + * @return Byte数组 + */ + public byte[] toByteArrayZeroCopyIfPossible() { + return buffer.toArrayZeroCopyIfPossible(); + } + @Override public String toString() { return toString(CharsetUtil.defaultCharset()); diff --git a/hutool-core/src/main/java/org/dromara/hutool/core/io/stream/StreamReader.java b/hutool-core/src/main/java/org/dromara/hutool/core/io/stream/StreamReader.java index 8978ffc72..255fe2d0c 100644 --- a/hutool-core/src/main/java/org/dromara/hutool/core/io/stream/StreamReader.java +++ b/hutool-core/src/main/java/org/dromara/hutool/core/io/stream/StreamReader.java @@ -76,7 +76,7 @@ public class StreamReader { } //noinspection resource - return read(length).toByteArray(); + return read(length).toByteArrayZeroCopyIfPossible(); } /**