From 50f76a2e82bbcc97665d320350aa0ead9bbc101b Mon Sep 17 00:00:00 2001 From: "calvin.xiao" Date: Mon, 7 Dec 2015 21:42:57 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0StringBuilderHolder=EF=BC=8C?= =?UTF-8?q?=E5=8F=AF=E9=87=8D=E7=94=A8=E7=9A=84StringBuilder=EF=BC=88?= =?UTF-8?q?=E5=8F=8A=E5=85=B6char[]=EF=BC=89=EF=BC=8C=E5=8F=AF=E9=85=8D?= =?UTF-8?q?=E5=90=88ThreadLocal=E4=BD=BF=E7=94=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../modules/utils/StringBuilderHolder.java | 38 +++++++++++++++++++ 1 file changed, 38 insertions(+) create mode 100644 modules/utils/src/main/java/org/springside/modules/utils/StringBuilderHolder.java diff --git a/modules/utils/src/main/java/org/springside/modules/utils/StringBuilderHolder.java b/modules/utils/src/main/java/org/springside/modules/utils/StringBuilderHolder.java new file mode 100644 index 00000000..6174e840 --- /dev/null +++ b/modules/utils/src/main/java/org/springside/modules/utils/StringBuilderHolder.java @@ -0,0 +1,38 @@ +package org.springside.modules.utils; + +/** + * 参考BigDecimal, 可重用的StringBuilder, 节约StringBuilder内部的char[] + * + * 参考下面的示例代码将其保存为ThreadLocal. + * + *
+ * private static final ThreadLocal threadLocalStringBuilderHolder = new ThreadLocal() {
+ * 	@Override
+ * 	protected StringBuilderHelper initialValue() {
+ * 		return new StringBuilderHelper(256);
+ * 	}
+ * };
+ * 
+ * StringBuilder sb = threadLocalStringBuilderHolder.get().resetAndGetStringBuilder();
+ * 
+ * 
+ * + * @author calvin + * + */ +public class StringBuilderHolder { + + private final StringBuilder sb; + + public StringBuilderHolder(int capacity) { + sb = new StringBuilder(capacity); + } + + /** + * 重置StringBuilder内部的writerIndex, 而char[]保留不动. + */ + public StringBuilder resetAndGetStringBuilder() { + sb.setLength(0); + return sb; + } +} \ No newline at end of file