From 9b4433fddf5b401edb0aace8a404ac733b122702 Mon Sep 17 00:00:00 2001 From: 田源 <tianyuan@vci-tech.com> Date: 星期四, 03 四月 2025 14:35:02 +0800 Subject: [PATCH] 添加非密字段显示 --- Source/BladeX-Tool/blade-core-tool/src/main/java/org/springblade/core/tool/support/FastStringWriter.java | 255 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 255 insertions(+), 0 deletions(-) diff --git a/Source/BladeX-Tool/blade-core-tool/src/main/java/org/springblade/core/tool/support/FastStringWriter.java b/Source/BladeX-Tool/blade-core-tool/src/main/java/org/springblade/core/tool/support/FastStringWriter.java new file mode 100644 index 0000000..3adcada --- /dev/null +++ b/Source/BladeX-Tool/blade-core-tool/src/main/java/org/springblade/core/tool/support/FastStringWriter.java @@ -0,0 +1,255 @@ +/* + * Copyright (c) 2018-2028, DreamLu All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * Neither the name of the dreamlu.net developer nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * Author: DreamLu 鍗㈡槬姊� (596392912@qq.com) + */ +package org.springblade.core.tool.support; + + +import org.springblade.core.tool.utils.StringPool; + +import java.io.IOException; +import java.io.Writer; +import java.util.Arrays; + +/** + * FastStringWriter锛屾洿鏀逛簬 jdk CharArrayWriter + * + * <p> + * 1. 鍘绘帀浜嗛攣 + * 2. 鍒濆瀹归噺鐢� 32 鏀逛负 64 + * </p> + * + * @author L.cm + */ +public class FastStringWriter extends Writer { + /** + * The buffer where data is stored. + */ + private char[] buf; + /** + * The number of chars in the buffer. + */ + private int count; + + /** + * Creates a new CharArrayWriter. + */ + public FastStringWriter() { + this(64); + } + + /** + * Creates a new CharArrayWriter with the specified initial size. + * + * @param initialSize an int specifying the initial buffer size. + * @throws IllegalArgumentException if initialSize is negative + */ + public FastStringWriter(int initialSize) { + if (initialSize < 0) { + throw new IllegalArgumentException("Negative initial size: " + initialSize); + } + buf = new char[initialSize]; + } + + /** + * Writes a character to the buffer. + */ + @Override + public void write(int c) { + int newCount = count + 1; + if (newCount > buf.length) { + buf = Arrays.copyOf(buf, Math.max(buf.length << 1, newCount)); + } + buf[count] = (char) c; + count = newCount; + } + + /** + * Writes characters to the buffer. + * + * @param c the data to be written + * @param off the start offset in the data + * @param len the number of chars that are written + */ + @Override + public void write(char[] c, int off, int len) { + if ((off < 0) || (off > c.length) || (len < 0) || + ((off + len) > c.length) || ((off + len) < 0)) { + throw new IndexOutOfBoundsException(); + } else if (len == 0) { + return; + } + int newCount = count + len; + if (newCount > buf.length) { + buf = Arrays.copyOf(buf, Math.max(buf.length << 1, newCount)); + } + System.arraycopy(c, off, buf, count, len); + count = newCount; + } + + /** + * Write a portion of a string to the buffer. + * + * @param str String to be written from + * @param off Offset from which to start reading characters + * @param len Number of characters to be written + */ + @Override + public void write(String str, int off, int len) { + int newCount = count + len; + if (newCount > buf.length) { + buf = Arrays.copyOf(buf, Math.max(buf.length << 1, newCount)); + } + str.getChars(off, off + len, buf, count); + count = newCount; + } + + /** + * Writes the contents of the buffer to another character stream. + * + * @param out the output stream to write to + * @throws IOException If an I/O error occurs. + */ + public void writeTo(Writer out) throws IOException { + out.write(buf, 0, count); + } + + /** + * Appends the specified character sequence to this writer. + * + * <p> An invocation of this method of the form <tt>out.append(csq)</tt> + * behaves in exactly the same way as the invocation + * + * <pre> + * out.write(csq.toString()) </pre> + * + * <p> Depending on the specification of <tt>toString</tt> for the + * character sequence <tt>csq</tt>, the entire sequence may not be + * appended. For instance, invoking the <tt>toString</tt> method of a + * character buffer will return a subsequence whose content depends upon + * the buffer's position and limit. + * + * @param csq The character sequence to append. If <tt>csq</tt> is + * <tt>null</tt>, then the four characters <tt>"null"</tt> are + * appended to this writer. + * @return This writer + */ + @Override + public FastStringWriter append(CharSequence csq) { + String s = (csq == null ? StringPool.NULL : csq.toString()); + write(s, 0, s.length()); + return this; + } + + /** + * Appends a subsequence of the specified character sequence to this writer. + * + * <p> An invocation of this method of the form <tt>out.append(csq, start, + * end)</tt> when <tt>csq</tt> is not <tt>null</tt>, behaves in + * exactly the same way as the invocation + * + * <pre> + * out.write(csq.subSequence(start, end).toString()) </pre> + * + * @param csq The character sequence from which a subsequence will be + * appended. If <tt>csq</tt> is <tt>null</tt>, then characters + * will be appended as if <tt>csq</tt> contained the four + * characters <tt>"null"</tt>. + * @param start The index of the first character in the subsequence + * @param end The index of the character following the last character in the + * subsequence + * @return This writer + * @throws IndexOutOfBoundsException If <tt>start</tt> or <tt>end</tt> are negative, <tt>start</tt> + * is greater than <tt>end</tt>, or <tt>end</tt> is greater than + * <tt>csq.length()</tt> + */ + @Override + public FastStringWriter append(CharSequence csq, int start, int end) { + String s = (csq == null ? StringPool.NULL : csq).subSequence(start, end).toString(); + write(s, 0, s.length()); + return this; + } + + /** + * Appends the specified character to this writer. + * + * <p> An invocation of this method of the form <tt>out.append(c)</tt> + * behaves in exactly the same way as the invocation + * + * <pre> + * out.write(c) </pre> + * + * @param c The 16-bit character to append + * @return This writer + */ + @Override + public FastStringWriter append(char c) { + write(c); + return this; + } + + /** + * Resets the buffer so that you can use it again without + * throwing away the already allocated buffer. + */ + public void reset() { + count = 0; + } + + /** + * Returns a copy of the input data. + * + * @return an array of chars copied from the input data. + */ + public char[] toCharArray() { + return Arrays.copyOf(buf, count); + } + + /** + * Returns the current size of the buffer. + * + * @return an int representing the current size of the buffer. + */ + public int size() { + return count; + } + + /** + * Converts input data to a string. + * + * @return the string. + */ + @Override + public String toString() { + return new String(buf, 0, count); + } + + /** + * Flush the stream. + */ + @Override + public void flush() { + } + + /** + * Close the stream. This method does not release the buffer, since its + * contents might still be required. Note: Invoking this method in this class + * will have no effect. + */ + @Override + public void close() { + } + +} -- Gitblit v1.9.3