diff --git a/hutool-core/src/main/java/org/dromara/hutool/core/bean/BeanDesc.java b/hutool-core/src/main/java/org/dromara/hutool/core/bean/BeanDesc.java
index d03c27233..781216a9e 100644
--- a/hutool-core/src/main/java/org/dromara/hutool/core/bean/BeanDesc.java
+++ b/hutool-core/src/main/java/org/dromara/hutool/core/bean/BeanDesc.java
@@ -156,7 +156,8 @@ public class BeanDesc implements Serializable {
PropDesc prop;
for (final Field field : FieldUtil.getFields(this.beanClass)) {
// 排除静态属性和对象子类
- if (!ModifierUtil.isStatic(field) && !FieldUtil.isOuterClassField(field)) {
+ if (!ModifierUtil.isStatic(field) &&
+ !FieldUtil.isOuterClassField(field)) {
prop = createProp(field, gettersAndSetters);
// 只有不存在时才放入,防止父类属性覆盖子类属性
this.propMap.putIfAbsent(prop.getFieldName(), prop);
diff --git a/hutool-core/src/main/java/org/dromara/hutool/core/io/BufferUtil.java b/hutool-core/src/main/java/org/dromara/hutool/core/io/buffer/BufferUtil.java
similarity index 98%
rename from hutool-core/src/main/java/org/dromara/hutool/core/io/BufferUtil.java
rename to hutool-core/src/main/java/org/dromara/hutool/core/io/buffer/BufferUtil.java
index d72e6ebfb..d384ec342 100644
--- a/hutool-core/src/main/java/org/dromara/hutool/core/io/BufferUtil.java
+++ b/hutool-core/src/main/java/org/dromara/hutool/core/io/buffer/BufferUtil.java
@@ -10,7 +10,7 @@
* See the Mulan PSL v2 for more details.
*/
-package org.dromara.hutool.core.io;
+package org.dromara.hutool.core.io.buffer;
import org.dromara.hutool.core.text.StrUtil;
import org.dromara.hutool.core.util.ByteUtil;
@@ -23,7 +23,7 @@ import java.nio.charset.Charset;
import java.util.Arrays;
/**
- * {@link ByteBuffer} 工具类
+ * {@link ByteBuffer} 、{@link CharBuffer}工具类
* 此工具来自于 t-io 项目以及其它项目的相关部分收集
* ByteBuffer的相关介绍见:https://www.cnblogs.com/ruber/p/6857159.html
*
diff --git a/hutool-core/src/main/java/org/dromara/hutool/core/io/FastByteBuffer.java b/hutool-core/src/main/java/org/dromara/hutool/core/io/buffer/FastByteBuffer.java
similarity index 93%
rename from hutool-core/src/main/java/org/dromara/hutool/core/io/FastByteBuffer.java
rename to hutool-core/src/main/java/org/dromara/hutool/core/io/buffer/FastByteBuffer.java
index af3ce180f..23b89d2a1 100644
--- a/hutool-core/src/main/java/org/dromara/hutool/core/io/FastByteBuffer.java
+++ b/hutool-core/src/main/java/org/dromara/hutool/core/io/buffer/FastByteBuffer.java
@@ -10,7 +10,7 @@
* See the Mulan PSL v2 for more details.
*/
-package org.dromara.hutool.core.io;
+package org.dromara.hutool.core.io.buffer;
/**
* 代码移植自blade
@@ -51,12 +51,20 @@ public class FastByteBuffer {
*/
private final int minChunkLen;
+ /**
+ * 构造
+ */
public FastByteBuffer() {
this(1024);
}
+ /**
+ * 构造
+ *
+ * @param size 一个缓冲区的最小字节数
+ */
public FastByteBuffer(int size) {
- if(size <= 0){
+ if (size <= 0) {
size = 1024;
}
this.minChunkLen = Math.abs(size);
@@ -90,8 +98,8 @@ public class FastByteBuffer {
* 向快速缓冲加入数据
*
* @param array 数据
- * @param off 偏移量
- * @param len 字节数
+ * @param off 偏移量
+ * @param len 字节数
* @return 快速缓冲自身 @see FastByteBuffer
*/
public FastByteBuffer append(final byte[] array, final int off, final int len) {
@@ -134,7 +142,6 @@ public class FastByteBuffer {
* 向快速缓冲加入数据
*
* @param array 数据
- *
* @return 快速缓冲自身 @see FastByteBuffer
*/
public FastByteBuffer append(final byte[] array) {
@@ -176,10 +183,20 @@ public class FastByteBuffer {
return this;
}
+ /**
+ * 长度
+ *
+ * @return 长度
+ */
public int size() {
return size;
}
+ /**
+ * 是否为空
+ *
+ * @return 是否为空
+ */
public boolean isEmpty() {
return size == 0;
}
@@ -193,6 +210,11 @@ public class FastByteBuffer {
return currentBufferIndex;
}
+ /**
+ * 获取当前缓冲偏移量
+ *
+ * @return 当前缓冲偏移量
+ */
public int offset() {
return offset;
}
@@ -207,6 +229,9 @@ public class FastByteBuffer {
return buffers[index];
}
+ /**
+ * 复位缓冲
+ */
public void reset() {
size = 0;
offset = 0;
@@ -243,7 +268,7 @@ public class FastByteBuffer {
* 返回快速缓冲中的数据
*
* @param start 逻辑起始位置
- * @param len 逻辑字节长
+ * @param len 逻辑字节长
* @return 快速缓冲中的数据
*/
public byte[] toArray(int start, final int len) {
diff --git a/hutool-core/src/main/java/org/dromara/hutool/core/io/buffer/package-info.java b/hutool-core/src/main/java/org/dromara/hutool/core/io/buffer/package-info.java
new file mode 100644
index 000000000..7d0fcafc1
--- /dev/null
+++ b/hutool-core/src/main/java/org/dromara/hutool/core/io/buffer/package-info.java
@@ -0,0 +1,18 @@
+/*
+ * Copyright (c) 2023 looly(loolly@aliyun.com)
+ * Hutool is licensed under Mulan PSL v2.
+ * You can use this software according to the terms and conditions of the Mulan PSL v2.
+ * You may obtain a copy of Mulan PSL v2 at:
+ * http://license.coscl.org.cn/MulanPSL2
+ * THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND,
+ * EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT,
+ * MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
+ * See the Mulan PSL v2 for more details.
+ */
+
+/**
+ * {@link java.nio.Buffer}相关工具封装
+ *
+ * @author looly
+ */
+package org.dromara.hutool.core.io.buffer;
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 cc7498444..b1e11f340 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
@@ -12,7 +12,7 @@
package org.dromara.hutool.core.io.stream;
-import org.dromara.hutool.core.io.FastByteBuffer;
+import org.dromara.hutool.core.io.buffer.FastByteBuffer;
import org.dromara.hutool.core.io.IORuntimeException;
import org.dromara.hutool.core.util.CharsetUtil;
import org.dromara.hutool.core.util.ObjUtil;
@@ -62,6 +62,11 @@ public class FastByteArrayOutputStream extends OutputStream {
buffer.append((byte) b);
}
+ /**
+ * 长度
+ *
+ * @return 长度
+ */
public int size() {
return buffer.size();
}
@@ -74,18 +79,22 @@ public class FastByteArrayOutputStream extends OutputStream {
// nop
}
+ /**
+ * 复位
+ */
public void reset() {
buffer.reset();
}
/**
* 写出
+ *
* @param out 输出流
* @throws IORuntimeException IO异常
*/
public void writeTo(final OutputStream out) throws IORuntimeException {
final int index = buffer.index();
- if(index < 0){
+ if (index < 0) {
// 无数据写出
return;
}
@@ -104,6 +113,7 @@ public class FastByteArrayOutputStream extends OutputStream {
/**
* 转为Byte数组
+ *
* @return Byte数组
*/
public byte[] toByteArray() {
@@ -117,12 +127,13 @@ public class FastByteArrayOutputStream extends OutputStream {
/**
* 转为字符串
+ *
* @param charset 编码,null表示默认编码
* @return 字符串
*/
public String toString(final Charset charset) {
return new String(toByteArray(),
- ObjUtil.defaultIfNull(charset, CharsetUtil::defaultCharset));
+ ObjUtil.defaultIfNull(charset, CharsetUtil::defaultCharset));
}
}
diff --git a/hutool-core/src/main/java/org/dromara/hutool/core/reflect/MethodUtil.java b/hutool-core/src/main/java/org/dromara/hutool/core/reflect/MethodUtil.java
index 0c6e31d25..3f528aca4 100644
--- a/hutool-core/src/main/java/org/dromara/hutool/core/reflect/MethodUtil.java
+++ b/hutool-core/src/main/java/org/dromara/hutool/core/reflect/MethodUtil.java
@@ -24,6 +24,7 @@ import org.dromara.hutool.core.lang.Singleton;
import org.dromara.hutool.core.map.WeakConcurrentMap;
import org.dromara.hutool.core.text.StrUtil;
import org.dromara.hutool.core.array.ArrayUtil;
+import org.dromara.hutool.core.util.BooleanUtil;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
@@ -215,10 +216,10 @@ public class MethodUtil {
if (ArrayUtil.isNotEmpty(methods)) {
for (final Method method : methods) {
if (StrUtil.equals(methodName, method.getName(), ignoreCase)
- && ClassUtil.isAllAssignableFrom(method.getParameterTypes(), paramTypes)
- //排除桥接方法,pr#1965@Github
- //排除协变桥接方法,pr#1965@Github
- && (res == null || res.getReturnType().isAssignableFrom(method.getReturnType()))) {
+ && ClassUtil.isAllAssignableFrom(method.getParameterTypes(), paramTypes)
+ //排除桥接方法,pr#1965@Github
+ //排除协变桥接方法,pr#1965@Github
+ && (res == null || res.getReturnType().isAssignableFrom(method.getReturnType()))) {
res = method;
}
}
@@ -284,8 +285,8 @@ public class MethodUtil {
if (ArrayUtil.isNotEmpty(methods)) {
for (final Method method : methods) {
if (StrUtil.equals(methodName, method.getName(), ignoreCase)
- //排除协变桥接方法,pr#1965@Github
- && (res == null || res.getReturnType().isAssignableFrom(method.getReturnType()))) {
+ //排除协变桥接方法,pr#1965@Github
+ && (res == null || res.getReturnType().isAssignableFrom(method.getReturnType()))) {
res = method;
}
}
@@ -335,7 +336,7 @@ public class MethodUtil {
public static Method[] getMethods(final Class> beanClass) throws SecurityException {
Assert.notNull(beanClass);
return METHODS_CACHE.computeIfAbsent(beanClass,
- (key) -> getMethodsDirectly(beanClass, true, true));
+ (key) -> getMethodsDirectly(beanClass, true, true));
}
/**
@@ -348,7 +349,7 @@ public class MethodUtil {
public static Method[] getDeclaredMethods(final Class> beanClass) throws SecurityException {
Assert.notNull(beanClass);
return DECLARED_METHODS_CACHE.computeIfAbsent(beanClass,
- key -> getMethodsDirectly(beanClass, false, Objects.equals(Object.class, beanClass)));
+ key -> getMethodsDirectly(beanClass, false, Objects.equals(Object.class, beanClass)));
}
/**
@@ -398,8 +399,8 @@ public class MethodUtil {
*/
public static boolean isEqualsMethod(final Method method) {
if (method == null ||
- 1 != method.getParameterCount() ||
- !"equals".equals(method.getName())) {
+ 1 != method.getParameterCount() ||
+ !"equals".equals(method.getName())) {
return false;
}
return (method.getParameterTypes()[0] == Object.class);
@@ -413,8 +414,8 @@ public class MethodUtil {
*/
public static boolean isHashCodeMethod(final Method method) {
return method != null//
- && "hashCode".equals(method.getName())//
- && isEmptyParam(method);
+ && "hashCode".equals(method.getName())//
+ && isEmptyParam(method);
}
/**
@@ -425,8 +426,8 @@ public class MethodUtil {
*/
public static boolean isToStringMethod(final Method method) {
return method != null//
- && "toString".equals(method.getName())//
- && isEmptyParam(method);
+ && "toString".equals(method.getName())//
+ && isEmptyParam(method);
}
/**
@@ -471,32 +472,91 @@ public class MethodUtil {
* @since 5.7.20
*/
public static boolean isGetterOrSetter(final Method method, final boolean ignoreCase) {
+ // 参数个数必须为1
+ final int parameterCount = method.getParameterCount();
+ switch (parameterCount){
+ case 0:
+ return isGetter(method, ignoreCase);
+ case 1:
+ return isSetter(method, ignoreCase);
+ default:
+ return false;
+ }
+ }
+
+ /**
+ * 检查给定方法是否为Setter方法,规则为:
+ *