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();
}
/**