diff --git a/hutool-core/src/main/java/org/dromara/hutool/core/io/NioUtil.java b/hutool-core/src/main/java/org/dromara/hutool/core/io/NioUtil.java
index c794fc425..3cb351332 100644
--- a/hutool-core/src/main/java/org/dromara/hutool/core/io/NioUtil.java
+++ b/hutool-core/src/main/java/org/dromara/hutool/core/io/NioUtil.java
@@ -41,6 +41,11 @@ import java.nio.charset.Charset;
*/
public class NioUtil {
+ /**
+ * 默认小缓存大小 1024
+ */
+ public static final int DEFAULT_SMALL_BUFFER_SIZE = 2 << 9;
+
/**
* 默认缓存大小 8192
*/
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 da978d5dc..5255152b6 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
@@ -41,7 +41,7 @@ public class FastByteBuffer extends FastBuffer {
* 构造
*/
public FastByteBuffer() {
- this(IoUtil.DEFAULT_BUFFER_SIZE);
+ this(IoUtil.DEFAULT_SMALL_BUFFER_SIZE);
}
/**
diff --git a/hutool-core/src/main/java/org/dromara/hutool/core/io/buffer/FastCharBuffer.java b/hutool-core/src/main/java/org/dromara/hutool/core/io/buffer/FastCharBuffer.java
index f543b6729..7eb759230 100644
--- a/hutool-core/src/main/java/org/dromara/hutool/core/io/buffer/FastCharBuffer.java
+++ b/hutool-core/src/main/java/org/dromara/hutool/core/io/buffer/FastCharBuffer.java
@@ -21,7 +21,8 @@ import org.dromara.hutool.core.lang.Assert;
/**
* 代码移植自jetbrick
- * 快速字符缓冲,将数据存放在缓冲集中,取代以往的单一数组
+ * 快速字符缓冲,将数据存放在缓冲集中,取代以往的单一数组
+ * 注意:此缓存在大量重复append时,性能比{@link StringBuilder}要好,但是{@link #toArray()}性能很差
*
* @author jetbrick, looly
*/
@@ -40,7 +41,7 @@ public class FastCharBuffer extends FastBuffer implements CharSequence, Appendab
* 构造
*/
public FastCharBuffer() {
- this(IoUtil.DEFAULT_BUFFER_SIZE);
+ this(IoUtil.DEFAULT_SMALL_BUFFER_SIZE);
}
/**
diff --git a/hutool-core/src/test/java/org/dromara/hutool/core/io/BufferUtilTest.java b/hutool-core/src/test/java/org/dromara/hutool/core/io/buffer/BufferUtilTest.java
similarity index 96%
rename from hutool-core/src/test/java/org/dromara/hutool/core/io/BufferUtilTest.java
rename to hutool-core/src/test/java/org/dromara/hutool/core/io/buffer/BufferUtilTest.java
index 72f565cde..63530e36c 100644
--- a/hutool-core/src/test/java/org/dromara/hutool/core/io/BufferUtilTest.java
+++ b/hutool-core/src/test/java/org/dromara/hutool/core/io/buffer/BufferUtilTest.java
@@ -14,16 +14,15 @@
* limitations under the License.
*/
-package org.dromara.hutool.core.io;
+package org.dromara.hutool.core.io.buffer;
-import java.nio.ByteBuffer;
-
-import org.dromara.hutool.core.io.buffer.BufferUtil;
import org.dromara.hutool.core.text.StrUtil;
import org.dromara.hutool.core.util.CharsetUtil;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;
+import java.nio.ByteBuffer;
+
/**
* BufferUtil单元测试
*
diff --git a/hutool-core/src/test/java/org/dromara/hutool/core/io/buffer/CharBufferJmh.java b/hutool-core/src/test/java/org/dromara/hutool/core/io/buffer/CharBufferJmh.java
new file mode 100644
index 000000000..7dcda187a
--- /dev/null
+++ b/hutool-core/src/test/java/org/dromara/hutool/core/io/buffer/CharBufferJmh.java
@@ -0,0 +1,40 @@
+package org.dromara.hutool.core.io.buffer;
+
+import org.openjdk.jmh.annotations.*;
+
+import java.util.concurrent.TimeUnit;
+
+@BenchmarkMode(Mode.AverageTime)//每次执行平均花费时间
+@Warmup(iterations = 1, time = 1, timeUnit = TimeUnit.SECONDS) //预热1次调用
+@Measurement(iterations = 5, time = 1, timeUnit = TimeUnit.SECONDS) // 执行5此,每次1秒
+@Threads(1) //单线程
+@Fork(1) //
+@OutputTimeUnit(TimeUnit.NANOSECONDS) // 单位:纳秒
+@State(Scope.Benchmark) // 共享域
+public class CharBufferJmh {
+
+ private final int appendCount = 10000;
+ private String str;
+
+ @Setup
+ public void setup() {
+ str = "abc123你好";
+ }
+
+ @SuppressWarnings("MismatchedQueryAndUpdateOfStringBuilder")
+ @Benchmark
+ public void stringBuilderJmh() {
+ final StringBuilder stringBuilder = new StringBuilder(1024);
+ for (int i = 0; i < appendCount; i++) {
+ stringBuilder.append(str);
+ }
+ }
+
+ @Benchmark
+ public void fastCharBufferJmh() {
+ final FastCharBuffer fastCharBuffer = new FastCharBuffer(1024);
+ for (int i = 0; i < appendCount; i++) {
+ fastCharBuffer.append(str);
+ }
+ }
+}