diff --git a/README.md b/README.md index 8921e04d66..55cbfbb78b 100755 --- a/README.md +++ b/README.md @@ -6,7 +6,7 @@

- + @@ -15,7 +15,7 @@ - + @@ -97,7 +97,7 @@ Bus (应用/服务总线) 是一个基础框架、服务套件,它基于Java17 org.aoju bus-all - 6.5.3 + 6.5.5 ``` diff --git a/bus-all/pom.xml b/bus-all/pom.xml index c96025fa45..8500efd6ae 100755 --- a/bus-all/pom.xml +++ b/bus-all/pom.xml @@ -6,11 +6,11 @@ org.aoju bus-all - 6.5.3 + 6.5.5 jar ${project.artifactId} - Bus All + Bus All In One https://github.com/aoju/bus diff --git a/bus-base/pom.xml b/bus-base/pom.xml index ed829571fd..5b0a51dd83 100755 --- a/bus-base/pom.xml +++ b/bus-base/pom.xml @@ -6,7 +6,7 @@ org.aoju bus-base - 6.5.3 + 6.5.5 jar ${project.artifactId} diff --git a/bus-base/src/main/java/org/aoju/bus/base/advice/ErrorAdvice.java b/bus-base/src/main/java/org/aoju/bus/base/advice/ErrorAdvice.java index 9e24875f25..77f82b6cf8 100755 --- a/bus-base/src/main/java/org/aoju/bus/base/advice/ErrorAdvice.java +++ b/bus-base/src/main/java/org/aoju/bus/base/advice/ErrorAdvice.java @@ -26,7 +26,6 @@ package org.aoju.bus.base.advice; import org.aoju.bus.base.service.ErrorService; -import org.aoju.bus.core.toolkit.ObjectKit; import org.aoju.bus.core.toolkit.RuntimeKit; import org.aoju.bus.logger.Logger; import org.aoju.bus.spring.SpringBuilder; @@ -48,16 +47,17 @@ public class ErrorAdvice { * @return 如果执行链应该继续执行, 则为:true 否则:false */ public boolean handler(Exception ex) { + ErrorService errorService = null; try { - ErrorService errorService = SpringBuilder.getBean(ErrorService.class); - if (ObjectKit.isNotNull(errorService)) { - errorService.before(ex); - errorService.after(ex); - } else { - Logger.error(RuntimeKit.getStackTrace(ex)); - } + errorService = SpringBuilder.getBean(ErrorService.class); } catch (RuntimeException ignore) { - return false; + + } + if (null != errorService) { + errorService.before(ex); + errorService.after(ex); + } else { + Logger.error(RuntimeKit.getStackTrace(ex)); } return true; } diff --git a/bus-bom/pom.xml b/bus-bom/pom.xml index e7fc59f409..a9058ae3a3 100755 --- a/bus-bom/pom.xml +++ b/bus-bom/pom.xml @@ -6,7 +6,7 @@ org.aoju bus-bom - 6.5.3 + 6.5.5 pom ${project.artifactId} diff --git a/bus-cache/pom.xml b/bus-cache/pom.xml index 6774f60c3c..dfb1291329 100755 --- a/bus-cache/pom.xml +++ b/bus-cache/pom.xml @@ -6,7 +6,7 @@ org.aoju bus-cache - 6.5.3 + 6.5.5 jar ${project.artifactId} diff --git a/bus-cache/src/main/java/org/aoju/bus/cache/Module.java b/bus-cache/src/main/java/org/aoju/bus/cache/Module.java index 70e5c0399d..dd661f5be5 100755 --- a/bus-cache/src/main/java/org/aoju/bus/cache/Module.java +++ b/bus-cache/src/main/java/org/aoju/bus/cache/Module.java @@ -25,7 +25,6 @@ ********************************************************************************/ package org.aoju.bus.cache; -import com.google.common.base.Preconditions; import com.google.inject.AbstractModule; import com.google.inject.Guice; import com.google.inject.Injector; @@ -34,6 +33,7 @@ import org.aoju.bus.cache.magic.AbstractReader; import org.aoju.bus.cache.magic.MultiCacheReader; import org.aoju.bus.cache.magic.SingleCacheReader; +import org.aoju.bus.core.lang.Assert; import org.aoju.bus.core.toolkit.CollKit; import java.util.Optional; @@ -67,8 +67,8 @@ public synchronized static Complex coreInstance(Context config) { */ @Override protected void configure() { - Preconditions.checkArgument(null != config, "config param can not be null."); - Preconditions.checkArgument(CollKit.isNotEmpty(config.getCaches()), "caches param can not be empty."); + Assert.isTrue(null != config, "config param can not be null."); + Assert.isTrue(CollKit.isNotEmpty(config.getCaches()), "caches param can not be empty."); bind(Context.class).toInstance(config); diff --git a/bus-cache/src/main/java/org/aoju/bus/cache/metric/EhCache.java b/bus-cache/src/main/java/org/aoju/bus/cache/metric/EhCache.java index 6e90afb6ad..c0772e1c19 100755 --- a/bus-cache/src/main/java/org/aoju/bus/cache/metric/EhCache.java +++ b/bus-cache/src/main/java/org/aoju/bus/cache/metric/EhCache.java @@ -25,8 +25,8 @@ ********************************************************************************/ package org.aoju.bus.cache.metric; -import com.google.common.collect.Sets; import org.aoju.bus.cache.CacheX; +import org.aoju.bus.core.toolkit.CollKit; import org.ehcache.PersistentCacheManager; import org.ehcache.config.CacheConfiguration; import org.ehcache.config.ResourcePools; @@ -110,7 +110,7 @@ public void write(Map keyValueMap, long expire) { @Override public void remove(String... keys) { - ehcache.removeAll(Sets.newHashSet(keys)); + ehcache.removeAll(CollKit.newHashSet(keys)); } @Override diff --git a/bus-cache/src/main/java/org/aoju/bus/cache/serialize/AbstractSerializer.java b/bus-cache/src/main/java/org/aoju/bus/cache/serialize/AbstractSerializer.java index bc22e20f24..b45ebddc46 100755 --- a/bus-cache/src/main/java/org/aoju/bus/cache/serialize/AbstractSerializer.java +++ b/bus-cache/src/main/java/org/aoju/bus/cache/serialize/AbstractSerializer.java @@ -33,17 +33,17 @@ */ public abstract class AbstractSerializer implements BaseSerializer { - protected abstract byte[] doSerialize(Object obj) throws Throwable; + protected abstract byte[] doSerialize(Object object) throws Throwable; protected abstract Object doDeserialize(byte[] bytes) throws Throwable; @Override - public byte[] serialize(T obj) { - if (null == obj) { + public byte[] serialize(T object) { + if (null == object) { return null; } try { - return doSerialize(obj); + return doSerialize(object); } catch (Throwable t) { Logger.error("{} serialize error.", this.getClass().getName(), t); return null; diff --git a/bus-cache/src/main/java/org/aoju/bus/cache/serialize/BaseSerializer.java b/bus-cache/src/main/java/org/aoju/bus/cache/serialize/BaseSerializer.java index 379e063add..2f38ed9bf0 100755 --- a/bus-cache/src/main/java/org/aoju/bus/cache/serialize/BaseSerializer.java +++ b/bus-cache/src/main/java/org/aoju/bus/cache/serialize/BaseSerializer.java @@ -31,7 +31,7 @@ */ public interface BaseSerializer { - byte[] serialize(T obj); + byte[] serialize(T object); T deserialize(byte[] bytes); } diff --git a/bus-cache/src/main/java/org/aoju/bus/cache/serialize/FastJsonSerializer.java b/bus-cache/src/main/java/org/aoju/bus/cache/serialize/FastJsonSerializer.java index 6ce2cb998e..b5199e5d93 100755 --- a/bus-cache/src/main/java/org/aoju/bus/cache/serialize/FastJsonSerializer.java +++ b/bus-cache/src/main/java/org/aoju/bus/cache/serialize/FastJsonSerializer.java @@ -41,8 +41,8 @@ public FastJsonSerializer(Class type) { } @Override - protected byte[] doSerialize(Object obj) throws Throwable { - String json = JsonKit.toJsonString(obj); + protected byte[] doSerialize(Object object) throws Throwable { + String json = JsonKit.toJsonString(object); return json.getBytes(Charset.DEFAULT_UTF_8); } diff --git a/bus-cache/src/main/java/org/aoju/bus/cache/serialize/Hessian2Serializer.java b/bus-cache/src/main/java/org/aoju/bus/cache/serialize/Hessian2Serializer.java index 64801f59a9..bd6bb8ab31 100755 --- a/bus-cache/src/main/java/org/aoju/bus/cache/serialize/Hessian2Serializer.java +++ b/bus-cache/src/main/java/org/aoju/bus/cache/serialize/Hessian2Serializer.java @@ -38,10 +38,10 @@ public class Hessian2Serializer extends AbstractSerializer { @Override - protected byte[] doSerialize(Object obj) throws Throwable { + protected byte[] doSerialize(Object object) throws Throwable { try (ByteArrayOutputStream os = new ByteArrayOutputStream()) { Hessian2Output out = new Hessian2Output(os); - out.writeObject(obj); + out.writeObject(object); os.close(); return os.toByteArray(); } diff --git a/bus-cache/src/main/java/org/aoju/bus/cache/serialize/JdkGzipSerializer.java b/bus-cache/src/main/java/org/aoju/bus/cache/serialize/JdkGzipSerializer.java index f45f9e66a2..85309ad699 100755 --- a/bus-cache/src/main/java/org/aoju/bus/cache/serialize/JdkGzipSerializer.java +++ b/bus-cache/src/main/java/org/aoju/bus/cache/serialize/JdkGzipSerializer.java @@ -39,12 +39,11 @@ public class JdkGzipSerializer extends AbstractSerializer { @Override - protected byte[] doSerialize(Object obj) throws Throwable { + protected byte[] doSerialize(Object object) throws Throwable { try (ByteArrayOutputStream bos = new ByteArrayOutputStream(); GZIPOutputStream gzout = new GZIPOutputStream(bos); ObjectOutputStream out = new ObjectOutputStream(gzout)) { - - out.writeObject(obj); + out.writeObject(object); return bos.toByteArray(); } } diff --git a/bus-cache/src/main/java/org/aoju/bus/cache/serialize/JdkSerializer.java b/bus-cache/src/main/java/org/aoju/bus/cache/serialize/JdkSerializer.java index 712ce37f71..bae0ba6dbf 100755 --- a/bus-cache/src/main/java/org/aoju/bus/cache/serialize/JdkSerializer.java +++ b/bus-cache/src/main/java/org/aoju/bus/cache/serialize/JdkSerializer.java @@ -37,7 +37,7 @@ */ public class JdkSerializer extends AbstractSerializer { - private static void serialize(Serializable obj, OutputStream outputStream) { + private static void serialize(Serializable object, OutputStream outputStream) { if (null == outputStream) { throw new IllegalArgumentException("The OutputStream must not be null"); } else { @@ -45,7 +45,7 @@ private static void serialize(Serializable obj, OutputStream outputStream) { try { out = new ObjectOutputStream(outputStream); - out.writeObject(obj); + out.writeObject(object); } catch (IOException e) { throw new InstrumentException(e); } finally { @@ -86,9 +86,9 @@ private static Object deserialize(InputStream inputStream) { } @Override - protected byte[] doSerialize(Object obj) { + protected byte[] doSerialize(Object object) { ByteArrayOutputStream baos = new ByteArrayOutputStream(Normal._512); - serialize((Serializable) obj, baos); + serialize((Serializable) object, baos); return baos.toByteArray(); } diff --git a/bus-cache/src/main/java/org/aoju/bus/cache/support/Addables.java b/bus-cache/src/main/java/org/aoju/bus/cache/support/Addables.java index dfc56299c4..cf15f6fbea 100755 --- a/bus-cache/src/main/java/org/aoju/bus/cache/support/Addables.java +++ b/bus-cache/src/main/java/org/aoju/bus/cache/support/Addables.java @@ -154,7 +154,7 @@ public Addable addAll(List list) { return this; } - list.stream().map(obj -> (Map.Entry) obj).forEach(entry -> instance.put(entry.getKey(), entry.getValue())); + list.stream().map(object -> (Map.Entry) object).forEach(entry -> instance.put(entry.getKey(), entry.getValue())); return this; } diff --git a/bus-cache/src/main/java/org/aoju/bus/cache/support/CacheInfoContainer.java b/bus-cache/src/main/java/org/aoju/bus/cache/support/CacheInfoContainer.java index 0e720805af..9de6024d62 100755 --- a/bus-cache/src/main/java/org/aoju/bus/cache/support/CacheInfoContainer.java +++ b/bus-cache/src/main/java/org/aoju/bus/cache/support/CacheInfoContainer.java @@ -25,7 +25,6 @@ ********************************************************************************/ package org.aoju.bus.cache.support; -import com.google.common.base.Strings; import org.aoju.bus.cache.annotation.CacheKey; import org.aoju.bus.cache.annotation.Cached; import org.aoju.bus.cache.annotation.CachedGet; @@ -35,6 +34,7 @@ import org.aoju.bus.cache.magic.CachePair; import org.aoju.bus.cache.magic.MethodHolder; import org.aoju.bus.core.lang.Normal; +import org.aoju.bus.core.toolkit.StringKit; import org.aoju.bus.logger.Logger; import java.lang.annotation.Annotation; @@ -176,7 +176,7 @@ private static boolean isMulti(CacheKey cacheKey) { } String value = cacheKey.value(); - if (Strings.isNullOrEmpty(value)) { + if (StringKit.isEmpty(value)) { return false; } @@ -190,7 +190,7 @@ private static boolean isInvalidParam(Class[] pTypes, AnnoHolder annoHolder) return (null == pTypes || pTypes.length == 0 || cacheKeyMap.isEmpty()) - && Strings.isNullOrEmpty(prefix); + && StringKit.isEmpty(prefix); } private static boolean isInvalidMultiCount(Map keyMap) { @@ -210,16 +210,16 @@ private static boolean isInvalidMultiCount(Map keyMap) { private static boolean isInvalidIdentifier(boolean isMapReturn, boolean isCollectionReturn, String field) { - if (isMapReturn && !Strings.isNullOrEmpty(field)) { + if (isMapReturn && !StringKit.isEmpty(field)) { Logger.warn("@CacheKey's 'field = \"{}\"' is useless.", field); return false; } - return !Strings.isNullOrEmpty(field) && !isCollectionReturn; + return !StringKit.isEmpty(field) && !isCollectionReturn; } private static boolean isInvalidResult(boolean isCollectionReturn, String id) { - return isCollectionReturn && Strings.isNullOrEmpty(id); + return isCollectionReturn && StringKit.isEmpty(id); } private static boolean isInvalidMulti(Class paramType) { diff --git a/bus-cache/src/main/java/org/aoju/bus/cache/support/KeyValue.java b/bus-cache/src/main/java/org/aoju/bus/cache/support/KeyValue.java index c4e81896b5..4f61b73d5c 100755 --- a/bus-cache/src/main/java/org/aoju/bus/cache/support/KeyValue.java +++ b/bus-cache/src/main/java/org/aoju/bus/cache/support/KeyValue.java @@ -25,8 +25,8 @@ ********************************************************************************/ package org.aoju.bus.cache.support; -import com.google.common.base.Strings; import org.aoju.bus.cache.Context; +import org.aoju.bus.core.toolkit.StringKit; import java.util.Collection; import java.util.HashMap; @@ -46,7 +46,7 @@ public static Map mapToKeyValue(Map proceedEntryValueMap, Map keyValueMap = new HashMap<>(proceedEntryValueMap.size()); proceedEntryValueMap.forEach((multiArgEntry, value) -> { String key = multiEntry2Key.get(multiArgEntry); - if (Strings.isNullOrEmpty(key)) { + if (StringKit.isEmpty(key)) { return; } @@ -69,7 +69,7 @@ public static Map collectionToKeyValue(Collection proceedCollect Object id = SpelCalculator.calcSpelWithNoContext(idSpel, value); String key = id2Key.get(id); - if (!Strings.isNullOrEmpty(key)) { + if (StringKit.isEmpty(key)) { missKeys.remove(key); keyValueMap.put(key, value); } diff --git a/bus-cache/src/main/java/org/aoju/bus/cache/support/PreventObjects.java b/bus-cache/src/main/java/org/aoju/bus/cache/support/PreventObjects.java index e3a5cc9953..0062ceb271 100755 --- a/bus-cache/src/main/java/org/aoju/bus/cache/support/PreventObjects.java +++ b/bus-cache/src/main/java/org/aoju/bus/cache/support/PreventObjects.java @@ -34,18 +34,18 @@ public class PreventObjects { public static Object getPreventObject() { - return PreventObj.INSTANCE; + return PreventObject.INSTANCE; } public static boolean isPrevent(Object object) { - return object == PreventObj.INSTANCE || object instanceof PreventObj; + return object == PreventObject.INSTANCE || object instanceof PreventObject; } - private static final class PreventObj implements Serializable { + private static final class PreventObject implements Serializable { private static final long serialVersionUID = 1L; - private static final PreventObj INSTANCE = new PreventObj(); + private static final PreventObject INSTANCE = new PreventObject(); } } diff --git a/bus-cache/src/main/java/org/aoju/bus/cache/support/SpelCalculator.java b/bus-cache/src/main/java/org/aoju/bus/cache/support/SpelCalculator.java index 57a53c871e..53c473cb3e 100755 --- a/bus-cache/src/main/java/org/aoju/bus/cache/support/SpelCalculator.java +++ b/bus-cache/src/main/java/org/aoju/bus/cache/support/SpelCalculator.java @@ -25,8 +25,8 @@ ********************************************************************************/ package org.aoju.bus.cache.support; -import com.google.common.base.Preconditions; -import com.google.common.base.Strings; +import org.aoju.bus.core.lang.Assert; +import org.aoju.bus.core.toolkit.StringKit; import org.springframework.expression.EvaluationContext; import org.springframework.expression.ExpressionParser; import org.springframework.expression.spel.standard.SpelExpressionParser; @@ -43,14 +43,14 @@ public class SpelCalculator { private static final ExpressionParser parser = new SpelExpressionParser(); public static Object calcSpelValueWithContext(String spel, String[] argNames, Object[] argValues, Object defaultValue) { - if (Strings.isNullOrEmpty(spel)) { + if (StringKit.isEmpty(spel)) { return defaultValue; } // 将[参数名->参数值]导入spel环境 EvaluationContext context = new StandardEvaluationContext(); - Preconditions.checkState(argNames.length == argValues.length); + Assert.isTrue(argNames.length == argValues.length); for (int i = 0; i < argValues.length; ++i) { context.setVariable(argNames[i], argValues[i]); } @@ -65,7 +65,7 @@ public static Object calcSpelValueWithContext(String spel, String[] argNames, Ob } public static Object calcSpelWithNoContext(String spel, Object defaultValue) { - if (Strings.isNullOrEmpty(spel)) { + if (StringKit.isEmpty(spel)) { return defaultValue; } diff --git a/bus-core/README.md b/bus-core/README.md index b9af97dc07..36b449c807 100755 --- a/bus-core/README.md +++ b/bus-core/README.md @@ -14,7 +14,7 @@ org.aoju bus-core - 6.5.3 + 6.5.5 ``` diff --git a/bus-core/pom.xml b/bus-core/pom.xml index 57f8464aa0..225a294ef9 100755 --- a/bus-core/pom.xml +++ b/bus-core/pom.xml @@ -6,7 +6,7 @@ org.aoju bus-core - 6.5.3 + 6.5.5 jar ${project.artifactId} diff --git a/bus-core/src/main/java/org/aoju/bus/core/Binder.java b/bus-core/src/main/java/org/aoju/bus/core/Binder.java index 6ca0ce5550..c5bc5dc23b 100644 --- a/bus-core/src/main/java/org/aoju/bus/core/Binder.java +++ b/bus-core/src/main/java/org/aoju/bus/core/Binder.java @@ -140,7 +140,7 @@ private static boolean substringMatch(CharSequence text, int index, CharSequence * * @param clazz 类型 * @param 泛型 - * @return obj + * @return the object */ public T bind(Class clazz) { return bind(clazz, Symbol.DOT); @@ -152,12 +152,12 @@ public T bind(Class clazz) { * @param clazz 类型 * @param prefix 前缀 * @param 泛型 - * @return obj + * @return the object */ public T bind(Class clazz, String prefix) { - T obj; + T object; try { - obj = clazz.getConstructor().newInstance(); + object = clazz.getConstructor().newInstance(); } catch (Exception e) { throw new InstrumentException(e); } @@ -167,28 +167,28 @@ public T bind(Class clazz, String prefix) { if (b) { prefix = actualClass.getAnnotation(Values.class).value(); } - return clazz.cast(bind(obj, prefix)); + return clazz.cast(bind(object, prefix)); } /** * 绑定属性到对象实例 * - * @param obj 对象实例 + * @param object 对象实例 * @param prefix 属性前缀 * @param 泛型 - * @return obj + * @return the object */ - public T bind(T obj, String prefix) { + public T bind(T object, String prefix) { if (!StringKit.hasText(prefix) || Symbol.DOT.equals(prefix)) { prefix = null; } - for (Field field : ClassKit.getDeclaredFields(obj.getClass())) { - bindField(obj, field, prefix); + for (Field field : ClassKit.getDeclaredFields(object.getClass())) { + bindField(object, field, prefix); } - return obj; + return object; } - private void bindField(Object obj, Field field, String prefix) { + private void bindField(Object object, Field field, String prefix) { try { if (field.isAnnotationPresent(Ignore.class)) { return; @@ -203,15 +203,15 @@ private void bindField(Object obj, Field field, String prefix) { } Object value = getProperty(key, field.getType(), wrap); if (null != value) { - ClassKit.writeField(field, obj, value); + ClassKit.writeField(field, object, value); return; } if (!(null == field.getType().getClassLoader()) && source .containPrefix(key + Symbol.DOT)) { - value = ClassKit.readField(field, obj); + value = ClassKit.readField(field, object); if (null == value) { value = bind(field.getType(), key); - ClassKit.writeField(field, obj, value); + ClassKit.writeField(field, object, value); } else { bind(value, key); } diff --git a/bus-core/src/main/java/org/aoju/bus/core/Version.java b/bus-core/src/main/java/org/aoju/bus/core/Version.java index 45fd41d3c7..978148eeb3 100644 --- a/bus-core/src/main/java/org/aoju/bus/core/Version.java +++ b/bus-core/src/main/java/org/aoju/bus/core/Version.java @@ -60,7 +60,7 @@ public class Version { * @return 项目的版本号 */ public static String get() { - return "6.5.3.RELEASE"; + return "6.5.5.RELEASE"; } /** diff --git a/bus-core/src/main/java/org/aoju/bus/core/beans/DynamicBean.java b/bus-core/src/main/java/org/aoju/bus/core/beans/DynamicBean.java index 1702c14a35..3f1a182b90 100755 --- a/bus-core/src/main/java/org/aoju/bus/core/beans/DynamicBean.java +++ b/bus-core/src/main/java/org/aoju/bus/core/beans/DynamicBean.java @@ -202,17 +202,17 @@ public int hashCode() { } @Override - public boolean equals(Object obj) { - if (this == obj) { + public boolean equals(Object value) { + if (this == value) { return true; } - if (null == obj) { + if (null == value) { return false; } - if (getClass() != obj.getClass()) { + if (getClass() != value.getClass()) { return false; } - final DynamicBean other = (DynamicBean) obj; + final DynamicBean other = (DynamicBean) value; if (null == bean) { return null == other.bean; } else { diff --git a/bus-core/src/main/java/org/aoju/bus/core/beans/copier/CopyOptions.java b/bus-core/src/main/java/org/aoju/bus/core/beans/copier/CopyOptions.java index 357e8f2a8a..1f619ebe3d 100644 --- a/bus-core/src/main/java/org/aoju/bus/core/beans/copier/CopyOptions.java +++ b/bus-core/src/main/java/org/aoju/bus/core/beans/copier/CopyOptions.java @@ -307,7 +307,7 @@ public CopyOptions setTransientSupport(boolean transientSupport) { } /** - * 设置是否覆盖目标值,如果不覆盖,会先读取目标对象的值,非{@code null}则写,否则忽略如果覆盖,则不判断直接写 + * 设置是否覆盖目标值,如果不覆盖,会先读取目标对象的值,为{@code null}则写,否则忽略。如果覆盖,则不判断直接写 * * @param override 是否覆盖目标值 * @return this diff --git a/bus-core/src/main/java/org/aoju/bus/core/builder/DifferentBuilder.java b/bus-core/src/main/java/org/aoju/bus/core/builder/DifferentBuilder.java index 0effd6ea40..93fa971fe6 100755 --- a/bus-core/src/main/java/org/aoju/bus/core/builder/DifferentBuilder.java +++ b/bus-core/src/main/java/org/aoju/bus/core/builder/DifferentBuilder.java @@ -44,12 +44,12 @@ * * ... * - * public DiffResult diff(Person obj) { - * // No need for null check, as NullPointerException correct if obj is null - * return new DiffBuilder(this, obj, ToStringStyle.SHORT_PREFIX_STYLE) - * .append("name", this.name, obj.name) - * .append("age", this.age, obj.age) - * .append("smoker", this.smoker, obj.smoker) + * public DiffResult diff(Person object) { + * // No need for null check, as NullPointerException correct if object is null + * return new DiffBuilder(this, object, ToStringStyle.SHORT_PREFIX_STYLE) + * .append("name", this.name, object.name) + * .append("age", this.age, object.age) + * .append("smoker", this.smoker, object.smoker) * .build(); * } * } @@ -770,10 +770,10 @@ public Object[] getRight() { * * ... * - * public DiffResult diff(Person obj) { - * return new DiffBuilder(this, obj, ToStringStyle.SHORT_PREFIX_STYLE) - * .append("name", this.name, obj.name) - * .append("address", this.address.diff(obj.address)) + * public DiffResult diff(Person object) { + * return new DiffBuilder(this, object, ToStringStyle.SHORT_PREFIX_STYLE) + * .append("name", this.name, object.name) + * .append("address", this.address.diff(object.address)) * .build(); * } * } diff --git a/bus-core/src/main/java/org/aoju/bus/core/builder/Differentable.java b/bus-core/src/main/java/org/aoju/bus/core/builder/Differentable.java index a3bb2ddf21..3bc976e7c9 100755 --- a/bus-core/src/main/java/org/aoju/bus/core/builder/Differentable.java +++ b/bus-core/src/main/java/org/aoju/bus/core/builder/Differentable.java @@ -48,9 +48,9 @@ public interface Differentable { /** * 检索此对象与提供的对象之间的差异列表 * - * @param obj diff的对象可以是{@code null} + * @param object diff的对象可以是{@code null} * @return 差异列表 */ - DifferentResult diff(T obj); + DifferentResult diff(T object); } diff --git a/bus-core/src/main/java/org/aoju/bus/core/builder/EqualsBuilder.java b/bus-core/src/main/java/org/aoju/bus/core/builder/EqualsBuilder.java index d06379877a..7b6ba96e99 100755 --- a/bus-core/src/main/java/org/aoju/bus/core/builder/EqualsBuilder.java +++ b/bus-core/src/main/java/org/aoju/bus/core/builder/EqualsBuilder.java @@ -42,23 +42,23 @@ * *

使用方法如下:

*
- * public boolean equals(Object obj) {
- *   if (null == obj) { return false; }
- *   if (obj == this) { return true; }
- *   if (obj.getClass() != getClass()) {
+ * public boolean equals(Object object) {
+ *   if (null == object) { return false; }
+ *   if (object == this) { return true; }
+ *   if (object.getClass() != getClass()) {
  *     return false;
  *   }
- *   MyClass rhs = (MyClass) obj;
+ *   MyClass rhs = (MyClass) object;
  *   return new EqualsBuilder()
- *                 .appendSuper(super.equals(obj))
+ *                 .appendSuper(super.equals(object))
  *                 .append(field1, rhs.field1)
  *                 .append(field2, rhs.field2)
  *                 .append(field3, rhs.field3)
  *                 .isEquals();
  *  }
  *
- * public boolean equals(Object obj) {
- *   return EqualsBuilder.reflectionEquals(this, obj);
+ * public boolean equals(Object object) {
+ *   return EqualsBuilder.reflectionEquals(this, object);
  * }
  * 
* diff --git a/bus-core/src/main/java/org/aoju/bus/core/builder/ReflectionBuilder.java b/bus-core/src/main/java/org/aoju/bus/core/builder/ReflectionBuilder.java index 217adc0719..ed6dbdebe9 100755 --- a/bus-core/src/main/java/org/aoju/bus/core/builder/ReflectionBuilder.java +++ b/bus-core/src/main/java/org/aoju/bus/core/builder/ReflectionBuilder.java @@ -45,8 +45,8 @@ * boolean smoker; * ... * - * public DiffResult diff(Person obj) { - * return new ReflectionDiffBuilder(this, obj, ToStringStyle.SHORT_PREFIX_STYLE) + * public DiffResult diff(Person object) { + * return new ReflectionDiffBuilder(this, object, ToStringStyle.SHORT_PREFIX_STYLE) * .build(); * } * } diff --git a/bus-core/src/main/java/org/aoju/bus/core/builder/ReflectionToStringBuilder.java b/bus-core/src/main/java/org/aoju/bus/core/builder/ReflectionToStringBuilder.java index f8c74458f0..5d59abfa85 100755 --- a/bus-core/src/main/java/org/aoju/bus/core/builder/ReflectionToStringBuilder.java +++ b/bus-core/src/main/java/org/aoju/bus/core/builder/ReflectionToStringBuilder.java @@ -197,9 +197,9 @@ public static String toStringExclude(final Object object, final String... exclud return new ReflectionToStringBuilder(object).setExcludeFieldNames(excludeFieldNames).toString(); } - private static Object checkNotNull(final Object obj) { - Assert.isTrue(null != obj, "The Object passed in should not be null."); - return obj; + private static Object checkNotNull(final Object object) { + Assert.isTrue(null != object, "The Object passed in should not be null."); + return object; } /** diff --git a/bus-core/src/main/java/org/aoju/bus/core/builder/ToStringBuilder.java b/bus-core/src/main/java/org/aoju/bus/core/builder/ToStringBuilder.java index aac645bfca..ce964db992 100755 --- a/bus-core/src/main/java/org/aoju/bus/core/builder/ToStringBuilder.java +++ b/bus-core/src/main/java/org/aoju/bus/core/builder/ToStringBuilder.java @@ -394,11 +394,11 @@ public ToStringBuilder append(final long[] array) { *

Append to the toString an Object * value.

* - * @param obj the value to add to the toString + * @param object the value to add to the toString * @return this */ - public ToStringBuilder append(final Object obj) { - style.append(buffer, null, obj, null); + public ToStringBuilder append(final Object object) { + style.append(buffer, null, object, null); return this; } @@ -767,11 +767,11 @@ public ToStringBuilder append(final String fieldName, final long[] array, final * value.

* * @param fieldName the field name - * @param obj the value to add to the toString + * @param object the value to add to the toString * @return this */ - public ToStringBuilder append(final String fieldName, final Object obj) { - style.append(buffer, fieldName, obj, null); + public ToStringBuilder append(final String fieldName, final Object object) { + style.append(buffer, fieldName, object, null); return this; } @@ -780,13 +780,13 @@ public ToStringBuilder append(final String fieldName, final Object obj) { * value.

* * @param fieldName the field name - * @param obj the value to add to the toString + * @param object the value to add to the toString * @param fullDetail true for detail, * false for summary info * @return this */ - public ToStringBuilder append(final String fieldName, final Object obj, final boolean fullDetail) { - style.append(buffer, fieldName, obj, Boolean.valueOf(fullDetail)); + public ToStringBuilder append(final String fieldName, final Object object, final boolean fullDetail) { + style.append(buffer, fieldName, object, Boolean.valueOf(fullDetail)); return this; } diff --git a/bus-core/src/main/java/org/aoju/bus/core/codec/BCD.java b/bus-core/src/main/java/org/aoju/bus/core/codec/BCD.java index d8aa6d54d2..e4818e0d9f 100644 --- a/bus-core/src/main/java/org/aoju/bus/core/codec/BCD.java +++ b/bus-core/src/main/java/org/aoju/bus/core/codec/BCD.java @@ -45,6 +45,7 @@ public class BCD { * @return BCD */ public static byte[] strToBcd(String asc) { + Assert.notNull(asc, "ASCII must not be null!"); int len = asc.length(); int mod = len % 2; if (mod != 0) { @@ -115,7 +116,7 @@ public static byte[] ascToBcd(byte[] ascii, int ascLength) { * @param bytes BCD byte数组 * @return ASCII字符串 */ - public static String bcdToStr(byte[] bytes) { + public static String bcdToString(byte[] bytes) { Assert.notNull(bytes, "Bcd bytes must be not null!"); char[] temp = new char[bytes.length * 2]; char val; diff --git a/bus-core/src/main/java/org/aoju/bus/core/codec/Base32.java b/bus-core/src/main/java/org/aoju/bus/core/codec/Base32.java index c3b58e3ea3..e1fcf9b761 100644 --- a/bus-core/src/main/java/org/aoju/bus/core/codec/Base32.java +++ b/bus-core/src/main/java/org/aoju/bus/core/codec/Base32.java @@ -118,8 +118,8 @@ public static byte[] decode(String base32) { * @param source 被解码的base32字符串 * @return 被加密后的字符串 */ - public static String decodeStr(String source) { - return decodeStr(source, org.aoju.bus.core.lang.Charset.UTF_8); + public static String decodeString(String source) { + return decodeString(source, org.aoju.bus.core.lang.Charset.UTF_8); } /** @@ -129,7 +129,7 @@ public static String decodeStr(String source) { * @param charset 字符集 * @return 被加密后的字符串 */ - public static String decodeStr(String source, java.nio.charset.Charset charset) { + public static String decodeString(String source, java.nio.charset.Charset charset) { return StringKit.toString(decode(source), charset); } diff --git a/bus-core/src/main/java/org/aoju/bus/core/codec/Base58.java b/bus-core/src/main/java/org/aoju/bus/core/codec/Base58.java index c51274506e..5ebb00cd4f 100644 --- a/bus-core/src/main/java/org/aoju/bus/core/codec/Base58.java +++ b/bus-core/src/main/java/org/aoju/bus/core/codec/Base58.java @@ -34,7 +34,6 @@ import java.security.NoSuchAlgorithmException; import java.util.Arrays; - /** * Base58工具类,提供Base58的编码和解码方案 * 参考: https://github.com/Anujraval24/Base58Encoding diff --git a/bus-core/src/main/java/org/aoju/bus/core/codec/Base62.java b/bus-core/src/main/java/org/aoju/bus/core/codec/Base62.java index 46e5106a7d..c21c2e3b0f 100644 --- a/bus-core/src/main/java/org/aoju/bus/core/codec/Base62.java +++ b/bus-core/src/main/java/org/aoju/bus/core/codec/Base62.java @@ -145,8 +145,6 @@ public static String encodeInverted(File file) { return encodeInverted(FileKit.readBytes(file)); } - // -------------------------------------------------------------------- decode - /** * Base62解码 * @@ -154,7 +152,7 @@ public static String encodeInverted(File file) { * @return 被加密后的字符串 */ public static String decodeStrGbk(CharSequence source) { - return decodeStr(source, org.aoju.bus.core.lang.Charset.GBK); + return decodeString(source, org.aoju.bus.core.lang.Charset.GBK); } /** @@ -163,8 +161,8 @@ public static String decodeStrGbk(CharSequence source) { * @param source 被解码的Base62字符串 * @return 被加密后的字符串 */ - public static String decodeStr(CharSequence source) { - return decodeStr(source, org.aoju.bus.core.lang.Charset.UTF_8); + public static String decodeString(CharSequence source) { + return decodeString(source, org.aoju.bus.core.lang.Charset.UTF_8); } /** @@ -174,7 +172,7 @@ public static String decodeStr(CharSequence source) { * @param charset 字符集 * @return 被加密后的字符串 */ - public static String decodeStr(CharSequence source, Charset charset) { + public static String decodeString(CharSequence source, Charset charset) { return StringKit.toString(decode(source), charset); } diff --git a/bus-core/src/main/java/org/aoju/bus/core/codec/Base64.java b/bus-core/src/main/java/org/aoju/bus/core/codec/Base64.java index 8264155d4a..db5b3043a8 100644 --- a/bus-core/src/main/java/org/aoju/bus/core/codec/Base64.java +++ b/bus-core/src/main/java/org/aoju/bus/core/codec/Base64.java @@ -205,7 +205,7 @@ public static String encodeUrlSafe(File file) { * @param isUrlSafe 是否使用URL安全字符,一般为{@code false} * @return 编码后的bytes */ - public static String encodeStr(byte[] arr, boolean isMultiLine, boolean isUrlSafe) { + public static String encodeString(byte[] arr, boolean isMultiLine, boolean isUrlSafe) { return StringKit.toString(encode(arr, isMultiLine, isUrlSafe), org.aoju.bus.core.lang.Charset.UTF_8); } @@ -333,8 +333,8 @@ public static String decodeStrGbk(CharSequence source) { * @param source 被解码的base64字符串 * @return 解码后的字符串 */ - public static String decodeStr(CharSequence source) { - return decodeStr(source, Charset.UTF_8); + public static String decodeString(CharSequence source) { + return decodeString(source, Charset.UTF_8); } /** @@ -344,8 +344,8 @@ public static String decodeStr(CharSequence source) { * @param charset 字符集 * @return 解码后的字符串 */ - public static String decodeStr(CharSequence source, String charset) { - return decodeStr(source, Charset.charset(charset)); + public static String decodeString(CharSequence source, String charset) { + return decodeString(source, Charset.charset(charset)); } /** @@ -355,7 +355,7 @@ public static String decodeStr(CharSequence source, String charset) { * @param charset 字符集 * @return 解码后的字符串 */ - public static String decodeStr(CharSequence source, java.nio.charset.Charset charset) { + public static String decodeString(CharSequence source, java.nio.charset.Charset charset) { return StringKit.toString(decode(source), charset); } @@ -507,6 +507,9 @@ public static boolean isBase64(CharSequence base64) { * @return 是否为Base64 */ public static boolean isBase64(byte[] base64Bytes) { + if (base64Bytes == null || base64Bytes.length < 3) { + return false; + } boolean hasPadding = false; for (byte base64Byte : base64Bytes) { if (hasPadding) { diff --git a/bus-core/src/main/java/org/aoju/bus/core/codec/Caesar.java b/bus-core/src/main/java/org/aoju/bus/core/codec/Caesar.java index 8cdf9f9ba1..5b28c89413 100644 --- a/bus-core/src/main/java/org/aoju/bus/core/codec/Caesar.java +++ b/bus-core/src/main/java/org/aoju/bus/core/codec/Caesar.java @@ -25,6 +25,7 @@ ********************************************************************************/ package org.aoju.bus.core.codec; +import org.aoju.bus.core.lang.Assert; import org.aoju.bus.core.lang.Normal; /** @@ -43,6 +44,7 @@ public class Caesar { * @return 加密后的内容 */ public static String encode(String message, int offset) { + Assert.notNull(message, "message must be not null!"); final int len = message.length(); final char[] plain = message.toCharArray(); char c; @@ -64,6 +66,7 @@ public static String encode(String message, int offset) { * @return 解密后的内容 */ public static String decode(String cipher, int offset) { + Assert.notNull(cipher, "cipherText must be not null!"); final int len = cipher.length(); final char[] plain = cipher.toCharArray(); char c; diff --git a/bus-core/src/main/java/org/aoju/bus/core/codec/Percent.java b/bus-core/src/main/java/org/aoju/bus/core/codec/Percent.java index 35722e205d..85d7aa08b8 100644 --- a/bus-core/src/main/java/org/aoju/bus/core/codec/Percent.java +++ b/bus-core/src/main/java/org/aoju/bus/core/codec/Percent.java @@ -25,6 +25,7 @@ ********************************************************************************/ package org.aoju.bus.core.codec; +import org.aoju.bus.core.lang.Assert; import org.aoju.bus.core.lang.Normal; import org.aoju.bus.core.lang.Symbol; import org.aoju.bus.core.toolkit.HexKit; @@ -96,6 +97,7 @@ public static Percent of(Percent codec) { * @return this */ public static Percent of(CharSequence chars) { + Assert.notNull(chars, "chars must not be null"); final Percent codec = new Percent(); final int length = chars.length(); for (int i = 0; i < length; i++) { diff --git a/bus-core/src/main/java/org/aoju/bus/core/codec/PunyCode.java b/bus-core/src/main/java/org/aoju/bus/core/codec/PunyCode.java index 5ed02c5919..f259d8b275 100644 --- a/bus-core/src/main/java/org/aoju/bus/core/codec/PunyCode.java +++ b/bus-core/src/main/java/org/aoju/bus/core/codec/PunyCode.java @@ -70,6 +70,7 @@ public static String encode(CharSequence input) throws InstrumentException { * @throws InstrumentException 计算异常 */ public static String encode(CharSequence input, boolean withPrefix) throws InstrumentException { + Assert.notNull(input, "input must not be null!"); int n = INITIAL_N; int delta = 0; int bias = INITIAL_BIAS; @@ -152,6 +153,7 @@ public static String encode(CharSequence input, boolean withPrefix) throws Instr * @throws InstrumentException 计算异常 */ public static String decode(String input) throws InstrumentException { + Assert.notNull(input, "input must not be null!"); input = StringKit.removePrefixIgnoreCase(input, PUNY_CODE_PREFIX); int n = INITIAL_N; diff --git a/bus-core/src/main/java/org/aoju/bus/core/compare/IndexedCompare.java b/bus-core/src/main/java/org/aoju/bus/core/compare/IndexedCompare.java index be6e4c4364..79c6a3decb 100755 --- a/bus-core/src/main/java/org/aoju/bus/core/compare/IndexedCompare.java +++ b/bus-core/src/main/java/org/aoju/bus/core/compare/IndexedCompare.java @@ -46,22 +46,22 @@ public class IndexedCompare implements Comparator { /** * 构造 * - * @param obj 参与排序的数组,数组的元素位置决定了对象的排序先后 + * @param object 参与排序的数组,数组的元素位置决定了对象的排序先后 */ - public IndexedCompare(T... obj) { - this(false, obj); + public IndexedCompare(T... object) { + this(false, object); } /** * 构造 * * @param atEndIfMiss 如果不在列表中是否排在后边 - * @param obj 参与排序的数组,数组的元素位置决定了对象的排序先后 + * @param object 参与排序的数组,数组的元素位置决定了对象的排序先后 */ - public IndexedCompare(boolean atEndIfMiss, T... obj) { - Assert.notNull(obj, "'objs' array must not be null"); + public IndexedCompare(boolean atEndIfMiss, T... object) { + Assert.notNull(object, "'objs' array must not be null"); this.atEndIfMiss = atEndIfMiss; - this.array = obj; + this.array = object; } @Override diff --git a/bus-core/src/main/java/org/aoju/bus/core/convert/Convert.java b/bus-core/src/main/java/org/aoju/bus/core/convert/Convert.java index 4ce3a1ff06..e0fbd93a24 100755 --- a/bus-core/src/main/java/org/aoju/bus/core/convert/Convert.java +++ b/bus-core/src/main/java/org/aoju/bus/core/convert/Convert.java @@ -385,8 +385,8 @@ public static Float[] toFloatArray(Object value) { * @param value 被转换的值 * @return 结果 */ - public static Boolean toBool(Object value) { - return toBool(value, null); + public static Boolean toBoolean(Object value) { + return toBoolean(value, null); } /** @@ -398,7 +398,7 @@ public static Boolean toBool(Object value) { * @param defaultValue 转换错误时的默认值 * @return 结果 */ - public static Boolean toBool(Object value, Boolean defaultValue) { + public static Boolean toBoolean(Object value, Boolean defaultValue) { return convertQuietly(Boolean.class, value, defaultValue); } @@ -608,7 +608,26 @@ public static Set toSet(Class elementType, Object value) { * @return {@link Map} */ public static Map toMap(Class keyType, Class valueType, Object value) { - return (Map) new MapConverter(HashMap.class, keyType, valueType).convert(value, null); + if (value instanceof Map) { + return toMap((Class>) value.getClass(), keyType, valueType, value); + } else { + return toMap(HashMap.class, keyType, valueType, value); + } + } + + /** + * 转换为Map + * + * @param mapType 转后的具体Map类型 + * @param 键类型 + * @param 值类型 + * @param keyType 键类型 + * @param valueType 值类型 + * @param value 被转换的值 + * @return {@link Map} + */ + public static Map toMap(Class mapType, Class keyType, Class valueType, Object value) { + return (Map) new MapConverter(mapType, keyType, valueType).convert(value, null); } /** diff --git a/bus-core/src/main/java/org/aoju/bus/core/convert/NumberConverter.java b/bus-core/src/main/java/org/aoju/bus/core/convert/NumberConverter.java index 60120524bb..d06832d614 100755 --- a/bus-core/src/main/java/org/aoju/bus/core/convert/NumberConverter.java +++ b/bus-core/src/main/java/org/aoju/bus/core/convert/NumberConverter.java @@ -102,7 +102,7 @@ protected static Number convert(Object value, Class targetType if (value instanceof Number) { return ((Number) value).byteValue(); } else if (value instanceof Boolean) { - return BooleanKit.toByteObj((Boolean) value); + return BooleanKit.toByteObject((Boolean) value); } final String valueStr = toStrFunc.apply(value); try { @@ -114,7 +114,7 @@ protected static Number convert(Object value, Class targetType if (value instanceof Number) { return ((Number) value).shortValue(); } else if (value instanceof Boolean) { - return BooleanKit.toShortObj((Boolean) value); + return BooleanKit.toShortObject((Boolean) value); } final String valueStr = toStrFunc.apply((value)); try { @@ -145,7 +145,7 @@ protected static Number convert(Object value, Class targetType if (value instanceof Number) { return ((Number) value).longValue(); } else if (value instanceof Boolean) { - return BooleanKit.toLongObj((Boolean) value); + return BooleanKit.toLongObject((Boolean) value); } else if (value instanceof Date) { return ((Date) value).getTime(); } else if (value instanceof Calendar) { @@ -171,7 +171,7 @@ protected static Number convert(Object value, Class targetType if (value instanceof Number) { return ((Number) value).floatValue(); } else if (value instanceof Boolean) { - return BooleanKit.toFloatObj((Boolean) value); + return BooleanKit.toFloatObject((Boolean) value); } final String valueStr = toStrFunc.apply((value)); return StringKit.isBlank(valueStr) ? null : MathKit.parseFloat(valueStr); @@ -179,7 +179,7 @@ protected static Number convert(Object value, Class targetType if (value instanceof Number) { return MathKit.toDouble((Number) value); } else if (value instanceof Boolean) { - return BooleanKit.toDoubleObj((Boolean) value); + return BooleanKit.toDoubleObject((Boolean) value); } final String valueStr = toStrFunc.apply((value)); return StringKit.isBlank(valueStr) ? null : MathKit.parseDouble(valueStr); diff --git a/bus-core/src/main/java/org/aoju/bus/core/convert/TemporalConverter.java b/bus-core/src/main/java/org/aoju/bus/core/convert/TemporalConverter.java index a001f701d5..98a489b39a 100644 --- a/bus-core/src/main/java/org/aoju/bus/core/convert/TemporalConverter.java +++ b/bus-core/src/main/java/org/aoju/bus/core/convert/TemporalConverter.java @@ -114,6 +114,8 @@ public Class getTargetType() { protected TemporalAccessor convertInternal(Object value) { if (value instanceof Long) { return parseFromLong((Long) value); + } else if (value instanceof Integer) { + return parseFromLong((long) (Integer) value); } else if (value instanceof TemporalAccessor) { return parseFromTemporalAccessor((TemporalAccessor) value); } else if (value instanceof Date) { diff --git a/bus-core/src/main/java/org/aoju/bus/core/date/Almanac.java b/bus-core/src/main/java/org/aoju/bus/core/date/Almanac.java index c32133afaf..75722c5099 100644 --- a/bus-core/src/main/java/org/aoju/bus/core/date/Almanac.java +++ b/bus-core/src/main/java/org/aoju/bus/core/date/Almanac.java @@ -28,8 +28,10 @@ import org.aoju.bus.core.exception.InstrumentException; import org.aoju.bus.core.lang.Fields; import org.aoju.bus.core.lang.Normal; +import org.aoju.bus.core.lang.RegEx; import org.aoju.bus.core.lang.Symbol; import org.aoju.bus.core.toolkit.ArrayKit; +import org.aoju.bus.core.toolkit.DateKit; import org.aoju.bus.core.toolkit.StringKit; import java.text.DateFormat; @@ -3946,6 +3948,28 @@ public static boolean isSameDay(final Date date1, final Date date2) { return isSameDay(Converter.toCalendar(date1), Converter.toCalendar(date2)); } + /** + * 比较两个日期是否为同一天 + * + * @param date1 日期1 + * @param date2 日期2 + * @return 是否为同一天 + */ + public static boolean isSameDay(final LocalDate date1, final LocalDate date2) { + return date1 != null && date2 != null && date1.isEqual(date2); + } + + /** + * 比较两个日期是否为同一天 + * + * @param date1 日期1 + * @param date2 日期2 + * @return 是否为同一天 + */ + public static boolean isSameDay(final LocalDateTime date1, final LocalDateTime date2) { + return date1 != null && date2 != null && date1.toLocalDate().isEqual(date2.toLocalDate()); + } + /** * 比较两个日期是否为同一周 * @@ -4414,42 +4438,101 @@ public static boolean isExpiry(YearMonth yearMonth) { /** * 判断是否过期,(输入年月小于当前年月) * - * @param yearMonthStr 年月字符串,格式: yyyy-MM + * @param value 年月字符串,格式: yyyy-MM * @return boolean */ - public static boolean isExpiry(String yearMonthStr) { - YearMonth yearMonth = YearMonth.parse(yearMonthStr); + public static boolean isExpiry(String value) { + YearMonth yearMonth = YearMonth.parse(value); return isExpiry(yearMonth); } + /** + * 验证是否为生日 + * 只支持以下几种格式: + *
    + *
  • yyyyMMdd
  • + *
  • yyyy-MM-dd
  • + *
  • yyyy/MM/dd
  • + *
  • yyyy.MM.dd
  • + *
  • yyyy年MM月dd日
  • + *
+ * + * @param value 值 + * @return 是否为生日 + */ + public static boolean isBirthday(CharSequence value) { + final Matcher matcher = RegEx.BIRTHDAY.matcher(value); + if (matcher.find()) { + return DateKit.isBirthday(Integer.parseInt(matcher.group(1)), + Integer.parseInt(matcher.group(3)), + Integer.parseInt(matcher.group(5))); + } + return false; + } + /** * 是否为生日 * - * @param birthDay 生日 + * @param date 生日 * @return boolean */ - public static boolean isBirthDay(LocalDate birthDay) { - return isSameMonthDay(birthDay, LocalDate.now()); + public static boolean isBirthDay(Date date) { + return isBirthDay(Converter.toLocalDate(date)); } /** * 是否为生日 * - * @param birthDay 生日 + * @param localDate 生日 * @return boolean */ - public static boolean isBirthDay(Date birthDay) { - return isBirthDay(Converter.toLocalDate(birthDay)); + public static boolean isBirthDay(LocalDate localDate) { + return isSameMonthDay(localDate, LocalDate.now()); } /** * 是否为生日 * - * @param birthDay 生日 + * @param localDateTime 生日 * @return boolean */ - public static boolean isBirthDay(LocalDateTime birthDay) { - return isBirthDay(Converter.toLocalDate(birthDay)); + public static boolean isBirthDay(LocalDateTime localDateTime) { + return isBirthDay(Converter.toLocalDate(localDateTime)); + } + + /** + * 验证是否为生日 + * + * @param year 年,从1900年开始计算 + * @param month 月,从1开始计数 + * @param day 日,从1开始计数 + * @return 是否为生日 + */ + public static boolean isBirthday(int year, int month, int day) { + // 验证年 + int thisYear = DateKit.thisYear(); + if (year < 1900 || year > thisYear) { + return false; + } + + // 验证月 + if (month < 1 || month > 12) { + return false; + } + + // 验证日 + if (day < 1 || day > 31) { + return false; + } + // 检查几个特殊月的最大天数 + if (day == 31 && (month == 4 || month == 6 || month == 9 || month == 11)) { + return false; + } + if (month == 2) { + // 在2月,非闰年最大28,闰年最大29 + return day < 29 || (day == 29 && DateKit.isLeapYear(year)); + } + return true; } /** @@ -4864,6 +4947,23 @@ public static boolean isIn(Date date, Date beginDate, Date endDate) { } } + /** + * 当前日期是否在日期指定范围内 + * 起始日期和结束日期可以互换 + * + * @param date 被检查的日期 + * @param beginDate 起始日期(包含) + * @param endDate 结束日期(包含) + * @return 是否在范围内 + */ + public static boolean isIn(TemporalAccessor date, TemporalAccessor beginDate, TemporalAccessor endDate) { + final long thisMills = toEpochMilli(date); + final long beginMills = toEpochMilli(beginDate); + final long endMills = toEpochMilli(endDate); + + return thisMills >= Math.min(beginMills, endMills) && thisMills <= Math.max(beginMills, endMills); + } + /** * 获取指定时间对应的十二时辰 * diff --git a/bus-core/src/main/java/org/aoju/bus/core/date/DateTime.java b/bus-core/src/main/java/org/aoju/bus/core/date/DateTime.java index 924537a0a2..81a65a8c0c 100755 --- a/bus-core/src/main/java/org/aoju/bus/core/date/DateTime.java +++ b/bus-core/src/main/java/org/aoju/bus/core/date/DateTime.java @@ -339,6 +339,10 @@ public static LocalDateTime of(TemporalAccessor temporalAccessor) { if (temporalAccessor instanceof LocalDate) { return ((LocalDate) temporalAccessor).atStartOfDay(); + } else if (temporalAccessor instanceof Instant) { + return LocalDateTime.ofInstant((Instant) temporalAccessor, ZoneId.systemDefault()); + } else if (temporalAccessor instanceof ZonedDateTime) { + return ((ZonedDateTime) temporalAccessor).toLocalDateTime(); } return LocalDateTime.of( diff --git a/bus-core/src/main/java/org/aoju/bus/core/date/Lunar.java b/bus-core/src/main/java/org/aoju/bus/core/date/Lunar.java index 0a4b5d545f..a67d0def4f 100644 --- a/bus-core/src/main/java/org/aoju/bus/core/date/Lunar.java +++ b/bus-core/src/main/java/org/aoju/bus/core/date/Lunar.java @@ -5578,12 +5578,12 @@ public Year(int lunarYear) { * @return 农历年 */ public static Year from(int lunarYear) { - Year obj = CACHE.get(lunarYear); - if (null == obj) { - obj = new Year(lunarYear); - CACHE.put(lunarYear, obj); + Year year = CACHE.get(lunarYear); + if (null == year) { + year = new Year(lunarYear); + CACHE.put(lunarYear, year); } - return obj; + return year; } private void compute() { diff --git a/bus-core/src/main/java/org/aoju/bus/core/date/formatter/AbstractMotd.java b/bus-core/src/main/java/org/aoju/bus/core/date/formatter/AbstractMotd.java index 0ce8d5d221..b2faf7b31f 100755 --- a/bus-core/src/main/java/org/aoju/bus/core/date/formatter/AbstractMotd.java +++ b/bus-core/src/main/java/org/aoju/bus/core/date/formatter/AbstractMotd.java @@ -79,11 +79,11 @@ public Locale getLocale() { } @Override - public boolean equals(final Object obj) { - if (obj instanceof FastDatePrinter == false) { + public boolean equals(final Object object) { + if (object instanceof FastDatePrinter == false) { return false; } - final AbstractMotd other = (AbstractMotd) obj; + final AbstractMotd other = (AbstractMotd) object; return pattern.equals(other.pattern) && timeZone.equals(other.timeZone) && locale.equals(other.locale); } diff --git a/bus-core/src/main/java/org/aoju/bus/core/date/formatter/FastDatePrinter.java b/bus-core/src/main/java/org/aoju/bus/core/date/formatter/FastDatePrinter.java index 153ddaee2e..bd66582101 100755 --- a/bus-core/src/main/java/org/aoju/bus/core/date/formatter/FastDatePrinter.java +++ b/bus-core/src/main/java/org/aoju/bus/core/date/formatter/FastDatePrinter.java @@ -402,18 +402,18 @@ protected NumberRule selectNumberRule(final int field, final int padding) { /** * 格式化一个{@code Date}、{@code Calendar}或{@code Long}(毫秒)对象 * - * @param obj 要格式化的对象 + * @param object 要格式化的对象 * @return 格式化的值 */ - String format(final Object obj) { - if (obj instanceof Date) { - return format((Date) obj); - } else if (obj instanceof Calendar) { - return format((Calendar) obj); - } else if (obj instanceof Long) { - return format(((Long) obj).longValue()); + String format(final Object object) { + if (object instanceof Date) { + return format((Date) object); + } else if (object instanceof Calendar) { + return format((Calendar) object); + } else if (object instanceof Long) { + return format(((Long) object).longValue()); } else { - throw new IllegalArgumentException("Unknown class: " + (null == obj ? "" : obj.getClass().getName())); + throw new IllegalArgumentException("Unknown class: " + (null == object ? "" : object.getClass().getName())); } } @@ -1165,12 +1165,12 @@ public int hashCode() { } @Override - public boolean equals(final Object obj) { - if (this == obj) { + public boolean equals(final Object object) { + if (this == object) { return true; } - if (obj instanceof TimeZoneDisplayKey) { - final TimeZoneDisplayKey other = (TimeZoneDisplayKey) obj; + if (object instanceof TimeZoneDisplayKey) { + final TimeZoneDisplayKey other = (TimeZoneDisplayKey) object; return mTimeZone.equals(other.mTimeZone) && mStyle == other.mStyle && mLocale.equals(other.mLocale); } return false; diff --git a/bus-core/src/main/java/org/aoju/bus/core/date/formatter/FormatBuilder.java b/bus-core/src/main/java/org/aoju/bus/core/date/formatter/FormatBuilder.java index b78dfaeaff..5ed7dd97a4 100755 --- a/bus-core/src/main/java/org/aoju/bus/core/date/formatter/FormatBuilder.java +++ b/bus-core/src/main/java/org/aoju/bus/core/date/formatter/FormatBuilder.java @@ -309,8 +309,8 @@ public static FormatBuilder getDateTimeInstance(final int dateStyle, final int t } @Override - public StringBuffer format(final Object obj, final StringBuffer toAppendTo, final FieldPosition pos) { - return toAppendTo.append(printer.format(obj)); + public StringBuffer format(final Object object, final StringBuffer toAppendTo, final FieldPosition pos) { + return toAppendTo.append(printer.format(object)); } @Override @@ -389,11 +389,11 @@ public int getMaxLengthEstimate() { } @Override - public boolean equals(final Object obj) { - if (obj instanceof FormatBuilder == false) { + public boolean equals(final Object object) { + if (object instanceof FormatBuilder == false) { return false; } - final FormatBuilder other = (FormatBuilder) obj; + final FormatBuilder other = (FormatBuilder) object; return printer.equals(other.printer); } diff --git a/bus-core/src/main/java/org/aoju/bus/core/date/formatter/FormatCache.java b/bus-core/src/main/java/org/aoju/bus/core/date/formatter/FormatCache.java index a72e2099df..b82faaa25e 100755 --- a/bus-core/src/main/java/org/aoju/bus/core/date/formatter/FormatCache.java +++ b/bus-core/src/main/java/org/aoju/bus/core/date/formatter/FormatCache.java @@ -206,17 +206,17 @@ public MultipartKey(final Object... keys) { } @Override - public boolean equals(final Object obj) { - if (this == obj) { + public boolean equals(final Object object) { + if (this == object) { return true; } - if (null == obj) { + if (null == object) { return false; } - if (getClass() != obj.getClass()) { + if (getClass() != object.getClass()) { return false; } - final MultipartKey other = (MultipartKey) obj; + final MultipartKey other = (MultipartKey) object; return false != Arrays.equals(keys, other.keys); } diff --git a/bus-core/src/main/java/org/aoju/bus/core/getter/BasicType.java b/bus-core/src/main/java/org/aoju/bus/core/getter/BasicType.java index b89684cd01..bbaaf5582e 100755 --- a/bus-core/src/main/java/org/aoju/bus/core/getter/BasicType.java +++ b/bus-core/src/main/java/org/aoju/bus/core/getter/BasicType.java @@ -44,7 +44,7 @@ public interface BasicType { * @param key 属性名 * @return 属性值 */ - Object getObj(K key); + Object getObject(K key); /** * 获取字符串型属性值 @@ -52,7 +52,7 @@ public interface BasicType { * @param key 属性名 * @return 属性值 */ - String getStr(K key); + String getString(K key); /** * 获取int型属性值 @@ -76,7 +76,7 @@ public interface BasicType { * @param key 属性名 * @return 属性值 */ - Boolean getBool(K key); + Boolean getBoolean(K key); /** * 获取long型属性值 diff --git a/bus-core/src/main/java/org/aoju/bus/core/getter/OptBasicType.java b/bus-core/src/main/java/org/aoju/bus/core/getter/OptBasicType.java index 47f2f3c631..b773a52243 100755 --- a/bus-core/src/main/java/org/aoju/bus/core/getter/OptBasicType.java +++ b/bus-core/src/main/java/org/aoju/bus/core/getter/OptBasicType.java @@ -46,7 +46,7 @@ public interface OptBasicType { * @param defaultValue 默认值 * @return 属性值, 无对应值返回defaultValue */ - Object getObj(K key, Object defaultValue); + Object getObject(K key, Object defaultValue); /** * 获取字符串型属性值 @@ -56,7 +56,7 @@ public interface OptBasicType { * @param defaultValue 默认值 * @return 属性值, 无对应值返回defaultValue */ - String getStr(K key, String defaultValue); + String getString(K key, String defaultValue); /** * 获取int型属性值 @@ -86,7 +86,7 @@ public interface OptBasicType { * @param defaultValue 默认值 * @return 属性值, 无对应值返回defaultValue */ - Boolean getBool(K key, Boolean defaultValue); + Boolean getBoolean(K key, Boolean defaultValue); /** * 获取Long型属性值 diff --git a/bus-core/src/main/java/org/aoju/bus/core/getter/OptNullObject.java b/bus-core/src/main/java/org/aoju/bus/core/getter/OptNullObject.java index d71606d605..be77416608 100755 --- a/bus-core/src/main/java/org/aoju/bus/core/getter/OptNullObject.java +++ b/bus-core/src/main/java/org/aoju/bus/core/getter/OptNullObject.java @@ -42,68 +42,68 @@ public interface OptNullObject extends OptNullType { @Override - default String getStr(K key, String defaultValue) { - return Convert.toString(getObj(key), defaultValue); + default String getString(K key, String defaultValue) { + return Convert.toString(getObject(key), defaultValue); } @Override default Integer getInt(K key, Integer defaultValue) { - return Convert.toInt(getObj(key), defaultValue); + return Convert.toInt(getObject(key), defaultValue); } @Override default Short getShort(K key, Short defaultValue) { - return Convert.toShort(getObj(key), defaultValue); + return Convert.toShort(getObject(key), defaultValue); } @Override - default Boolean getBool(K key, Boolean defaultValue) { - return Convert.toBool(getObj(key), defaultValue); + default Boolean getBoolean(K key, Boolean defaultValue) { + return Convert.toBoolean(getObject(key), defaultValue); } @Override default Long getLong(K key, Long defaultValue) { - return Convert.toLong(getObj(key), defaultValue); + return Convert.toLong(getObject(key), defaultValue); } @Override default Character getChar(K key, Character defaultValue) { - return Convert.toChar(getObj(key), defaultValue); + return Convert.toChar(getObject(key), defaultValue); } @Override default Float getFloat(K key, Float defaultValue) { - return Convert.toFloat(getObj(key), defaultValue); + return Convert.toFloat(getObject(key), defaultValue); } @Override default Double getDouble(K key, Double defaultValue) { - return Convert.toDouble(getObj(key), defaultValue); + return Convert.toDouble(getObject(key), defaultValue); } @Override default Byte getByte(K key, Byte defaultValue) { - return Convert.toByte(getObj(key), defaultValue); + return Convert.toByte(getObject(key), defaultValue); } @Override default BigDecimal getBigDecimal(K key, BigDecimal defaultValue) { - return Convert.toBigDecimal(getObj(key), defaultValue); + return Convert.toBigDecimal(getObject(key), defaultValue); } @Override default BigInteger getBigInteger(K key, BigInteger defaultValue) { - return Convert.toBigInteger(getObj(key), defaultValue); + return Convert.toBigInteger(getObject(key), defaultValue); } @Override default > E getEnum(Class clazz, K key, E defaultValue) { - return Convert.toEnum(clazz, getObj(key), defaultValue); + return Convert.toEnum(clazz, getObject(key), defaultValue); } @Override default Date getDate(K key, Date defaultValue) { - return Convert.toDate(getObj(key), defaultValue); + return Convert.toDate(getObject(key), defaultValue); } } diff --git a/bus-core/src/main/java/org/aoju/bus/core/getter/OptNullString.java b/bus-core/src/main/java/org/aoju/bus/core/getter/OptNullString.java index 86a7b0fc4c..2d80d9d8b9 100755 --- a/bus-core/src/main/java/org/aoju/bus/core/getter/OptNullString.java +++ b/bus-core/src/main/java/org/aoju/bus/core/getter/OptNullString.java @@ -41,68 +41,68 @@ public interface OptNullString extends OptNullType { @Override - default Object getObj(K key, Object defaultValue) { - return getStr(key, null == defaultValue ? null : defaultValue.toString()); + default Object getObject(K key, Object defaultValue) { + return getString(key, null == defaultValue ? null : defaultValue.toString()); } @Override default Integer getInt(K key, Integer defaultValue) { - return Convert.toInt(getStr(key), defaultValue); + return Convert.toInt(getString(key), defaultValue); } @Override default Short getShort(K key, Short defaultValue) { - return Convert.toShort(getStr(key), defaultValue); + return Convert.toShort(getString(key), defaultValue); } @Override - default Boolean getBool(K key, Boolean defaultValue) { - return Convert.toBool(getStr(key), defaultValue); + default Boolean getBoolean(K key, Boolean defaultValue) { + return Convert.toBoolean(getString(key), defaultValue); } @Override default Long getLong(K key, Long defaultValue) { - return Convert.toLong(getStr(key), defaultValue); + return Convert.toLong(getString(key), defaultValue); } @Override default Character getChar(K key, Character defaultValue) { - return Convert.toChar(getStr(key), defaultValue); + return Convert.toChar(getString(key), defaultValue); } @Override default Float getFloat(K key, Float defaultValue) { - return Convert.toFloat(getStr(key), defaultValue); + return Convert.toFloat(getString(key), defaultValue); } @Override default Double getDouble(K key, Double defaultValue) { - return Convert.toDouble(getStr(key), defaultValue); + return Convert.toDouble(getString(key), defaultValue); } @Override default Byte getByte(K key, Byte defaultValue) { - return Convert.toByte(getStr(key), defaultValue); + return Convert.toByte(getString(key), defaultValue); } @Override default BigDecimal getBigDecimal(K key, BigDecimal defaultValue) { - return Convert.toBigDecimal(getStr(key), defaultValue); + return Convert.toBigDecimal(getString(key), defaultValue); } @Override default BigInteger getBigInteger(K key, BigInteger defaultValue) { - return Convert.toBigInteger(getStr(key), defaultValue); + return Convert.toBigInteger(getString(key), defaultValue); } @Override default > E getEnum(Class clazz, K key, E defaultValue) { - return Convert.toEnum(clazz, getStr(key), defaultValue); + return Convert.toEnum(clazz, getString(key), defaultValue); } @Override default Date getDate(K key, Date defaultValue) { - return Convert.toDate(getStr(key), defaultValue); + return Convert.toDate(getString(key), defaultValue); } } diff --git a/bus-core/src/main/java/org/aoju/bus/core/getter/OptNullType.java b/bus-core/src/main/java/org/aoju/bus/core/getter/OptNullType.java index 63d94a8b8d..2a9ba3eb2a 100755 --- a/bus-core/src/main/java/org/aoju/bus/core/getter/OptNullType.java +++ b/bus-core/src/main/java/org/aoju/bus/core/getter/OptNullType.java @@ -40,8 +40,8 @@ public interface OptNullType extends BasicType, OptBasicType { @Override - default Object getObj(K key) { - return getObj(key, null); + default Object getObject(K key) { + return getObject(key, null); } /** @@ -52,8 +52,8 @@ default Object getObj(K key) { * @return 属性值 */ @Override - default String getStr(K key) { - return this.getStr(key, null); + default String getString(K key) { + return this.getString(key, null); } /** @@ -88,8 +88,8 @@ default Short getShort(K key) { * @return 属性值 */ @Override - default Boolean getBool(K key) { - return this.getBool(key, null); + default Boolean getBoolean(K key) { + return this.getBoolean(key, null); } /** diff --git a/bus-core/src/main/java/org/aoju/bus/core/image/Removal.java b/bus-core/src/main/java/org/aoju/bus/core/image/Removal.java index 2dc0ebd94a..561a450c94 100644 --- a/bus-core/src/main/java/org/aoju/bus/core/image/Removal.java +++ b/bus-core/src/main/java/org/aoju/bus/core/image/Removal.java @@ -300,7 +300,7 @@ public static String getMainColor(BufferedImage bufferedImage) { } } - Map map = new HashMap<>(list.size()); + final Map map = new HashMap<>(list.size(), 1); for (String string : list) { Integer integer = map.get(string); if (integer == null) { diff --git a/bus-core/src/main/java/org/aoju/bus/core/instance/Instances.java b/bus-core/src/main/java/org/aoju/bus/core/instance/Instances.java index 69c8608907..8ea4e2f2ab 100755 --- a/bus-core/src/main/java/org/aoju/bus/core/instance/Instances.java +++ b/bus-core/src/main/java/org/aoju/bus/core/instance/Instances.java @@ -167,21 +167,21 @@ public static T singletion(String className, Object... params) { /** * 将已有对象放入单例中,其Class做为键 * - * @param obj 对象 + * @param object 对象 */ - public static void put(Object obj) { - Assert.notNull(obj, "Bean object must be not null !"); - put(obj.getClass().getName(), obj); + public static void put(Object object) { + Assert.notNull(object, "Bean object must be not null !"); + put(object.getClass().getName(), object); } /** * 将已有对象放入单例中,key做为键 * - * @param key 键 - * @param obj 对象 + * @param key 键 + * @param object 对象 */ - public static void put(String key, Object obj) { - POOL.put(key, obj); + public static void put(String key, Object object) { + POOL.put(key, object); } /** diff --git a/bus-core/src/main/java/org/aoju/bus/core/io/AbstractBlending.java b/bus-core/src/main/java/org/aoju/bus/core/io/Blending.java similarity index 95% rename from bus-core/src/main/java/org/aoju/bus/core/io/AbstractBlending.java rename to bus-core/src/main/java/org/aoju/bus/core/io/Blending.java index fb47e38b80..3cabfc10cf 100755 --- a/bus-core/src/main/java/org/aoju/bus/core/io/AbstractBlending.java +++ b/bus-core/src/main/java/org/aoju/bus/core/io/Blending.java @@ -25,6 +25,9 @@ ********************************************************************************/ package org.aoju.bus.core.io; +import org.aoju.bus.core.io.buffer.Buffer; +import org.aoju.bus.core.io.source.BufferSource; + import java.util.*; /** @@ -33,12 +36,12 @@ * @author Kimi Liu * @since Java 17+ */ -public class AbstractBlending extends AbstractList implements RandomAccess { +public class Blending extends AbstractList implements RandomAccess { - final ByteString[] byteStrings; - final int[] trie; + public final ByteString[] byteStrings; + public final int[] trie; - private AbstractBlending(ByteString[] byteStrings, int[] trie) { + private Blending(ByteString[] byteStrings, int[] trie) { this.byteStrings = byteStrings; this.trie = trie; } @@ -49,10 +52,10 @@ private AbstractBlending(ByteString[] byteStrings, int[] trie) { * @param byteStrings 字符串 * @return the object */ - public static AbstractBlending of(ByteString... byteStrings) { + public static Blending of(ByteString... byteStrings) { if (byteStrings.length == 0) { // 没有选择,我们必须总是返回-1,创建一个空集合 - return new AbstractBlending(new ByteString[0], new int[]{0, -1}); + return new Blending(new ByteString[0], new int[]{0, -1}); } // 对在递归构建时需要的字节字符串排序。将排序后的索引映射到调用者的索引 @@ -99,7 +102,7 @@ public static AbstractBlending of(ByteString... byteStrings) { throw new AssertionError(); } - return new AbstractBlending(byteStrings.clone(), trie); + return new Blending(byteStrings.clone(), trie); } /** diff --git a/bus-core/src/main/java/org/aoju/bus/core/io/ByteString.java b/bus-core/src/main/java/org/aoju/bus/core/io/ByteString.java index cd0547c520..b5f74ef706 100755 --- a/bus-core/src/main/java/org/aoju/bus/core/io/ByteString.java +++ b/bus-core/src/main/java/org/aoju/bus/core/io/ByteString.java @@ -26,6 +26,7 @@ package org.aoju.bus.core.io; import org.aoju.bus.core.codec.Base64; +import org.aoju.bus.core.io.buffer.Buffer; import org.aoju.bus.core.lang.Algorithm; import org.aoju.bus.core.lang.Charset; import org.aoju.bus.core.lang.Normal; @@ -43,7 +44,7 @@ import java.util.Arrays; /** - * 不可变的字节序列. + * 不可变的字节序列 * * @author Kimi Liu * @since Java 17+ @@ -56,12 +57,14 @@ public class ByteString implements Serializable, Comparable { private byte[] data; private transient String utf8; + public ByteString() { + + } + public ByteString(byte[] data) { this.data = data; } - public ByteString() { - } public static ByteString of(byte... data) { if (null == data) { @@ -158,21 +161,6 @@ public static ByteString read(InputStream in, int byteCount) throws IOException return new ByteString(result); } - static int codePointIndexToCharIndex(String s, int codePointCount) { - for (int i = 0, j = 0, length = s.length(), c; i < length; i += Character.charCount(c)) { - if (j == codePointCount) { - return i; - } - c = s.codePointAt(i); - if ((Character.isISOControl(c) && c != Symbol.C_LF && c != Symbol.C_CR) - || c == Buffer.REPLACEMENT_CHARACTER) { - return -1; - } - j++; - } - return s.length(); - } - public String utf8() { String result = utf8; // We don't care if we double-allocate in racy code. diff --git a/bus-core/src/main/java/org/aoju/bus/core/io/EventFactory.java b/bus-core/src/main/java/org/aoju/bus/core/io/EventFactory.java deleted file mode 100755 index 192f87a5c7..0000000000 --- a/bus-core/src/main/java/org/aoju/bus/core/io/EventFactory.java +++ /dev/null @@ -1,38 +0,0 @@ -/********************************************************************************* - * * - * The MIT License (MIT) * - * * - * Copyright (c) 2015-2022 aoju.org and other contributors. * - * * - * Permission is hereby granted, free of charge, to any person obtaining a copy * - * of this software and associated documentation files (the "Software"), to deal * - * in the Software without restriction, including without limitation the rights * - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * - * copies of the Software, and to permit persons to whom the Software is * - * furnished to do so, subject to the following conditions: * - * * - * The above copyright notice and this permission notice shall be included in * - * all copies or substantial portions of the Software. * - * * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * - * THE SOFTWARE. * - * * - ********************************************************************************/ -package org.aoju.bus.core.io; - -/** - * @author Kimi Liu - * @since Java 17+ - */ -public interface EventFactory { - - T newInstance(); - - void restEntity(T entity); - -} diff --git a/bus-core/src/main/java/org/aoju/bus/core/io/FileOperator.java b/bus-core/src/main/java/org/aoju/bus/core/io/FileOperator.java deleted file mode 100644 index db384809b4..0000000000 --- a/bus-core/src/main/java/org/aoju/bus/core/io/FileOperator.java +++ /dev/null @@ -1,83 +0,0 @@ -/********************************************************************************* - * * - * The MIT License (MIT) * - * * - * Copyright (c) 2015-2022 aoju.org and other contributors. * - * * - * Permission is hereby granted, free of charge, to any person obtaining a copy * - * of this software and associated documentation files (the "Software"), to deal * - * in the Software without restriction, including without limitation the rights * - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * - * copies of the Software, and to permit persons to whom the Software is * - * furnished to do so, subject to the following conditions: * - * * - * The above copyright notice and this permission notice shall be included in * - * all copies or substantial portions of the Software. * - * * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * - * THE SOFTWARE. * - * * - ********************************************************************************/ -package org.aoju.bus.core.io; - -import java.io.EOFException; -import java.io.IOException; -import java.nio.channels.FileChannel; - -/** - * 读取和写入目标文件 - * - * @author Kimi Liu - * @since Java 17+ - */ -public final class FileOperator { - - private final FileChannel fileChannel; - - public FileOperator(FileChannel fileChannel) { - this.fileChannel = fileChannel; - } - - /** - * 将{@code byteCount}字节从{@code source}写到{@code pos}的文件中 - * - * @param pos 写入大小 - * @param source 缓存流信息 - * @param byteCount 字节流大小 - * @throws IOException 异常 - */ - public void write(long pos, Buffer source, long byteCount) throws IOException { - if (byteCount < 0 || byteCount > source.size()) throw new IndexOutOfBoundsException(); - - while (byteCount > 0L) { - long bytesWritten = fileChannel.transferFrom(source, pos, byteCount); - pos += bytesWritten; - byteCount -= bytesWritten; - } - } - - /** - * 将{@code byteCount}字节从文件{@code pos}复制到{@code source} - * 调用者有责任确保有足够的字节来读取:如果没有,这个方法会抛出一个{@link EOFException} - * - * @param pos 写入大小 - * @param sink 缓存流信息 - * @param byteCount 字节流大小 - * @throws IOException 异常 - */ - public void read(long pos, Buffer sink, long byteCount) throws IOException { - if (byteCount < 0) throw new IndexOutOfBoundsException(); - - while (byteCount > 0L) { - long bytesRead = fileChannel.transferTo(pos, byteCount, sink); - pos += bytesRead; - byteCount -= bytesRead; - } - } - -} diff --git a/bus-core/src/main/java/org/aoju/bus/core/io/FileSystem.java b/bus-core/src/main/java/org/aoju/bus/core/io/FileSystem.java deleted file mode 100755 index aedf571f86..0000000000 --- a/bus-core/src/main/java/org/aoju/bus/core/io/FileSystem.java +++ /dev/null @@ -1,129 +0,0 @@ -/********************************************************************************* - * * - * The MIT License (MIT) * - * * - * Copyright (c) 2015-2022 aoju.org and other contributors. * - * * - * Permission is hereby granted, free of charge, to any person obtaining a copy * - * of this software and associated documentation files (the "Software"), to deal * - * in the Software without restriction, including without limitation the rights * - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * - * copies of the Software, and to permit persons to whom the Software is * - * furnished to do so, subject to the following conditions: * - * * - * The above copyright notice and this permission notice shall be included in * - * all copies or substantial portions of the Software. * - * * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * - * THE SOFTWARE. * - * * - ********************************************************************************/ -package org.aoju.bus.core.io; - -import org.aoju.bus.core.toolkit.IoKit; - -import java.io.File; -import java.io.FileNotFoundException; -import java.io.IOException; - -/** - * 访问分层数据存储上的读写文件 大多数调用者应该使用{@link #SYSTEM} - * 实现,它使用主机的本地文件系统 备用 - * 实现可用于注入错误(用于测试)或转换存储的数据(用于添加) - * 例如加密) - * - * @author Kimi Liu - * @since Java 17+ - */ -public interface FileSystem { - - FileSystem SYSTEM = new FileSystem() { - @Override - public Source source(File file) throws FileNotFoundException { - return IoKit.source(file); - } - - @Override - public Sink sink(File file) throws FileNotFoundException { - try { - return IoKit.sink(file); - } catch (FileNotFoundException e) { - file.getParentFile().mkdirs(); - return IoKit.sink(file); - } - } - - @Override - public Sink appendingSink(File file) throws FileNotFoundException { - try { - return IoKit.appendingSink(file); - } catch (FileNotFoundException e) { - file.getParentFile().mkdirs(); - return IoKit.appendingSink(file); - } - } - - @Override - public void delete(File file) throws IOException { - if (!file.delete() && file.exists()) { - throw new IOException("failed to delete " + file); - } - } - - @Override - public boolean exists(File file) { - return file.exists(); - } - - @Override - public long size(File file) { - return file.length(); - } - - @Override - public void rename(File from, File to) throws IOException { - delete(to); - if (!from.renameTo(to)) { - throw new IOException("failed to rename " + from + " to " + to); - } - } - - @Override - public void deleteContents(File directory) throws IOException { - File[] files = directory.listFiles(); - if (null == files) { - throw new IOException("not a readable directory: " + directory); - } - for (File file : files) { - if (file.isDirectory()) { - deleteContents(file); - } - if (!file.delete()) { - throw new IOException("failed to delete " + file); - } - } - } - }; - - Source source(File file) throws FileNotFoundException; - - Sink sink(File file) throws FileNotFoundException; - - Sink appendingSink(File file) throws FileNotFoundException; - - void delete(File file) throws IOException; - - boolean exists(File file); - - long size(File file); - - void rename(File from, File to) throws IOException; - - void deleteContents(File directory) throws IOException; - -} diff --git a/bus-core/src/main/java/org/aoju/bus/core/io/HashSink.java b/bus-core/src/main/java/org/aoju/bus/core/io/HashSink.java deleted file mode 100755 index 3e760293c8..0000000000 --- a/bus-core/src/main/java/org/aoju/bus/core/io/HashSink.java +++ /dev/null @@ -1,125 +0,0 @@ -/********************************************************************************* - * * - * The MIT License (MIT) * - * * - * Copyright (c) 2015-2022 aoju.org and other contributors. * - * * - * Permission is hereby granted, free of charge, to any person obtaining a copy * - * of this software and associated documentation files (the "Software"), to deal * - * in the Software without restriction, including without limitation the rights * - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * - * copies of the Software, and to permit persons to whom the Software is * - * furnished to do so, subject to the following conditions: * - * * - * The above copyright notice and this permission notice shall be included in * - * all copies or substantial portions of the Software. * - * * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * - * THE SOFTWARE. * - * * - ********************************************************************************/ -package org.aoju.bus.core.io; - -import org.aoju.bus.core.lang.Algorithm; -import org.aoju.bus.core.toolkit.IoKit; - -import javax.crypto.Mac; -import javax.crypto.spec.SecretKeySpec; -import java.io.IOException; -import java.security.InvalidKeyException; -import java.security.MessageDigest; -import java.security.NoSuchAlgorithmException; - -/** - * 一个接收器,计算它接受的全部字节流的哈希值 若要使用,请创建 - * 使用您首选的哈希算法实例 将所有数据写入接收器,然后调用 - * {@link #hash()}来计算最终的哈希值 - * - * @author Kimi Liu - * @since Java 17+ - */ -public final class HashSink extends DelegateSink { - - private final MessageDigest messageDigest; - private final Mac mac; - - private HashSink(Sink sink, String algorithm) { - super(sink); - try { - this.messageDigest = MessageDigest.getInstance(algorithm); - this.mac = null; - } catch (NoSuchAlgorithmException e) { - throw new AssertionError(); - } - } - - private HashSink(Sink sink, ByteString key, String algorithm) { - super(sink); - try { - this.mac = Mac.getInstance(algorithm); - this.mac.init(new SecretKeySpec(key.toByteArray(), algorithm)); - this.messageDigest = null; - } catch (NoSuchAlgorithmException e) { - throw new AssertionError(); - } catch (InvalidKeyException e) { - throw new IllegalArgumentException(e); - } - } - - public static HashSink md5(Sink sink) { - return new HashSink(sink, Algorithm.MD5.getValue()); - } - - public static HashSink sha1(Sink sink) { - return new HashSink(sink, Algorithm.SHA1.getValue()); - } - - public static HashSink sha256(Sink sink) { - return new HashSink(sink, Algorithm.SHA256.getValue()); - } - - public static HashSink sha512(Sink sink) { - return new HashSink(sink, Algorithm.SHA512.getValue()); - } - - public static HashSink hmacSha1(Sink sink, ByteString key) { - return new HashSink(sink, key, Algorithm.HMACSHA1.getValue()); - } - - public static HashSink hmacSha256(Sink sink, ByteString key) { - return new HashSink(sink, key, Algorithm.HMACSHA256.getValue()); - } - - public static HashSink hmacSha512(Sink sink, ByteString key) { - return new HashSink(sink, key, Algorithm.HMACSHA512.getValue()); - } - - @Override - public void write(Buffer source, long byteCount) throws IOException { - IoKit.checkOffsetAndCount(source.size, 0, byteCount); - - long hashedCount = 0; - for (Segment s = source.head; hashedCount < byteCount; s = s.next) { - int toHash = (int) Math.min(byteCount - hashedCount, s.limit - s.pos); - if (null != messageDigest) { - messageDigest.update(s.data, s.pos, toHash); - } else { - mac.update(s.data, s.pos, toHash); - } - hashedCount += toHash; - } - - super.write(source, byteCount); - } - - public final ByteString hash() { - byte[] result = null != messageDigest ? messageDigest.digest() : mac.doFinal(); - return ByteString.of(result); - } - -} diff --git a/bus-core/src/main/java/org/aoju/bus/core/io/HashSource.java b/bus-core/src/main/java/org/aoju/bus/core/io/HashSource.java deleted file mode 100755 index 350a374746..0000000000 --- a/bus-core/src/main/java/org/aoju/bus/core/io/HashSource.java +++ /dev/null @@ -1,128 +0,0 @@ -/********************************************************************************* - * * - * The MIT License (MIT) * - * * - * Copyright (c) 2015-2022 aoju.org and other contributors. * - * * - * Permission is hereby granted, free of charge, to any person obtaining a copy * - * of this software and associated documentation files (the "Software"), to deal * - * in the Software without restriction, including without limitation the rights * - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * - * copies of the Software, and to permit persons to whom the Software is * - * furnished to do so, subject to the following conditions: * - * * - * The above copyright notice and this permission notice shall be included in * - * all copies or substantial portions of the Software. * - * * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * - * THE SOFTWARE. * - * * - ********************************************************************************/ -package org.aoju.bus.core.io; - -import org.aoju.bus.core.lang.Algorithm; - -import javax.crypto.Mac; -import javax.crypto.spec.SecretKeySpec; -import java.io.IOException; -import java.security.InvalidKeyException; -import java.security.MessageDigest; -import java.security.NoSuchAlgorithmException; - -/** - * 计算其提供的全部字节流的散列的源 若要使用,请创建 - * 使用您首选的哈希算法实例 通过读取源文件的所有字节来耗尽源文件 - * 然后调用{@link #hash()}来计算最终的哈希值 - * - * @author Kimi Liu - * @since Java 17+ - */ -public final class HashSource extends DelegateSource { - - private final MessageDigest messageDigest; - private final Mac mac; - - private HashSource(Source source, String algorithm) { - super(source); - try { - this.messageDigest = MessageDigest.getInstance(algorithm); - this.mac = null; - } catch (NoSuchAlgorithmException e) { - throw new AssertionError(); - } - } - - private HashSource(Source source, ByteString key, String algorithm) { - super(source); - try { - this.mac = Mac.getInstance(algorithm); - this.mac.init(new SecretKeySpec(key.toByteArray(), algorithm)); - this.messageDigest = null; - } catch (NoSuchAlgorithmException e) { - throw new AssertionError(); - } catch (InvalidKeyException e) { - throw new IllegalArgumentException(e); - } - } - - public static HashSource md5(Source source) { - return new HashSource(source, Algorithm.MD5.getValue()); - } - - public static HashSource sha1(Source source) { - return new HashSource(source, Algorithm.SHA1.getValue()); - } - - public static HashSource sha256(Source source) { - return new HashSource(source, Algorithm.SHA256.getValue()); - } - - public static HashSource hmacSha1(Source source, ByteString key) { - return new HashSource(source, key, Algorithm.HMACSHA1.getValue()); - } - - public static HashSource hmacSha256(Source source, ByteString key) { - return new HashSource(source, key, Algorithm.HMACSHA256.getValue()); - } - - @Override - public long read(Buffer sink, long byteCount) throws IOException { - long result = super.read(sink, byteCount); - - if (result != -1L) { - long start = sink.size - result; - - long offset = sink.size; - Segment s = sink.head; - while (offset > start) { - s = s.prev; - offset -= (s.limit - s.pos); - } - - while (offset < sink.size) { - int pos = (int) (s.pos + start - offset); - if (null != messageDigest) { - messageDigest.update(s.data, pos, s.limit - pos); - } else { - mac.update(s.data, pos, s.limit - pos); - } - offset += (s.limit - s.pos); - start = offset; - s = s.next; - } - } - - return result; - } - - public final ByteString hash() { - byte[] result = null != messageDigest ? messageDigest.digest() : mac.doFinal(); - return ByteString.of(result); - } - -} diff --git a/bus-core/src/main/java/org/aoju/bus/core/io/Pipe.java b/bus-core/src/main/java/org/aoju/bus/core/io/Pipe.java deleted file mode 100644 index 4b61cf67d0..0000000000 --- a/bus-core/src/main/java/org/aoju/bus/core/io/Pipe.java +++ /dev/null @@ -1,149 +0,0 @@ -/********************************************************************************* - * * - * The MIT License (MIT) * - * * - * Copyright (c) 2015-2022 aoju.org and other contributors. * - * * - * Permission is hereby granted, free of charge, to any person obtaining a copy * - * of this software and associated documentation files (the "Software"), to deal * - * in the Software without restriction, including without limitation the rights * - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * - * copies of the Software, and to permit persons to whom the Software is * - * furnished to do so, subject to the following conditions: * - * * - * The above copyright notice and this permission notice shall be included in * - * all copies or substantial portions of the Software. * - * * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * - * THE SOFTWARE. * - * * - ********************************************************************************/ -package org.aoju.bus.core.io; - -import java.io.IOException; - -/** - * 附加的源和汇。接收器的输出是源的输入。 - * 通常每个线程都由自己的线程访问:生产者线程向接收器写入数据,消费者线程从源读取数据 - * - * @author Kimi Liu - * @since Java 17+ - */ -public final class Pipe { - - final long maxBufferSize; - final Buffer buffer = new Buffer(); - private final Sink sink = new PipeSink(); - private final Source source = new PipeSource(); - boolean sinkClosed; - boolean sourceClosed; - - public Pipe(long maxBufferSize) { - if (maxBufferSize < 1L) { - throw new IllegalArgumentException("maxBufferSize < 1: " + maxBufferSize); - } - this.maxBufferSize = maxBufferSize; - } - - public Source source() { - return source; - } - - public Sink sink() { - return sink; - } - - final class PipeSink implements Sink { - final Timeout timeout = new Timeout(); - - @Override - public void write(Buffer source, long byteCount) throws IOException { - synchronized (buffer) { - if (sinkClosed) throw new IllegalStateException("closed"); - - while (byteCount > 0) { - if (sourceClosed) throw new IOException("source is closed"); - - long bufferSpaceAvailable = maxBufferSize - buffer.size(); - if (bufferSpaceAvailable == 0) { - // 等待,直到源耗尽缓冲区 - timeout.waitUntilNotified(buffer); - continue; - } - - long bytesToWrite = Math.min(bufferSpaceAvailable, byteCount); - buffer.write(source, bytesToWrite); - byteCount -= bytesToWrite; - // 通知源程序它可以继续读取 - buffer.notifyAll(); - } - } - } - - @Override - public void flush() throws IOException { - synchronized (buffer) { - if (sinkClosed) throw new IllegalStateException("closed"); - if (sourceClosed && buffer.size() > 0) throw new IOException("source is closed"); - } - } - - @Override - public void close() throws IOException { - synchronized (buffer) { - if (sinkClosed) return; - if (sourceClosed && buffer.size() > 0) throw new IOException("source is closed"); - sinkClosed = true; - // 通知源不再接收字节 - buffer.notifyAll(); - } - } - - @Override - public Timeout timeout() { - return timeout; - } - } - - final class PipeSource implements Source { - final Timeout timeout = new Timeout(); - - @Override - public long read(Buffer sink, long byteCount) throws IOException { - synchronized (buffer) { - if (sourceClosed) throw new IllegalStateException("closed"); - - while (buffer.size() == 0) { - if (sinkClosed) return -1L; - // 等待,直到接收器填满缓冲区 - timeout.waitUntilNotified(buffer); - } - - long result = buffer.read(sink, byteCount); - // 通知接收器它可以继续写 - buffer.notifyAll(); - return result; - } - } - - @Override - public void close() { - synchronized (buffer) { - sourceClosed = true; - // 通知接收器不需要更多的字节 - buffer.notifyAll(); - } - } - - @Override - public Timeout timeout() { - return timeout; - } - } - -} \ No newline at end of file diff --git a/bus-core/src/main/java/org/aoju/bus/core/io/StreamProgress.java b/bus-core/src/main/java/org/aoju/bus/core/io/Progress.java similarity index 98% rename from bus-core/src/main/java/org/aoju/bus/core/io/StreamProgress.java rename to bus-core/src/main/java/org/aoju/bus/core/io/Progress.java index 394d38b362..19996440b3 100755 --- a/bus-core/src/main/java/org/aoju/bus/core/io/StreamProgress.java +++ b/bus-core/src/main/java/org/aoju/bus/core/io/Progress.java @@ -31,7 +31,7 @@ * @author Kimi Liu * @since Java 17+ */ -public interface StreamProgress { +public interface Progress { /** * 开始 diff --git a/bus-core/src/main/java/org/aoju/bus/core/io/RelayBuffer.java b/bus-core/src/main/java/org/aoju/bus/core/io/RelayBuffer.java deleted file mode 100644 index 965f607b13..0000000000 --- a/bus-core/src/main/java/org/aoju/bus/core/io/RelayBuffer.java +++ /dev/null @@ -1,336 +0,0 @@ -/********************************************************************************* - * * - * The MIT License (MIT) * - * * - * Copyright (c) 2015-2022 aoju.org and other contributors. * - * * - * Permission is hereby granted, free of charge, to any person obtaining a copy * - * of this software and associated documentation files (the "Software"), to deal * - * in the Software without restriction, including without limitation the rights * - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * - * copies of the Software, and to permit persons to whom the Software is * - * furnished to do so, subject to the following conditions: * - * * - * The above copyright notice and this permission notice shall be included in * - * all copies or substantial portions of the Software. * - * * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * - * THE SOFTWARE. * - * * - ********************************************************************************/ -package org.aoju.bus.core.io; - -import org.aoju.bus.core.toolkit.IoKit; - -import java.io.File; -import java.io.IOException; -import java.io.RandomAccessFile; - -/** - * 将一个上游源复制到多个下游源。每个下游源返回与上游源相同的字节。 - * 下游源可以在上游返回数据时读取数据,也可以在上游源耗尽数据后读取数据 - * 当字节从上游返回时,它们被写入本地文件。必要时从该文件读取的下游源 - * 这个类保留一个最近从上游读取的字节的小缓冲区。减少文件I/O和数据复制 - * - * @author Kimi Liu - * @since Java 17+ - */ -final class RelayBuffer { - - static final ByteString PREFIX_CLEAN = ByteString.encodeUtf8("Httpd cache v1\n"); - static final ByteString PREFIX_DIRTY = ByteString.encodeUtf8("Httpd DIRTY :(\n"); - private static final int SOURCE_UPSTREAM = 1; - private static final int SOURCE_FILE = 2; - private static final long FILE_HEADER_SIZE = 32L; - /** - * {@code upstreamReader}从upstream提取字节时使用的缓冲区。 - * 只有{@code upstreamReader}线程可以访问这个缓冲区 - */ - final Buffer upstreamBuffer = new Buffer(); - /** - * 最近从{@link #upstream}读取的字节数。这是{@link #file}的后缀 - */ - final Buffer buffer = new Buffer(); - /** - * {@code buffer}的最大大小 - */ - final long bufferMaxSize; - /** - * 用户提供的附加数据与源数据保持一致 - */ - private final ByteString metadata; - /** - * 读取/写入上游源及其元数据的持久性. - */ - RandomAccessFile file; - /** - * 当前可以访问上游的线程。可能是零 - */ - Thread upstreamReader; - /** - * 文件具有upstream字节的完整副本,则为Null。只有{@code upstreamReader}线程可以访问这个源代码 - */ - Source upstream; - /** - * 从{@link #upstream}消耗的字节数 - */ - long upstreamPos; - /** - * 如果没有从{@code upstream}读取的字节,则为True - */ - boolean complete; - /** - * 读取此流的活动源的数目的引用计数。当递减到0时,资源被释放,所有对{@link #newSource}的调用都返回null - */ - int sourceCount; - - private RelayBuffer(RandomAccessFile file, Source upstream, long upstreamPos, ByteString metadata, - long bufferMaxSize) { - this.file = file; - this.upstream = upstream; - this.complete = null == upstream; - this.upstreamPos = upstreamPos; - this.metadata = metadata; - this.bufferMaxSize = bufferMaxSize; - } - - /** - * 创建一个从{@code upstream}读取实时流的新中继,使用{@code file}与其他源共享该数据 - * - * @param file 文件信息 - * @param upstream 缓存流 - * @param metadata 元数据 - * @param bufferMaxSize 最大值 - * @return the relay - * @throws IOException 异常 - */ - public static RelayBuffer edit( - File file, Source upstream, ByteString metadata, long bufferMaxSize) throws IOException { - RandomAccessFile randomAccessFile = new RandomAccessFile(file, "rw"); - RelayBuffer result = new RelayBuffer(randomAccessFile, upstream, 0L, metadata, bufferMaxSize); - - randomAccessFile.setLength(0L); - result.writeHeader(PREFIX_DIRTY, -1L, -1L); - - return result; - } - - /** - * 创建一个从{@code file}读取记录流的中继 - * - * @param file 文件信息 - * @return the relay - * @throws IOException 异常 - */ - public static RelayBuffer read(File file) throws IOException { - RandomAccessFile randomAccessFile = new RandomAccessFile(file, "rw"); - FileOperator fileOperator = new FileOperator(randomAccessFile.getChannel()); - - // Read the header. - Buffer header = new Buffer(); - fileOperator.read(0, header, FILE_HEADER_SIZE); - ByteString prefix = header.readByteString(PREFIX_CLEAN.size()); - if (!prefix.equals(PREFIX_CLEAN)) throw new IOException("unreadable cache file"); - long upstreamSize = header.readLong(); - long metadataSize = header.readLong(); - - // Read the metadata. - Buffer metadataBuffer = new Buffer(); - fileOperator.read(FILE_HEADER_SIZE + upstreamSize, metadataBuffer, metadataSize); - ByteString metadata = metadataBuffer.readByteString(); - - // Return the result. - return new RelayBuffer(randomAccessFile, null, upstreamSize, metadata, 0L); - } - - private void writeHeader( - ByteString prefix, long upstreamSize, long metadataSize) throws IOException { - Buffer header = new Buffer(); - header.write(prefix); - header.writeLong(upstreamSize); - header.writeLong(metadataSize); - if (header.size() != FILE_HEADER_SIZE) throw new IllegalArgumentException(); - - FileOperator fileOperator = new FileOperator(file.getChannel()); - fileOperator.write(0, header, FILE_HEADER_SIZE); - } - - private void writeMetadata(long upstreamSize) throws IOException { - Buffer metadataBuffer = new Buffer(); - metadataBuffer.write(metadata); - - FileOperator fileOperator = new FileOperator(file.getChannel()); - fileOperator.write(FILE_HEADER_SIZE + upstreamSize, metadataBuffer, metadata.size()); - } - - void commit(long upstreamSize) throws IOException { - // 将元数据写入文件末尾 - writeMetadata(upstreamSize); - file.getChannel().force(false); - - writeHeader(PREFIX_CLEAN, upstreamSize, metadata.size()); - file.getChannel().force(false); - - synchronized (RelayBuffer.this) { - complete = true; - } - - IoKit.close(upstream); - upstream = null; - } - - boolean isClosed() { - return null == file; - } - - public ByteString metadata() { - return metadata; - } - - /** - * 返回与上游相同的字节的新源。如果此继电器已关闭,且没有其他可能的源,则返回null。 - * 在这种情况下,调用者应该在使用{@link #read}构建新中继后重试 - * - * @return 缓冲字节流 - */ - public Source newSource() { - synchronized (RelayBuffer.this) { - if (null == file) { - return null; - } - sourceCount++; - } - - return new RelaySource(); - } - - class RelaySource implements Source { - private final Timeout timeout = new Timeout(); - - /** - * 读取和写入共享文件的操作符。如果此源已关闭,则为null - */ - private FileOperator fileOperator = new FileOperator(file.getChannel()); - - /** - * 下一个要读的字节。它总是小于或等于{@code upstreamPos} - */ - private long sourcePos; - - @Override - public long read(Buffer sink, long byteCount) throws IOException { - if (null == fileOperator) { - throw new IllegalStateException("closed"); - } - - long upstreamPos; - int source; - - selectSource: - synchronized (RelayBuffer.this) { - while (sourcePos == (upstreamPos = RelayBuffer.this.upstreamPos)) { - if (complete) return -1L; - - // 另一个线程已经读取,等待 - if (null != upstreamReader) { - timeout.waitUntilNotified(RelayBuffer.this); - continue; - } - upstreamReader = Thread.currentThread(); - source = SOURCE_UPSTREAM; - break selectSource; - } - - long bufferPos = upstreamPos - buffer.size(); - - // 读的字节在缓冲区之前。从文件中读取 - if (sourcePos < bufferPos) { - source = SOURCE_FILE; - break selectSource; - } - - // 缓冲区有需要的数据。从那里读取并立即返回 - long bytesToRead = Math.min(byteCount, upstreamPos - sourcePos); - buffer.copyTo(sink, sourcePos - bufferPos, bytesToRead); - sourcePos += bytesToRead; - return bytesToRead; - } - - if (source == SOURCE_FILE) { - long bytesToRead = Math.min(byteCount, upstreamPos - sourcePos); - fileOperator.read(FILE_HEADER_SIZE + sourcePos, sink, bytesToRead); - sourcePos += bytesToRead; - return bytesToRead; - } - - // 从upstream读取。这总是读取一个完整的缓冲区:这可能比当前调用Source.read()所请求的要多 - try { - long upstreamBytesRead = upstream.read(upstreamBuffer, bufferMaxSize); - - if (upstreamBytesRead == -1L) { - commit(upstreamPos); - return -1L; - } - - // 更新此源并准备此调用的结果 - long bytesRead = Math.min(upstreamBytesRead, byteCount); - upstreamBuffer.copyTo(sink, 0, bytesRead); - sourcePos += bytesRead; - - // 将upstream字节追加到文件中。 - fileOperator.write( - FILE_HEADER_SIZE + upstreamPos, upstreamBuffer.clone(), upstreamBytesRead); - - synchronized (RelayBuffer.this) { - // 向缓冲区追加新的upstream - buffer.write(upstreamBuffer, upstreamBytesRead); - if (buffer.size() > bufferMaxSize) { - buffer.skip(buffer.size() - bufferMaxSize); - } - - // 既然文件和缓冲区都有,就调整upstreamPos - RelayBuffer.this.upstreamPos += upstreamBytesRead; - } - - return bytesRead; - } finally { - synchronized (RelayBuffer.this) { - upstreamReader = null; - RelayBuffer.this.notifyAll(); - } - } - } - - @Override - public Timeout timeout() { - return timeout; - } - - @Override - public void close() throws IOException { - if (null == fileOperator) { - return; - } - fileOperator = null; - - RandomAccessFile fileToClose = null; - synchronized (RelayBuffer.this) { - sourceCount--; - if (sourceCount == 0) { - fileToClose = file; - file = null; - } - } - - if (null != fileToClose) { - IoKit.close(fileToClose); - } - } - } - -} diff --git a/bus-core/src/main/java/org/aoju/bus/core/io/RingBuffer.java b/bus-core/src/main/java/org/aoju/bus/core/io/RingBuffer.java deleted file mode 100755 index b2d111b3fd..0000000000 --- a/bus-core/src/main/java/org/aoju/bus/core/io/RingBuffer.java +++ /dev/null @@ -1,232 +0,0 @@ -/********************************************************************************* - * * - * The MIT License (MIT) * - * * - * Copyright (c) 2015-2022 aoju.org and other contributors. * - * * - * Permission is hereby granted, free of charge, to any person obtaining a copy * - * of this software and associated documentation files (the "Software"), to deal * - * in the Software without restriction, including without limitation the rights * - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * - * copies of the Software, and to permit persons to whom the Software is * - * furnished to do so, subject to the following conditions: * - * * - * The above copyright notice and this permission notice shall be included in * - * all copies or substantial portions of the Software. * - * * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * - * THE SOFTWARE. * - * * - ********************************************************************************/ -package org.aoju.bus.core.io; - -import java.util.concurrent.locks.Condition; -import java.util.concurrent.locks.ReentrantLock; - -/** - * @author Kimi Liu - * @since Java 17+ - */ -public final class RingBuffer { - - private static final byte READABLE = 1, READING = 1 << 1, WRITEABLE = 1 << 2, WRITING = 1 << 3; - /** - * 排队的项目 - */ - private final Node[] items; - /** - * 主锁保护所有入口 - */ - private final ReentrantLock lock; - /** - * 等待条件 - */ - private final Condition notEmpty; - /** - * 等待权条件 - */ - private final Condition notFull; - private final EventFactory eventFactory; - /** - * 项目索引为下一次采取,投票删除 - */ - private int takeIndex; - /** - * 项目索引的下一个出售,出价,或增加 - */ - private int putIndex; - private volatile boolean needFullSingle = false; - private volatile boolean needEmptySingle = false; - - public RingBuffer(int capacity, EventFactory factory) { - if (capacity <= 0) - throw new IllegalArgumentException(); - this.items = new Node[capacity]; - lock = new ReentrantLock(false); - notEmpty = lock.newCondition(); - notFull = lock.newCondition(); - this.eventFactory = factory; - } - - public int nextWriteIndex() throws InterruptedException { - final ReentrantLock lock = this.lock; - lock.lockInterruptibly(); - try { - notFullSignal(); - final Node[] items = this.items; - Node node = items[putIndex]; - if (null == node) { - node = new Node<>(eventFactory.newInstance()); - node.status = WRITEABLE; - items[putIndex] = node; - } - while (node.status != WRITEABLE) { - notFull.await(); - notFullSignal(); - node = items[putIndex]; - } - - node.status = WRITING; - int index = putIndex; - if (++putIndex == items.length) - putIndex = 0; - return index; - } finally { - lock.unlock(); - } - } - - public int tryNextWriteIndex() throws InterruptedException { - final ReentrantLock lock = this.lock; - lock.lockInterruptibly(); - try { - notFullSignal(); - final Node[] items = this.items; - Node node = items[putIndex]; - if (null == node) { - node = new Node<>(eventFactory.newInstance()); - node.status = WRITEABLE; - items[putIndex] = node; - } - if (node.status != WRITEABLE) { - return -1; - } - - node.status = WRITING; - int index = putIndex; - if (++putIndex == items.length) - putIndex = 0; - return index; - } finally { - lock.unlock(); - } - } - - public void publishWriteIndex(int sequence) { - Node node = items[sequence]; - if (node.status != WRITING) { - throw new RuntimeException("invalid status"); - } - node.status = READABLE; - final ReentrantLock lock = this.lock; - needEmptySingle = true; - if (lock.tryLock()) { - try { - notFullSignal(); - } finally { - lock.unlock(); - } - } - } - - public T get(int sequence) { - return items[sequence].entity; - } - - public int tryNextReadIndex() { - final ReentrantLock lock = this.lock; - lock.lock(); - try { - notFullSignal(); - final Node[] items = this.items; - Node x = items[takeIndex]; - if (null == x || x.status != READABLE) { - return -1; - } - x.status = READING; - int index = takeIndex; - if (++takeIndex == items.length) - takeIndex = 0; - return index; - } finally { - lock.unlock(); - } - } - - public int nextReadIndex() throws InterruptedException { - final ReentrantLock lock = this.lock; - lock.lockInterruptibly(); - try { - notFullSignal(); - final Node[] items = this.items; - Node x = items[takeIndex]; - while (null == x || x.status != READABLE) { - notEmpty.await(); - notFullSignal(); - x = items[takeIndex]; - } - x.status = READING; - int index = takeIndex; - if (++takeIndex == items.length) - takeIndex = 0; - return index; - } finally { - lock.unlock(); - } - } - - private void notFullSignal() { - if (needFullSingle) { - notFull.signal(); - needFullSingle = false; - } - if (needEmptySingle) { - notEmpty.signal(); - needEmptySingle = false; - } - } - - public void publishReadIndex(int sequence) { - Node node = items[sequence]; - if (node.status != READING) { - throw new RuntimeException("invalid status"); - } - eventFactory.restEntity(node.entity); - node.status = WRITEABLE; - final ReentrantLock lock = this.lock; - needFullSingle = true; - if (lock.tryLock()) { - try { - notFullSignal(); - } finally { - lock.unlock(); - } - } - } - - class Node { - - byte status; - T1 entity; - - Node(T1 entity) { - this.entity = entity; - } - } - -} diff --git a/bus-core/src/main/java/org/aoju/bus/core/io/Segment.java b/bus-core/src/main/java/org/aoju/bus/core/io/Segment.java index aa7045b00e..75a9f7fd66 100755 --- a/bus-core/src/main/java/org/aoju/bus/core/io/Segment.java +++ b/bus-core/src/main/java/org/aoju/bus/core/io/Segment.java @@ -41,7 +41,7 @@ * @author Kimi Liu * @since Java 17+ */ -public final class Segment { +public class Segment { /** * 所有段的大小(以字节为单位) @@ -85,13 +85,13 @@ public final class Segment { */ public Segment prev; - Segment() { + public Segment() { this.data = new byte[SIZE]; this.owner = true; this.shared = false; } - Segment(byte[] data, int pos, int limit, boolean shared, boolean owner) { + public Segment(byte[] data, int pos, int limit, boolean shared, boolean owner) { this.data = data; this.pos = pos; this.limit = limit; @@ -117,7 +117,7 @@ public final Segment pop() { return result; } - public final Segment push(Segment segment) { + public Segment push(Segment segment) { segment.prev = this; segment.next = next; next.prev = segment; @@ -125,7 +125,7 @@ public final Segment push(Segment segment) { return segment; } - public final Segment split(int byteCount) { + public Segment split(int byteCount) { if (byteCount <= 0 || byteCount > limit - pos) throw new IllegalArgumentException(); Segment prefix; @@ -142,7 +142,7 @@ public final Segment split(int byteCount) { return prefix; } - public final void compact() { + public void compact() { if (prev == this) { throw new IllegalStateException(); } @@ -159,7 +159,7 @@ public final void compact() { LifeCycle.recycle(this); } - public final void writeTo(Segment sink, int byteCount) { + public void writeTo(Segment sink, int byteCount) { if (!sink.owner) throw new IllegalArgumentException(); if (sink.limit + byteCount > SIZE) { if (sink.shared) throw new IllegalArgumentException(); diff --git a/bus-core/src/main/java/org/aoju/bus/core/io/Buffer.java b/bus-core/src/main/java/org/aoju/bus/core/io/buffer/Buffer.java similarity index 98% rename from bus-core/src/main/java/org/aoju/bus/core/io/Buffer.java rename to bus-core/src/main/java/org/aoju/bus/core/io/buffer/Buffer.java index 76184fd85a..542d809ea2 100755 --- a/bus-core/src/main/java/org/aoju/bus/core/io/Buffer.java +++ b/bus-core/src/main/java/org/aoju/bus/core/io/buffer/Buffer.java @@ -23,8 +23,18 @@ * THE SOFTWARE. * * * ********************************************************************************/ -package org.aoju.bus.core.io; - +package org.aoju.bus.core.io.buffer; + +import org.aoju.bus.core.io.Blending; +import org.aoju.bus.core.io.ByteString; +import org.aoju.bus.core.io.LifeCycle; +import org.aoju.bus.core.io.Segment; +import org.aoju.bus.core.io.sink.BufferSink; +import org.aoju.bus.core.io.sink.Sink; +import org.aoju.bus.core.io.source.BufferSource; +import org.aoju.bus.core.io.source.PeekSource; +import org.aoju.bus.core.io.source.Source; +import org.aoju.bus.core.io.timout.Timeout; import org.aoju.bus.core.lang.Algorithm; import org.aoju.bus.core.lang.Charset; import org.aoju.bus.core.lang.Normal; @@ -51,7 +61,7 @@ */ public class Buffer implements BufferSource, BufferSink, Cloneable, ByteChannel { - static final int REPLACEMENT_CHARACTER = '\ufffd'; + public static final int REPLACEMENT_CHARACTER = '\ufffd'; /** * 头部信息 @@ -63,6 +73,7 @@ public class Buffer implements BufferSource, BufferSink, Cloneable, ByteChannel public long size; public Buffer() { + } public final long size() { @@ -624,7 +635,7 @@ public ByteString readByteString(long byteCount) throws EOFException { } @Override - public int select(AbstractBlending options) { + public int select(Blending options) { int index = selectPrefix(options, false); if (index == -1) return -1; @@ -647,7 +658,7 @@ public int select(AbstractBlending options) { * 请注意,由于选项是按优先顺序列出的,而且第一个选项可能是另一个选项的前缀, * 这使得情况变得复杂。例如,如果缓冲区包含[ab]而选项是[abc, a],则返回-2 */ - int selectPrefix(AbstractBlending options, boolean selectTruncated) { + public int selectPrefix(Blending options, boolean selectTruncated) { Segment head = this.head; if (null == head) { if (selectTruncated) return -2; @@ -837,7 +848,7 @@ && getByte(scanLength - 1) == Symbol.C_CR && getByte(scanLength) == Symbol.C_LF) + " content=" + data.readByteString().hex() + '…'); } - String readUtf8Line(long newline) throws EOFException { + public String readUtf8Line(long newline) throws EOFException { if (newline > 0 && getByte(newline - 1) == Symbol.C_CR) { String result = readUtf8((newline - 1)); skip(2); diff --git a/bus-core/src/main/java/org/aoju/bus/core/io/ByteBuffer.java b/bus-core/src/main/java/org/aoju/bus/core/io/buffer/ByteBuffer.java similarity index 99% rename from bus-core/src/main/java/org/aoju/bus/core/io/ByteBuffer.java rename to bus-core/src/main/java/org/aoju/bus/core/io/buffer/ByteBuffer.java index e6d9a7e950..b0355da65f 100755 --- a/bus-core/src/main/java/org/aoju/bus/core/io/ByteBuffer.java +++ b/bus-core/src/main/java/org/aoju/bus/core/io/buffer/ByteBuffer.java @@ -23,8 +23,10 @@ * THE SOFTWARE. * * * ********************************************************************************/ -package org.aoju.bus.core.io; +package org.aoju.bus.core.io.buffer; +import org.aoju.bus.core.io.ByteString; +import org.aoju.bus.core.io.Segment; import org.aoju.bus.core.toolkit.IoKit; import org.aoju.bus.core.toolkit.ThreadKit; diff --git a/bus-core/src/main/java/org/aoju/bus/core/io/FastByteBuffer.java b/bus-core/src/main/java/org/aoju/bus/core/io/buffer/FastByteBuffer.java similarity index 99% rename from bus-core/src/main/java/org/aoju/bus/core/io/FastByteBuffer.java rename to bus-core/src/main/java/org/aoju/bus/core/io/buffer/FastByteBuffer.java index 1a8427fef2..5250690103 100755 --- a/bus-core/src/main/java/org/aoju/bus/core/io/FastByteBuffer.java +++ b/bus-core/src/main/java/org/aoju/bus/core/io/buffer/FastByteBuffer.java @@ -23,7 +23,7 @@ * THE SOFTWARE. * * * ********************************************************************************/ -package org.aoju.bus.core.io; +package org.aoju.bus.core.io.buffer; import org.aoju.bus.core.lang.Normal; diff --git a/bus-core/src/main/java/org/aoju/bus/core/io/PageBuffer.java b/bus-core/src/main/java/org/aoju/bus/core/io/buffer/PageBuffer.java similarity index 99% rename from bus-core/src/main/java/org/aoju/bus/core/io/PageBuffer.java rename to bus-core/src/main/java/org/aoju/bus/core/io/buffer/PageBuffer.java index 548667225b..96c3a40a4e 100755 --- a/bus-core/src/main/java/org/aoju/bus/core/io/PageBuffer.java +++ b/bus-core/src/main/java/org/aoju/bus/core/io/buffer/PageBuffer.java @@ -23,7 +23,7 @@ * THE SOFTWARE. * * * ********************************************************************************/ -package org.aoju.bus.core.io; +package org.aoju.bus.core.io.buffer; import org.aoju.bus.core.lang.Normal; import org.aoju.bus.core.toolkit.ThreadKit; diff --git a/bus-core/src/main/java/org/aoju/bus/core/io/VirtualBuffer.java b/bus-core/src/main/java/org/aoju/bus/core/io/buffer/VirtualBuffer.java similarity index 99% rename from bus-core/src/main/java/org/aoju/bus/core/io/VirtualBuffer.java rename to bus-core/src/main/java/org/aoju/bus/core/io/buffer/VirtualBuffer.java index e4c62c155e..bfdba1ce8a 100755 --- a/bus-core/src/main/java/org/aoju/bus/core/io/VirtualBuffer.java +++ b/bus-core/src/main/java/org/aoju/bus/core/io/buffer/VirtualBuffer.java @@ -23,7 +23,7 @@ * THE SOFTWARE. * * * ********************************************************************************/ -package org.aoju.bus.core.io; +package org.aoju.bus.core.io.buffer; import java.nio.ByteBuffer; diff --git a/bus-core/src/main/java/org/aoju/bus/core/io/WriteBuffer.java b/bus-core/src/main/java/org/aoju/bus/core/io/buffer/WriteBuffer.java similarity index 99% rename from bus-core/src/main/java/org/aoju/bus/core/io/WriteBuffer.java rename to bus-core/src/main/java/org/aoju/bus/core/io/buffer/WriteBuffer.java index 2bec7d536f..a856cbaf9b 100644 --- a/bus-core/src/main/java/org/aoju/bus/core/io/WriteBuffer.java +++ b/bus-core/src/main/java/org/aoju/bus/core/io/buffer/WriteBuffer.java @@ -23,7 +23,7 @@ * THE SOFTWARE. * * * ********************************************************************************/ -package org.aoju.bus.core.io; +package org.aoju.bus.core.io.buffer; import java.io.IOException; import java.io.OutputStream; diff --git a/bus-core/src/main/java/org/aoju/bus/core/io/copier/ChannelCopier.java b/bus-core/src/main/java/org/aoju/bus/core/io/copier/ChannelCopier.java index e97bfad4da..9e6a9206e0 100755 --- a/bus-core/src/main/java/org/aoju/bus/core/io/copier/ChannelCopier.java +++ b/bus-core/src/main/java/org/aoju/bus/core/io/copier/ChannelCopier.java @@ -26,7 +26,7 @@ package org.aoju.bus.core.io.copier; import org.aoju.bus.core.exception.InstrumentException; -import org.aoju.bus.core.io.StreamProgress; +import org.aoju.bus.core.io.Progress; import org.aoju.bus.core.lang.Assert; import org.aoju.bus.core.toolkit.IoKit; @@ -78,7 +78,7 @@ public ChannelCopier(int bufferSize, long count) { * @param count 拷贝总数 * @param progress 进度条 */ - public ChannelCopier(int bufferSize, long count, StreamProgress progress) { + public ChannelCopier(int bufferSize, long count, Progress progress) { super(bufferSize, count, progress); } @@ -87,7 +87,7 @@ public long copy(ReadableByteChannel source, WritableByteChannel target) { Assert.notNull(source, "InputStream is null !"); Assert.notNull(target, "OutputStream is null !"); - final StreamProgress progress = this.progress; + final Progress progress = this.progress; if (null != progress) { progress.start(); } @@ -114,7 +114,7 @@ public long copy(ReadableByteChannel source, WritableByteChannel target) { * @return 拷贝总长度 * @throws IOException IO异常 */ - private long doCopy(ReadableByteChannel source, WritableByteChannel target, ByteBuffer buffer, StreamProgress progress) throws IOException { + private long doCopy(ReadableByteChannel source, WritableByteChannel target, ByteBuffer buffer, Progress progress) throws IOException { long numToRead = this.count > 0 ? this.count : Long.MAX_VALUE; long total = 0; diff --git a/bus-core/src/main/java/org/aoju/bus/core/io/copier/IoCopier.java b/bus-core/src/main/java/org/aoju/bus/core/io/copier/IoCopier.java index f722a98cd9..d8dc902751 100755 --- a/bus-core/src/main/java/org/aoju/bus/core/io/copier/IoCopier.java +++ b/bus-core/src/main/java/org/aoju/bus/core/io/copier/IoCopier.java @@ -25,7 +25,7 @@ ********************************************************************************/ package org.aoju.bus.core.io.copier; -import org.aoju.bus.core.io.StreamProgress; +import org.aoju.bus.core.io.Progress; import org.aoju.bus.core.toolkit.IoKit; /** @@ -48,7 +48,7 @@ public abstract class IoCopier { /** * 进度条 */ - protected StreamProgress progress; + protected Progress progress; /** * 是否每次写出一个buffer内容就执行flush @@ -62,7 +62,7 @@ public abstract class IoCopier { * @param count 拷贝总数,-1表示无限制 * @param progress 进度条 */ - public IoCopier(int bufferSize, long count, StreamProgress progress) { + public IoCopier(int bufferSize, long count, Progress progress) { this.bufferSize = bufferSize > 0 ? bufferSize : IoKit.DEFAULT_BUFFER_SIZE; this.count = count <= 0 ? Long.MAX_VALUE : count; this.progress = progress; diff --git a/bus-core/src/main/java/org/aoju/bus/core/io/copier/ReaderWriterCopier.java b/bus-core/src/main/java/org/aoju/bus/core/io/copier/ReaderWriterCopier.java index 20338fe95e..f0a33341a6 100755 --- a/bus-core/src/main/java/org/aoju/bus/core/io/copier/ReaderWriterCopier.java +++ b/bus-core/src/main/java/org/aoju/bus/core/io/copier/ReaderWriterCopier.java @@ -26,7 +26,7 @@ package org.aoju.bus.core.io.copier; import org.aoju.bus.core.exception.InstrumentException; -import org.aoju.bus.core.io.StreamProgress; +import org.aoju.bus.core.io.Progress; import org.aoju.bus.core.lang.Assert; import org.aoju.bus.core.toolkit.IoKit; @@ -73,7 +73,7 @@ public ReaderWriterCopier(int bufferSize, long count) { * @param count 拷贝总数 * @param progress 进度条 */ - public ReaderWriterCopier(int bufferSize, long count, StreamProgress progress) { + public ReaderWriterCopier(int bufferSize, long count, Progress progress) { super(bufferSize, count, progress); } @@ -82,7 +82,7 @@ public long copy(Reader source, Writer target) { Assert.notNull(source, "InputStream is null !"); Assert.notNull(target, "OutputStream is null !"); - final StreamProgress progress = this.progress; + final Progress progress = this.progress; if (null != progress) { progress.start(); } @@ -110,7 +110,7 @@ public long copy(Reader source, Writer target) { * @return 拷贝总长度 * @throws IOException IO异常 */ - private long doCopy(Reader source, Writer target, char[] buffer, StreamProgress progress) throws IOException { + private long doCopy(Reader source, Writer target, char[] buffer, Progress progress) throws IOException { long numToRead = this.count > 0 ? this.count : Long.MAX_VALUE; long total = 0; diff --git a/bus-core/src/main/java/org/aoju/bus/core/io/copier/StreamCopier.java b/bus-core/src/main/java/org/aoju/bus/core/io/copier/StreamCopier.java index a6555c0974..1283033850 100755 --- a/bus-core/src/main/java/org/aoju/bus/core/io/copier/StreamCopier.java +++ b/bus-core/src/main/java/org/aoju/bus/core/io/copier/StreamCopier.java @@ -26,7 +26,7 @@ package org.aoju.bus.core.io.copier; import org.aoju.bus.core.exception.InstrumentException; -import org.aoju.bus.core.io.StreamProgress; +import org.aoju.bus.core.io.Progress; import org.aoju.bus.core.lang.Assert; import org.aoju.bus.core.toolkit.IoKit; @@ -75,7 +75,7 @@ public StreamCopier(int bufferSize, long count) { * @param count 拷贝总数 * @param progress 进度条 */ - public StreamCopier(int bufferSize, long count, StreamProgress progress) { + public StreamCopier(int bufferSize, long count, Progress progress) { super(bufferSize, count, progress); } @@ -84,7 +84,7 @@ public long copy(InputStream source, OutputStream target) { Assert.notNull(source, "InputStream is null !"); Assert.notNull(target, "OutputStream is null !"); - final StreamProgress progress = this.progress; + final Progress progress = this.progress; if (null != progress) { progress.start(); } @@ -113,7 +113,7 @@ public long copy(InputStream source, OutputStream target) { * @return 拷贝总长度 * @throws IOException IO异常 */ - private long doCopy(InputStream source, OutputStream target, byte[] buffer, StreamProgress progress) throws IOException { + private long doCopy(InputStream source, OutputStream target, byte[] buffer, Progress progress) throws IOException { long numToRead = this.count > 0 ? this.count : Long.MAX_VALUE; long total = 0; diff --git a/bus-core/src/main/java/org/aoju/bus/core/io/file/LineReadWatcher.java b/bus-core/src/main/java/org/aoju/bus/core/io/file/LineReadWatcher.java index 4f665404c1..b2041c9a47 100755 --- a/bus-core/src/main/java/org/aoju/bus/core/io/file/LineReadWatcher.java +++ b/bus-core/src/main/java/org/aoju/bus/core/io/file/LineReadWatcher.java @@ -27,7 +27,7 @@ import org.aoju.bus.core.exception.InstrumentException; import org.aoju.bus.core.io.LineHandler; -import org.aoju.bus.core.io.watchers.SimpleWatcher; +import org.aoju.bus.core.io.watcher.SimpleWatcher; import org.aoju.bus.core.toolkit.FileKit; import java.io.IOException; diff --git a/bus-core/src/main/java/org/aoju/bus/core/io/DelegateSink.java b/bus-core/src/main/java/org/aoju/bus/core/io/sink/AssignSink.java similarity index 93% rename from bus-core/src/main/java/org/aoju/bus/core/io/DelegateSink.java rename to bus-core/src/main/java/org/aoju/bus/core/io/sink/AssignSink.java index 77be3f9f0f..2338b19e6f 100755 --- a/bus-core/src/main/java/org/aoju/bus/core/io/DelegateSink.java +++ b/bus-core/src/main/java/org/aoju/bus/core/io/sink/AssignSink.java @@ -23,8 +23,10 @@ * THE SOFTWARE. * * * ********************************************************************************/ -package org.aoju.bus.core.io; +package org.aoju.bus.core.io.sink; +import org.aoju.bus.core.io.buffer.Buffer; +import org.aoju.bus.core.io.timout.Timeout; import org.aoju.bus.core.lang.Symbol; import java.io.IOException; @@ -35,11 +37,11 @@ * @author Kimi Liu * @since Java 17+ */ -public abstract class DelegateSink implements Sink { +public abstract class AssignSink implements Sink { private final Sink delegate; - public DelegateSink(Sink delegate) { + public AssignSink(Sink delegate) { if (null == delegate) { throw new IllegalArgumentException("delegate == null"); } diff --git a/bus-core/src/main/java/org/aoju/bus/core/io/BufferSink.java b/bus-core/src/main/java/org/aoju/bus/core/io/sink/BufferSink.java similarity index 96% rename from bus-core/src/main/java/org/aoju/bus/core/io/BufferSink.java rename to bus-core/src/main/java/org/aoju/bus/core/io/sink/BufferSink.java index c63084b2a8..9fd0eb3db5 100755 --- a/bus-core/src/main/java/org/aoju/bus/core/io/BufferSink.java +++ b/bus-core/src/main/java/org/aoju/bus/core/io/sink/BufferSink.java @@ -23,7 +23,11 @@ * THE SOFTWARE. * * * ********************************************************************************/ -package org.aoju.bus.core.io; +package org.aoju.bus.core.io.sink; + +import org.aoju.bus.core.io.ByteString; +import org.aoju.bus.core.io.buffer.Buffer; +import org.aoju.bus.core.io.source.Source; import java.io.IOException; import java.io.OutputStream; diff --git a/bus-core/src/main/java/org/aoju/bus/core/io/DeflaterSink.java b/bus-core/src/main/java/org/aoju/bus/core/io/sink/DeflaterSink.java old mode 100755 new mode 100644 similarity index 95% rename from bus-core/src/main/java/org/aoju/bus/core/io/DeflaterSink.java rename to bus-core/src/main/java/org/aoju/bus/core/io/sink/DeflaterSink.java index ffa69386f4..484b37d6d9 --- a/bus-core/src/main/java/org/aoju/bus/core/io/DeflaterSink.java +++ b/bus-core/src/main/java/org/aoju/bus/core/io/sink/DeflaterSink.java @@ -23,9 +23,12 @@ * THE SOFTWARE. * * * ********************************************************************************/ -package org.aoju.bus.core.io; - +package org.aoju.bus.core.io.sink; +import org.aoju.bus.core.io.LifeCycle; +import org.aoju.bus.core.io.Segment; +import org.aoju.bus.core.io.buffer.Buffer; +import org.aoju.bus.core.io.timout.Timeout; import org.aoju.bus.core.toolkit.IoKit; import java.io.IOException; @@ -33,8 +36,7 @@ /** * 这种流体的强冲刷可能导致压缩降低 每一个 - * 调用{@link #flush}立即压缩所有当前缓存的数据; - * 这种早期压缩可能不如执行的压缩有效 + * 调用{@link #flush}立即压缩所有当前缓存的数据 * * @author Kimi Liu * @since Java 17+ diff --git a/bus-core/src/main/java/org/aoju/bus/core/io/FaultHideSink.java b/bus-core/src/main/java/org/aoju/bus/core/io/sink/FaultHideSink.java similarity index 96% rename from bus-core/src/main/java/org/aoju/bus/core/io/FaultHideSink.java rename to bus-core/src/main/java/org/aoju/bus/core/io/sink/FaultHideSink.java index acc5f6e47a..3cd04bb07b 100644 --- a/bus-core/src/main/java/org/aoju/bus/core/io/FaultHideSink.java +++ b/bus-core/src/main/java/org/aoju/bus/core/io/sink/FaultHideSink.java @@ -23,7 +23,9 @@ * THE SOFTWARE. * * * ********************************************************************************/ -package org.aoju.bus.core.io; +package org.aoju.bus.core.io.sink; + +import org.aoju.bus.core.io.buffer.Buffer; import java.io.IOException; @@ -34,7 +36,7 @@ * @author Kimi Liu * @since Java 17+ */ -public class FaultHideSink extends DelegateSink { +public class FaultHideSink extends AssignSink { private boolean hasErrors; diff --git a/bus-core/src/main/java/org/aoju/bus/core/io/GzipSink.java b/bus-core/src/main/java/org/aoju/bus/core/io/sink/GzipSink.java old mode 100755 new mode 100644 similarity index 96% rename from bus-core/src/main/java/org/aoju/bus/core/io/GzipSink.java rename to bus-core/src/main/java/org/aoju/bus/core/io/sink/GzipSink.java index a6684df122..577374b94c --- a/bus-core/src/main/java/org/aoju/bus/core/io/GzipSink.java +++ b/bus-core/src/main/java/org/aoju/bus/core/io/sink/GzipSink.java @@ -23,8 +23,11 @@ * THE SOFTWARE. * * * ********************************************************************************/ -package org.aoju.bus.core.io; +package org.aoju.bus.core.io.sink; +import org.aoju.bus.core.io.Segment; +import org.aoju.bus.core.io.buffer.Buffer; +import org.aoju.bus.core.io.timout.Timeout; import org.aoju.bus.core.toolkit.IoKit; import java.io.IOException; diff --git a/bus-core/src/main/java/org/aoju/bus/core/io/RealSink.java b/bus-core/src/main/java/org/aoju/bus/core/io/sink/RealSink.java similarity index 97% rename from bus-core/src/main/java/org/aoju/bus/core/io/RealSink.java rename to bus-core/src/main/java/org/aoju/bus/core/io/sink/RealSink.java index 766f4e1aaf..fa2d7ed663 100755 --- a/bus-core/src/main/java/org/aoju/bus/core/io/RealSink.java +++ b/bus-core/src/main/java/org/aoju/bus/core/io/sink/RealSink.java @@ -23,8 +23,13 @@ * THE SOFTWARE. * * * ********************************************************************************/ -package org.aoju.bus.core.io; +package org.aoju.bus.core.io.sink; +import org.aoju.bus.core.io.ByteString; +import org.aoju.bus.core.io.Segment; +import org.aoju.bus.core.io.buffer.Buffer; +import org.aoju.bus.core.io.source.Source; +import org.aoju.bus.core.io.timout.Timeout; import org.aoju.bus.core.toolkit.IoKit; import java.io.EOFException; diff --git a/bus-core/src/main/java/org/aoju/bus/core/io/Sink.java b/bus-core/src/main/java/org/aoju/bus/core/io/sink/Sink.java similarity index 95% rename from bus-core/src/main/java/org/aoju/bus/core/io/Sink.java rename to bus-core/src/main/java/org/aoju/bus/core/io/sink/Sink.java index 66c36493e9..f5a3e9a703 100755 --- a/bus-core/src/main/java/org/aoju/bus/core/io/Sink.java +++ b/bus-core/src/main/java/org/aoju/bus/core/io/sink/Sink.java @@ -23,7 +23,10 @@ * THE SOFTWARE. * * * ********************************************************************************/ -package org.aoju.bus.core.io; +package org.aoju.bus.core.io.sink; + +import org.aoju.bus.core.io.buffer.Buffer; +import org.aoju.bus.core.io.timout.Timeout; import java.io.Closeable; import java.io.Flushable; diff --git a/bus-core/src/main/java/org/aoju/bus/core/io/DelegateSource.java b/bus-core/src/main/java/org/aoju/bus/core/io/source/AssignSource.java similarity index 93% rename from bus-core/src/main/java/org/aoju/bus/core/io/DelegateSource.java rename to bus-core/src/main/java/org/aoju/bus/core/io/source/AssignSource.java index 6c3bca623e..0f7f4fb1b8 100755 --- a/bus-core/src/main/java/org/aoju/bus/core/io/DelegateSource.java +++ b/bus-core/src/main/java/org/aoju/bus/core/io/source/AssignSource.java @@ -23,8 +23,10 @@ * THE SOFTWARE. * * * ********************************************************************************/ -package org.aoju.bus.core.io; +package org.aoju.bus.core.io.source; +import org.aoju.bus.core.io.buffer.Buffer; +import org.aoju.bus.core.io.timout.Timeout; import org.aoju.bus.core.lang.Symbol; import java.io.IOException; @@ -35,11 +37,11 @@ * @author Kimi Liu * @since Java 17+ */ -public abstract class DelegateSource implements Source { +public abstract class AssignSource implements Source { private final Source delegate; - public DelegateSource(Source delegate) { + public AssignSource(Source delegate) { if (null == delegate) { throw new IllegalArgumentException("delegate == null"); } diff --git a/bus-core/src/main/java/org/aoju/bus/core/io/BufferSource.java b/bus-core/src/main/java/org/aoju/bus/core/io/source/BufferSource.java similarity index 99% rename from bus-core/src/main/java/org/aoju/bus/core/io/BufferSource.java rename to bus-core/src/main/java/org/aoju/bus/core/io/source/BufferSource.java index 1eced001df..85b734ef95 100755 --- a/bus-core/src/main/java/org/aoju/bus/core/io/BufferSource.java +++ b/bus-core/src/main/java/org/aoju/bus/core/io/source/BufferSource.java @@ -23,7 +23,12 @@ * THE SOFTWARE. * * * ********************************************************************************/ -package org.aoju.bus.core.io; +package org.aoju.bus.core.io.source; + +import org.aoju.bus.core.io.Blending; +import org.aoju.bus.core.io.ByteString; +import org.aoju.bus.core.io.buffer.Buffer; +import org.aoju.bus.core.io.sink.Sink; import java.io.IOException; import java.io.InputStream; @@ -269,7 +274,7 @@ public interface BufferSource extends Source, ReadableByteChannel { * @return the int * @throws IOException {@link java.io.IOException} IOException. */ - int select(AbstractBlending options) throws IOException; + int select(Blending options) throws IOException; /** * Removes all bytes from this and returns them as a byte array. diff --git a/bus-core/src/main/java/org/aoju/bus/core/io/InflaterSource.java b/bus-core/src/main/java/org/aoju/bus/core/io/source/ExtractSource.java similarity index 93% rename from bus-core/src/main/java/org/aoju/bus/core/io/InflaterSource.java rename to bus-core/src/main/java/org/aoju/bus/core/io/source/ExtractSource.java index 025189a762..8e5e7bdeae 100755 --- a/bus-core/src/main/java/org/aoju/bus/core/io/InflaterSource.java +++ b/bus-core/src/main/java/org/aoju/bus/core/io/source/ExtractSource.java @@ -23,8 +23,12 @@ * THE SOFTWARE. * * * ********************************************************************************/ -package org.aoju.bus.core.io; +package org.aoju.bus.core.io.source; +import org.aoju.bus.core.io.LifeCycle; +import org.aoju.bus.core.io.Segment; +import org.aoju.bus.core.io.buffer.Buffer; +import org.aoju.bus.core.io.timout.Timeout; import org.aoju.bus.core.lang.Symbol; import org.aoju.bus.core.toolkit.IoKit; @@ -39,7 +43,7 @@ * @author Kimi Liu * @since Java 17+ */ -public final class InflaterSource implements Source { +public class ExtractSource implements Source { private final BufferSource source; private final Inflater inflater; @@ -47,11 +51,11 @@ public final class InflaterSource implements Source { private int bufferBytesHeldByInflater; private boolean closed; - public InflaterSource(Source source, Inflater inflater) { + public ExtractSource(Source source, Inflater inflater) { this(IoKit.buffer(source), inflater); } - InflaterSource(BufferSource source, Inflater inflater) { + ExtractSource(BufferSource source, Inflater inflater) { if (null == source) { throw new IllegalArgumentException("source == null"); } diff --git a/bus-core/src/main/java/org/aoju/bus/core/io/GzipSource.java b/bus-core/src/main/java/org/aoju/bus/core/io/source/GzipSource.java similarity index 93% rename from bus-core/src/main/java/org/aoju/bus/core/io/GzipSource.java rename to bus-core/src/main/java/org/aoju/bus/core/io/source/GzipSource.java index b9c32541d1..1e441af801 100755 --- a/bus-core/src/main/java/org/aoju/bus/core/io/GzipSource.java +++ b/bus-core/src/main/java/org/aoju/bus/core/io/source/GzipSource.java @@ -23,8 +23,11 @@ * THE SOFTWARE. * * * ********************************************************************************/ -package org.aoju.bus.core.io; +package org.aoju.bus.core.io.source; +import org.aoju.bus.core.io.Segment; +import org.aoju.bus.core.io.buffer.Buffer; +import org.aoju.bus.core.io.timout.Timeout; import org.aoju.bus.core.toolkit.IoKit; import java.io.EOFException; @@ -38,7 +41,7 @@ * @author Kimi Liu * @since Java 17+ */ -public final class GzipSource implements Source { +public class GzipSource implements Source { private static final byte FHCRC = 1; private static final byte FEXTRA = 2; @@ -54,7 +57,7 @@ public final class GzipSource implements Source { private final Inflater inflater; - private final InflaterSource inflaterSource; + private final ExtractSource extractSource; private final CRC32 crc = new CRC32(); @@ -66,7 +69,7 @@ public GzipSource(Source source) { } this.inflater = new Inflater(true); this.source = IoKit.buffer(source); - this.inflaterSource = new InflaterSource(this.source, inflater); + this.extractSource = new ExtractSource(this.source, inflater); } @Override @@ -81,7 +84,7 @@ public long read(Buffer sink, long byteCount) throws IOException { if (section == SECTION_BODY) { long offset = sink.size; - long result = inflaterSource.read(sink, byteCount); + long result = extractSource.read(sink, byteCount); if (result != -1) { updateCrc(sink, offset, result); return result; @@ -151,7 +154,7 @@ public Timeout timeout() { @Override public void close() throws IOException { - inflaterSource.close(); + extractSource.close(); } private void updateCrc(Buffer buffer, long offset, long byteCount) { diff --git a/bus-core/src/main/java/org/aoju/bus/core/io/PeekSource.java b/bus-core/src/main/java/org/aoju/bus/core/io/source/PeekSource.java similarity index 93% rename from bus-core/src/main/java/org/aoju/bus/core/io/PeekSource.java rename to bus-core/src/main/java/org/aoju/bus/core/io/source/PeekSource.java index f1da24bdfb..2ccf2915fe 100755 --- a/bus-core/src/main/java/org/aoju/bus/core/io/PeekSource.java +++ b/bus-core/src/main/java/org/aoju/bus/core/io/source/PeekSource.java @@ -23,7 +23,11 @@ * THE SOFTWARE. * * * ********************************************************************************/ -package org.aoju.bus.core.io; +package org.aoju.bus.core.io.source; + +import org.aoju.bus.core.io.Segment; +import org.aoju.bus.core.io.buffer.Buffer; +import org.aoju.bus.core.io.timout.Timeout; import java.io.IOException; @@ -38,7 +42,7 @@ * @author Kimi Liu * @since Java 17+ */ -final class PeekSource implements Source { +public class PeekSource implements Source { private final BufferSource upstream; private final Buffer buffer; @@ -48,7 +52,7 @@ final class PeekSource implements Source { private boolean closed; private long pos; - PeekSource(BufferSource upstream) { + public PeekSource(BufferSource upstream) { this.upstream = upstream; this.buffer = upstream.buffer(); this.expectedSegment = buffer.head; diff --git a/bus-core/src/main/java/org/aoju/bus/core/io/RealSource.java b/bus-core/src/main/java/org/aoju/bus/core/io/source/RealSource.java similarity index 97% rename from bus-core/src/main/java/org/aoju/bus/core/io/RealSource.java rename to bus-core/src/main/java/org/aoju/bus/core/io/source/RealSource.java index 103a958d45..89e7677da1 100755 --- a/bus-core/src/main/java/org/aoju/bus/core/io/RealSource.java +++ b/bus-core/src/main/java/org/aoju/bus/core/io/source/RealSource.java @@ -23,8 +23,14 @@ * THE SOFTWARE. * * * ********************************************************************************/ -package org.aoju.bus.core.io; - +package org.aoju.bus.core.io.source; + +import org.aoju.bus.core.io.Blending; +import org.aoju.bus.core.io.ByteString; +import org.aoju.bus.core.io.Segment; +import org.aoju.bus.core.io.buffer.Buffer; +import org.aoju.bus.core.io.sink.Sink; +import org.aoju.bus.core.io.timout.Timeout; import org.aoju.bus.core.lang.Normal; import org.aoju.bus.core.lang.Symbol; import org.aoju.bus.core.toolkit.IoKit; @@ -39,7 +45,7 @@ * @author Kimi Liu * @since Java 17+ */ -public final class RealSource implements BufferSource { +public class RealSource implements BufferSource { public final Buffer buffer = new Buffer(); public final Source source; @@ -127,7 +133,7 @@ public ByteString readByteString(long byteCount) throws IOException { } @Override - public int select(AbstractBlending options) throws IOException { + public int select(Blending options) throws IOException { if (closed) throw new IllegalStateException("closed"); while (true) { diff --git a/bus-core/src/main/java/org/aoju/bus/core/io/Source.java b/bus-core/src/main/java/org/aoju/bus/core/io/source/Source.java similarity index 96% rename from bus-core/src/main/java/org/aoju/bus/core/io/Source.java rename to bus-core/src/main/java/org/aoju/bus/core/io/source/Source.java index fd482b1446..c54c42a15a 100755 --- a/bus-core/src/main/java/org/aoju/bus/core/io/Source.java +++ b/bus-core/src/main/java/org/aoju/bus/core/io/source/Source.java @@ -23,7 +23,10 @@ * THE SOFTWARE. * * * ********************************************************************************/ -package org.aoju.bus.core.io; +package org.aoju.bus.core.io.source; + +import org.aoju.bus.core.io.buffer.Buffer; +import org.aoju.bus.core.io.timout.Timeout; import java.io.Closeable; import java.io.IOException; diff --git a/bus-core/src/main/java/org/aoju/bus/core/io/streams/BOMInputStream.java b/bus-core/src/main/java/org/aoju/bus/core/io/stream/BOMInputStream.java similarity index 99% rename from bus-core/src/main/java/org/aoju/bus/core/io/streams/BOMInputStream.java rename to bus-core/src/main/java/org/aoju/bus/core/io/stream/BOMInputStream.java index 7b0a14456b..82aa7300db 100755 --- a/bus-core/src/main/java/org/aoju/bus/core/io/streams/BOMInputStream.java +++ b/bus-core/src/main/java/org/aoju/bus/core/io/stream/BOMInputStream.java @@ -23,7 +23,7 @@ * THE SOFTWARE. * * * ********************************************************************************/ -package org.aoju.bus.core.io.streams; +package org.aoju.bus.core.io.stream; import org.aoju.bus.core.exception.InstrumentException; import org.aoju.bus.core.lang.Charset; diff --git a/bus-core/src/main/java/org/aoju/bus/core/io/streams/BOMReader.java b/bus-core/src/main/java/org/aoju/bus/core/io/stream/BOMReader.java similarity index 97% rename from bus-core/src/main/java/org/aoju/bus/core/io/streams/BOMReader.java rename to bus-core/src/main/java/org/aoju/bus/core/io/stream/BOMReader.java index 3e5afd951d..856005003d 100644 --- a/bus-core/src/main/java/org/aoju/bus/core/io/streams/BOMReader.java +++ b/bus-core/src/main/java/org/aoju/bus/core/io/stream/BOMReader.java @@ -1,4 +1,4 @@ -package org.aoju.bus.core.io.streams; +package org.aoju.bus.core.io.stream; import org.aoju.bus.core.lang.Assert; diff --git a/bus-core/src/main/java/org/aoju/bus/core/io/streams/FastByteOutputStream.java b/bus-core/src/main/java/org/aoju/bus/core/io/stream/FastByteOutputStream.java similarity index 98% rename from bus-core/src/main/java/org/aoju/bus/core/io/streams/FastByteOutputStream.java rename to bus-core/src/main/java/org/aoju/bus/core/io/stream/FastByteOutputStream.java index 99963c9935..93d2f9ee80 100755 --- a/bus-core/src/main/java/org/aoju/bus/core/io/streams/FastByteOutputStream.java +++ b/bus-core/src/main/java/org/aoju/bus/core/io/stream/FastByteOutputStream.java @@ -23,10 +23,10 @@ * THE SOFTWARE. * * * ********************************************************************************/ -package org.aoju.bus.core.io.streams; +package org.aoju.bus.core.io.stream; import org.aoju.bus.core.exception.InstrumentException; -import org.aoju.bus.core.io.FastByteBuffer; +import org.aoju.bus.core.io.buffer.FastByteBuffer; import org.aoju.bus.core.lang.Charset; import org.aoju.bus.core.lang.Normal; import org.aoju.bus.core.toolkit.ObjectKit; diff --git a/bus-core/src/main/java/org/aoju/bus/core/io/streams/NullOutputStream.java b/bus-core/src/main/java/org/aoju/bus/core/io/stream/NullOutputStream.java similarity index 98% rename from bus-core/src/main/java/org/aoju/bus/core/io/streams/NullOutputStream.java rename to bus-core/src/main/java/org/aoju/bus/core/io/stream/NullOutputStream.java index f9827ed19f..a7752f931a 100755 --- a/bus-core/src/main/java/org/aoju/bus/core/io/streams/NullOutputStream.java +++ b/bus-core/src/main/java/org/aoju/bus/core/io/stream/NullOutputStream.java @@ -23,7 +23,7 @@ * THE SOFTWARE. * * * ********************************************************************************/ -package org.aoju.bus.core.io.streams; +package org.aoju.bus.core.io.stream; import java.io.IOException; import java.io.OutputStream; diff --git a/bus-core/src/main/java/org/aoju/bus/core/io/streams/QueueInputStream.java b/bus-core/src/main/java/org/aoju/bus/core/io/stream/QueueInputStream.java similarity index 99% rename from bus-core/src/main/java/org/aoju/bus/core/io/streams/QueueInputStream.java rename to bus-core/src/main/java/org/aoju/bus/core/io/stream/QueueInputStream.java index 37740b2946..32f448a6b0 100644 --- a/bus-core/src/main/java/org/aoju/bus/core/io/streams/QueueInputStream.java +++ b/bus-core/src/main/java/org/aoju/bus/core/io/stream/QueueInputStream.java @@ -23,7 +23,7 @@ * THE SOFTWARE. * * * ********************************************************************************/ -package org.aoju.bus.core.io.streams; +package org.aoju.bus.core.io.stream; import org.aoju.bus.core.lang.Symbol; diff --git a/bus-core/src/main/java/org/aoju/bus/core/io/streams/QueueReader.java b/bus-core/src/main/java/org/aoju/bus/core/io/stream/QueueReader.java similarity index 99% rename from bus-core/src/main/java/org/aoju/bus/core/io/streams/QueueReader.java rename to bus-core/src/main/java/org/aoju/bus/core/io/stream/QueueReader.java index 791d8b63be..b99d6a86ea 100644 --- a/bus-core/src/main/java/org/aoju/bus/core/io/streams/QueueReader.java +++ b/bus-core/src/main/java/org/aoju/bus/core/io/stream/QueueReader.java @@ -23,7 +23,7 @@ * THE SOFTWARE. * * * ********************************************************************************/ -package org.aoju.bus.core.io.streams; +package org.aoju.bus.core.io.stream; import org.aoju.bus.core.lang.Symbol; diff --git a/bus-core/src/main/java/org/aoju/bus/core/io/streams/RandomFileInputStream.java b/bus-core/src/main/java/org/aoju/bus/core/io/stream/RandomFileInputStream.java similarity index 98% rename from bus-core/src/main/java/org/aoju/bus/core/io/streams/RandomFileInputStream.java rename to bus-core/src/main/java/org/aoju/bus/core/io/stream/RandomFileInputStream.java index 7111320076..daf8602cc5 100644 --- a/bus-core/src/main/java/org/aoju/bus/core/io/streams/RandomFileInputStream.java +++ b/bus-core/src/main/java/org/aoju/bus/core/io/stream/RandomFileInputStream.java @@ -23,7 +23,7 @@ * THE SOFTWARE. * * * ********************************************************************************/ -package org.aoju.bus.core.io.streams; +package org.aoju.bus.core.io.stream; import java.io.IOException; import java.io.InputStream; diff --git a/bus-core/src/main/java/org/aoju/bus/core/io/streams/RandomFileOutputStream.java b/bus-core/src/main/java/org/aoju/bus/core/io/stream/RandomFileOutputStream.java similarity index 98% rename from bus-core/src/main/java/org/aoju/bus/core/io/streams/RandomFileOutputStream.java rename to bus-core/src/main/java/org/aoju/bus/core/io/stream/RandomFileOutputStream.java index 765beb3fa1..5afd632114 100644 --- a/bus-core/src/main/java/org/aoju/bus/core/io/streams/RandomFileOutputStream.java +++ b/bus-core/src/main/java/org/aoju/bus/core/io/stream/RandomFileOutputStream.java @@ -23,7 +23,7 @@ * THE SOFTWARE. * * * ********************************************************************************/ -package org.aoju.bus.core.io.streams; +package org.aoju.bus.core.io.stream; import java.io.IOException; import java.io.OutputStream; diff --git a/bus-core/src/main/java/org/aoju/bus/core/io/streams/StreamBuffer.java b/bus-core/src/main/java/org/aoju/bus/core/io/stream/StreamBuffer.java similarity index 99% rename from bus-core/src/main/java/org/aoju/bus/core/io/streams/StreamBuffer.java rename to bus-core/src/main/java/org/aoju/bus/core/io/stream/StreamBuffer.java index 8977c61f8b..17a5d0e803 100644 --- a/bus-core/src/main/java/org/aoju/bus/core/io/streams/StreamBuffer.java +++ b/bus-core/src/main/java/org/aoju/bus/core/io/stream/StreamBuffer.java @@ -23,7 +23,7 @@ * THE SOFTWARE. * * * ********************************************************************************/ -package org.aoju.bus.core.io.streams; +package org.aoju.bus.core.io.stream; import org.aoju.bus.core.exception.InstrumentException; import org.aoju.bus.core.lang.Charset; diff --git a/bus-core/src/main/java/org/aoju/bus/core/io/streams/StringInputStream.java b/bus-core/src/main/java/org/aoju/bus/core/io/stream/StringInputStream.java similarity index 98% rename from bus-core/src/main/java/org/aoju/bus/core/io/streams/StringInputStream.java rename to bus-core/src/main/java/org/aoju/bus/core/io/stream/StringInputStream.java index c8470f432b..92d876aa29 100644 --- a/bus-core/src/main/java/org/aoju/bus/core/io/streams/StringInputStream.java +++ b/bus-core/src/main/java/org/aoju/bus/core/io/stream/StringInputStream.java @@ -23,7 +23,7 @@ * THE SOFTWARE. * * * ********************************************************************************/ -package org.aoju.bus.core.io.streams; +package org.aoju.bus.core.io.stream; import org.aoju.bus.core.exception.InstrumentException; import org.aoju.bus.core.lang.Charset; diff --git a/bus-core/src/main/java/org/aoju/bus/core/io/streams/StringOutputStream.java b/bus-core/src/main/java/org/aoju/bus/core/io/stream/StringOutputStream.java similarity index 98% rename from bus-core/src/main/java/org/aoju/bus/core/io/streams/StringOutputStream.java rename to bus-core/src/main/java/org/aoju/bus/core/io/stream/StringOutputStream.java index 55e8942790..ce891f8af4 100644 --- a/bus-core/src/main/java/org/aoju/bus/core/io/streams/StringOutputStream.java +++ b/bus-core/src/main/java/org/aoju/bus/core/io/stream/StringOutputStream.java @@ -23,7 +23,7 @@ * THE SOFTWARE. * * * ********************************************************************************/ -package org.aoju.bus.core.io.streams; +package org.aoju.bus.core.io.stream; import org.aoju.bus.core.lang.Charset; diff --git a/bus-core/src/main/java/org/aoju/bus/core/io/streams/StringReader.java b/bus-core/src/main/java/org/aoju/bus/core/io/stream/StringReader.java similarity index 98% rename from bus-core/src/main/java/org/aoju/bus/core/io/streams/StringReader.java rename to bus-core/src/main/java/org/aoju/bus/core/io/stream/StringReader.java index 8f52d51ca8..21611353c5 100644 --- a/bus-core/src/main/java/org/aoju/bus/core/io/streams/StringReader.java +++ b/bus-core/src/main/java/org/aoju/bus/core/io/stream/StringReader.java @@ -23,7 +23,7 @@ * THE SOFTWARE. * * * ********************************************************************************/ -package org.aoju.bus.core.io.streams; +package org.aoju.bus.core.io.stream; import java.io.IOException; import java.io.Reader; diff --git a/bus-core/src/main/java/org/aoju/bus/core/io/streams/StringWriter.java b/bus-core/src/main/java/org/aoju/bus/core/io/stream/StringWriter.java similarity index 98% rename from bus-core/src/main/java/org/aoju/bus/core/io/streams/StringWriter.java rename to bus-core/src/main/java/org/aoju/bus/core/io/stream/StringWriter.java index 392374f4d6..31afaf795f 100644 --- a/bus-core/src/main/java/org/aoju/bus/core/io/streams/StringWriter.java +++ b/bus-core/src/main/java/org/aoju/bus/core/io/stream/StringWriter.java @@ -23,7 +23,7 @@ * THE SOFTWARE. * * * ********************************************************************************/ -package org.aoju.bus.core.io.streams; +package org.aoju.bus.core.io.stream; import java.io.IOException; import java.io.Writer; diff --git a/bus-core/src/main/java/org/aoju/bus/core/io/streams/VoidInputStream.java b/bus-core/src/main/java/org/aoju/bus/core/io/stream/VoidInputStream.java similarity index 98% rename from bus-core/src/main/java/org/aoju/bus/core/io/streams/VoidInputStream.java rename to bus-core/src/main/java/org/aoju/bus/core/io/stream/VoidInputStream.java index 097d1748a8..a13e65f865 100644 --- a/bus-core/src/main/java/org/aoju/bus/core/io/streams/VoidInputStream.java +++ b/bus-core/src/main/java/org/aoju/bus/core/io/stream/VoidInputStream.java @@ -23,7 +23,7 @@ * THE SOFTWARE. * * * ********************************************************************************/ -package org.aoju.bus.core.io.streams; +package org.aoju.bus.core.io.stream; import java.io.IOException; import java.io.InputStream; diff --git a/bus-core/src/main/java/org/aoju/bus/core/io/streams/VoidOutputStream.java b/bus-core/src/main/java/org/aoju/bus/core/io/stream/VoidOutputStream.java similarity index 98% rename from bus-core/src/main/java/org/aoju/bus/core/io/streams/VoidOutputStream.java rename to bus-core/src/main/java/org/aoju/bus/core/io/stream/VoidOutputStream.java index 31184826b2..4bcc2a1197 100644 --- a/bus-core/src/main/java/org/aoju/bus/core/io/streams/VoidOutputStream.java +++ b/bus-core/src/main/java/org/aoju/bus/core/io/stream/VoidOutputStream.java @@ -23,7 +23,7 @@ * THE SOFTWARE. * * * ********************************************************************************/ -package org.aoju.bus.core.io.streams; +package org.aoju.bus.core.io.stream; import java.io.IOException; import java.io.OutputStream; diff --git a/bus-core/src/main/java/org/aoju/bus/core/io/streams/package-info.java b/bus-core/src/main/java/org/aoju/bus/core/io/stream/package-info.java similarity index 67% rename from bus-core/src/main/java/org/aoju/bus/core/io/streams/package-info.java rename to bus-core/src/main/java/org/aoju/bus/core/io/stream/package-info.java index 35cee1af78..ce79a9aa30 100644 --- a/bus-core/src/main/java/org/aoju/bus/core/io/streams/package-info.java +++ b/bus-core/src/main/java/org/aoju/bus/core/io/stream/package-info.java @@ -4,4 +4,4 @@ * @author Kimi Liu * @since Java 17+ */ -package org.aoju.bus.core.io.streams; +package org.aoju.bus.core.io.stream; diff --git a/bus-core/src/main/java/org/aoju/bus/core/io/Delegate.java b/bus-core/src/main/java/org/aoju/bus/core/io/timout/AssignTimeout.java similarity index 94% rename from bus-core/src/main/java/org/aoju/bus/core/io/Delegate.java rename to bus-core/src/main/java/org/aoju/bus/core/io/timout/AssignTimeout.java index 4ac6fbcd5a..0d00d05229 100755 --- a/bus-core/src/main/java/org/aoju/bus/core/io/Delegate.java +++ b/bus-core/src/main/java/org/aoju/bus/core/io/timout/AssignTimeout.java @@ -23,7 +23,7 @@ * THE SOFTWARE. * * * ********************************************************************************/ -package org.aoju.bus.core.io; +package org.aoju.bus.core.io.timout; import java.io.IOException; import java.util.concurrent.TimeUnit; @@ -34,11 +34,11 @@ * @author Kimi Liu * @since Java 17+ */ -public class Delegate extends Timeout { +public class AssignTimeout extends Timeout { private Timeout delegate; - public Delegate(Timeout delegate) { + public AssignTimeout(Timeout delegate) { if (null == delegate) { throw new IllegalArgumentException("delegate == null"); } @@ -49,7 +49,7 @@ public final Timeout delegate() { return delegate; } - public final Delegate setDelegate(Timeout delegate) { + public final AssignTimeout setDelegate(Timeout delegate) { if (null == delegate) { throw new IllegalArgumentException("delegate == null"); } diff --git a/bus-core/src/main/java/org/aoju/bus/core/io/AsyncTimeout.java b/bus-core/src/main/java/org/aoju/bus/core/io/timout/AsyncTimeout.java similarity index 98% rename from bus-core/src/main/java/org/aoju/bus/core/io/AsyncTimeout.java rename to bus-core/src/main/java/org/aoju/bus/core/io/timout/AsyncTimeout.java index 092fea7599..e6a3b01ff5 100755 --- a/bus-core/src/main/java/org/aoju/bus/core/io/AsyncTimeout.java +++ b/bus-core/src/main/java/org/aoju/bus/core/io/timout/AsyncTimeout.java @@ -23,8 +23,12 @@ * THE SOFTWARE. * * * ********************************************************************************/ -package org.aoju.bus.core.io; +package org.aoju.bus.core.io.timout; +import org.aoju.bus.core.io.Segment; +import org.aoju.bus.core.io.buffer.Buffer; +import org.aoju.bus.core.io.sink.Sink; +import org.aoju.bus.core.io.source.Source; import org.aoju.bus.core.lang.Normal; import org.aoju.bus.core.toolkit.IoKit; diff --git a/bus-core/src/main/java/org/aoju/bus/core/io/Timeout.java b/bus-core/src/main/java/org/aoju/bus/core/io/timout/Timeout.java similarity index 99% rename from bus-core/src/main/java/org/aoju/bus/core/io/Timeout.java rename to bus-core/src/main/java/org/aoju/bus/core/io/timout/Timeout.java index 40f3ce594d..7a55adaaf5 100755 --- a/bus-core/src/main/java/org/aoju/bus/core/io/Timeout.java +++ b/bus-core/src/main/java/org/aoju/bus/core/io/timout/Timeout.java @@ -23,7 +23,7 @@ * THE SOFTWARE. * * * ********************************************************************************/ -package org.aoju.bus.core.io; +package org.aoju.bus.core.io.timout; import java.io.IOException; import java.io.InterruptedIOException; diff --git a/bus-core/src/main/java/org/aoju/bus/core/io/watchers/DelayWatcher.java b/bus-core/src/main/java/org/aoju/bus/core/io/watcher/DelayWatcher.java similarity index 99% rename from bus-core/src/main/java/org/aoju/bus/core/io/watchers/DelayWatcher.java rename to bus-core/src/main/java/org/aoju/bus/core/io/watcher/DelayWatcher.java index aaaad912e4..4ed7c5cc26 100755 --- a/bus-core/src/main/java/org/aoju/bus/core/io/watchers/DelayWatcher.java +++ b/bus-core/src/main/java/org/aoju/bus/core/io/watcher/DelayWatcher.java @@ -23,7 +23,7 @@ * THE SOFTWARE. * * * ********************************************************************************/ -package org.aoju.bus.core.io.watchers; +package org.aoju.bus.core.io.watcher; import org.aoju.bus.core.lang.Assert; import org.aoju.bus.core.toolkit.ThreadKit; diff --git a/bus-core/src/main/java/org/aoju/bus/core/io/watchers/IgnoreWatcher.java b/bus-core/src/main/java/org/aoju/bus/core/io/watcher/IgnoreWatcher.java similarity index 98% rename from bus-core/src/main/java/org/aoju/bus/core/io/watchers/IgnoreWatcher.java rename to bus-core/src/main/java/org/aoju/bus/core/io/watcher/IgnoreWatcher.java index affbab6b7f..5492825f14 100755 --- a/bus-core/src/main/java/org/aoju/bus/core/io/watchers/IgnoreWatcher.java +++ b/bus-core/src/main/java/org/aoju/bus/core/io/watcher/IgnoreWatcher.java @@ -23,7 +23,7 @@ * THE SOFTWARE. * * * ********************************************************************************/ -package org.aoju.bus.core.io.watchers; +package org.aoju.bus.core.io.watcher; import java.nio.file.Path; import java.nio.file.WatchEvent; diff --git a/bus-core/src/main/java/org/aoju/bus/core/io/watchers/SimpleWatcher.java b/bus-core/src/main/java/org/aoju/bus/core/io/watcher/SimpleWatcher.java similarity index 98% rename from bus-core/src/main/java/org/aoju/bus/core/io/watchers/SimpleWatcher.java rename to bus-core/src/main/java/org/aoju/bus/core/io/watcher/SimpleWatcher.java index d4d514b545..b9c97e82c0 100755 --- a/bus-core/src/main/java/org/aoju/bus/core/io/watchers/SimpleWatcher.java +++ b/bus-core/src/main/java/org/aoju/bus/core/io/watcher/SimpleWatcher.java @@ -23,7 +23,7 @@ * THE SOFTWARE. * * * ********************************************************************************/ -package org.aoju.bus.core.io.watchers; +package org.aoju.bus.core.io.watcher; /** * 空白WatchListener diff --git a/bus-core/src/main/java/org/aoju/bus/core/io/watchers/WatchMonitor.java b/bus-core/src/main/java/org/aoju/bus/core/io/watcher/WatchMonitor.java similarity index 99% rename from bus-core/src/main/java/org/aoju/bus/core/io/watchers/WatchMonitor.java rename to bus-core/src/main/java/org/aoju/bus/core/io/watcher/WatchMonitor.java index a43b332fc4..73bd564046 100755 --- a/bus-core/src/main/java/org/aoju/bus/core/io/watchers/WatchMonitor.java +++ b/bus-core/src/main/java/org/aoju/bus/core/io/watcher/WatchMonitor.java @@ -23,7 +23,7 @@ * THE SOFTWARE. * * * ********************************************************************************/ -package org.aoju.bus.core.io.watchers; +package org.aoju.bus.core.io.watcher; import org.aoju.bus.core.exception.InstrumentException; import org.aoju.bus.core.lang.Symbol; diff --git a/bus-core/src/main/java/org/aoju/bus/core/io/watchers/WatchServer.java b/bus-core/src/main/java/org/aoju/bus/core/io/watcher/WatchServer.java similarity index 99% rename from bus-core/src/main/java/org/aoju/bus/core/io/watchers/WatchServer.java rename to bus-core/src/main/java/org/aoju/bus/core/io/watcher/WatchServer.java index 56d39cd74d..43d7fa71ba 100644 --- a/bus-core/src/main/java/org/aoju/bus/core/io/watchers/WatchServer.java +++ b/bus-core/src/main/java/org/aoju/bus/core/io/watcher/WatchServer.java @@ -23,7 +23,7 @@ * THE SOFTWARE. * * * ********************************************************************************/ -package org.aoju.bus.core.io.watchers; +package org.aoju.bus.core.io.watcher; import org.aoju.bus.core.exception.InstrumentException; import org.aoju.bus.core.lang.Filter; diff --git a/bus-core/src/main/java/org/aoju/bus/core/io/watchers/Watcher.java b/bus-core/src/main/java/org/aoju/bus/core/io/watcher/Watcher.java similarity index 98% rename from bus-core/src/main/java/org/aoju/bus/core/io/watchers/Watcher.java rename to bus-core/src/main/java/org/aoju/bus/core/io/watcher/Watcher.java index fafc787293..e70536bc28 100755 --- a/bus-core/src/main/java/org/aoju/bus/core/io/watchers/Watcher.java +++ b/bus-core/src/main/java/org/aoju/bus/core/io/watcher/Watcher.java @@ -23,7 +23,7 @@ * THE SOFTWARE. * * * ********************************************************************************/ -package org.aoju.bus.core.io.watchers; +package org.aoju.bus.core.io.watcher; import java.nio.file.Path; import java.nio.file.WatchEvent; diff --git a/bus-core/src/main/java/org/aoju/bus/core/io/watchers/WatcherChain.java b/bus-core/src/main/java/org/aoju/bus/core/io/watcher/WatcherChain.java similarity index 99% rename from bus-core/src/main/java/org/aoju/bus/core/io/watchers/WatcherChain.java rename to bus-core/src/main/java/org/aoju/bus/core/io/watcher/WatcherChain.java index 227752c2d0..aa6380e87f 100755 --- a/bus-core/src/main/java/org/aoju/bus/core/io/watchers/WatcherChain.java +++ b/bus-core/src/main/java/org/aoju/bus/core/io/watcher/WatcherChain.java @@ -23,7 +23,7 @@ * THE SOFTWARE. * * * ********************************************************************************/ -package org.aoju.bus.core.io.watchers; +package org.aoju.bus.core.io.watcher; import org.aoju.bus.core.lang.Chain; import org.aoju.bus.core.toolkit.CollKit; diff --git a/bus-core/src/main/java/org/aoju/bus/core/io/watchers/package-info.java b/bus-core/src/main/java/org/aoju/bus/core/io/watcher/package-info.java similarity index 77% rename from bus-core/src/main/java/org/aoju/bus/core/io/watchers/package-info.java rename to bus-core/src/main/java/org/aoju/bus/core/io/watcher/package-info.java index 70572d647d..68d5af8911 100644 --- a/bus-core/src/main/java/org/aoju/bus/core/io/watchers/package-info.java +++ b/bus-core/src/main/java/org/aoju/bus/core/io/watcher/package-info.java @@ -4,4 +4,4 @@ * @author Kimi Liu * @since Java 17+ */ -package org.aoju.bus.core.io.watchers; \ No newline at end of file +package org.aoju.bus.core.io.watcher; \ No newline at end of file diff --git a/bus-core/src/main/java/org/aoju/bus/core/key/UUID.java b/bus-core/src/main/java/org/aoju/bus/core/key/UUID.java index 09ddcf9278..9f8b717540 100755 --- a/bus-core/src/main/java/org/aoju/bus/core/key/UUID.java +++ b/bus-core/src/main/java/org/aoju/bus/core/key/UUID.java @@ -550,14 +550,14 @@ public int hashCode() { *

* 当且仅当参数不为 {@code null}、而是一个 UUID 对象、具有与此 UUID 相同的 varriant、包含相同的值(每一位均相同)时,结果才为 {@code true} * - * @param obj 要与之比较的对象 + * @param object 要与之比较的对象 * @return 如果对象相同, 则返回 {@code true};否则返回 {@code false} */ - public boolean equals(Object obj) { - if ((null == obj) || (obj.getClass() != UUID.class)) { + public boolean equals(Object object) { + if ((null == object) || (object.getClass() != UUID.class)) { return false; } - UUID id = (UUID) obj; + UUID id = (UUID) object; return (mostSigBits == id.mostSigBits && leastSigBits == id.leastSigBits); } diff --git a/bus-core/src/main/java/org/aoju/bus/core/lang/Assert.java b/bus-core/src/main/java/org/aoju/bus/core/lang/Assert.java index a2ed0b059b..17a3b27ad9 100755 --- a/bus-core/src/main/java/org/aoju/bus/core/lang/Assert.java +++ b/bus-core/src/main/java/org/aoju/bus/core/lang/Assert.java @@ -789,15 +789,15 @@ public static void equals(Object obj1, Object obj2, Suppli * Assert.instanceOf(Foo.class, foo); * * - * @param 被检查对象泛型类型 - * @param type 被检查对象匹配的类型 - * @param obj 被检查对象 + * @param 被检查对象泛型类型 + * @param type 被检查对象匹配的类型 + * @param object 被检查对象 * @return 被检查的对象 * @throws IllegalArgumentException if the object is not an instance of clazz * @see Class#isInstance(Object) */ - public static T isInstanceOf(Class type, T obj) { - return isInstanceOf(type, obj, "Object [{}] is not instanceof [{}]", obj, type); + public static T isInstanceOf(Class type, T object) { + return isInstanceOf(type, object, "Object [{}] is not instanceof [{}]", object, type); } /** @@ -809,19 +809,19 @@ public static T isInstanceOf(Class type, T obj) { * * @param 被检查对象泛型类型 * @param type 被检查对象匹配的类型 - * @param obj 被检查对象 + * @param object 被检查对象 * @param errorMsgTemplate 异常时的消息模板 * @param params 参数列表 * @return 被检查对象 * @throws IllegalArgumentException if the object is not an instance of clazz * @see Class#isInstance(Object) */ - public static T isInstanceOf(Class type, T obj, String errorMsgTemplate, Object... params) throws IllegalArgumentException { + public static T isInstanceOf(Class type, T object, String errorMsgTemplate, Object... params) throws IllegalArgumentException { notNull(type, "Type to check against must not be null"); - if (false == type.isInstance(obj)) { + if (false == type.isInstance(object)) { throw new IllegalArgumentException(StringKit.format(errorMsgTemplate, params)); } - return obj; + return object; } /** diff --git a/bus-core/src/main/java/org/aoju/bus/core/lang/Charset.java b/bus-core/src/main/java/org/aoju/bus/core/lang/Charset.java index 04d2be0bc2..61e90b7df3 100755 --- a/bus-core/src/main/java/org/aoju/bus/core/lang/Charset.java +++ b/bus-core/src/main/java/org/aoju/bus/core/lang/Charset.java @@ -30,7 +30,6 @@ import org.aoju.bus.core.toolkit.StringKit; import java.io.File; -import java.nio.charset.StandardCharsets; import java.nio.charset.UnsupportedCharsetException; /** @@ -127,7 +126,7 @@ public static String defaultCharsetName() { * @see Charset#defaultCharsetName() */ public static java.nio.charset.Charset systemCharset() { - return FileKit.isWindows() ? Charset.GBK : defaultCharset(); + return FileKit.isWindows() ? GBK : defaultCharset(); } /** @@ -189,11 +188,11 @@ public static String convert(final String source, final String srcCharset, final */ public static String convert(final String source, java.nio.charset.Charset srcCharset, java.nio.charset.Charset destCharset) { if (null == srcCharset) { - srcCharset = StandardCharsets.ISO_8859_1; + srcCharset = ISO_8859_1; } if (null == destCharset) { - destCharset = StandardCharsets.UTF_8; + destCharset = UTF_8; } if (StringKit.isBlank(source) || srcCharset.equals(destCharset)) { diff --git a/bus-core/src/main/java/org/aoju/bus/core/lang/Console.java b/bus-core/src/main/java/org/aoju/bus/core/lang/Console.java index 843698a631..0ac7d78cfa 100755 --- a/bus-core/src/main/java/org/aoju/bus/core/lang/Console.java +++ b/bus-core/src/main/java/org/aoju/bus/core/lang/Console.java @@ -69,14 +69,14 @@ public static void log() { * 打印控制台日志,同System.out.println()方法 * 如果传入打印对象为{@link Throwable}对象,那么同时打印堆栈 * - * @param obj 要打印的对象 + * @param object 要打印的对象 */ - public static void log(Object obj) { - if (obj instanceof Throwable) { - final Throwable e = (Throwable) obj; + public static void log(Object object) { + if (object instanceof Throwable) { + final Throwable e = (Throwable) object; log(e, e.getMessage()); } else { - log(Symbol.DELIM, obj); + log(Symbol.DELIM, object); } } @@ -120,7 +120,7 @@ public static void log(String template, Object... values) { public static void log(Throwable t, String template, Object... values) { System.out.println(StringKit.format(template, values)); if (null != t) { - t.printStackTrace(); + t.printStackTrace(System.out); System.out.flush(); } } @@ -128,10 +128,10 @@ public static void log(Throwable t, String template, Object... values) { /** * 打印控制台日志,同System.out.print()方法 * - * @param obj 要打印的对象 + * @param object 要打印的对象 */ - public static void print(Object obj) { - print(Symbol.DELIM, obj); + public static void print(Object object) { + print(Symbol.DELIM, object); } /** @@ -195,14 +195,14 @@ public static void error() { /** * 打印控制台日志,同System.err.println()方法同 * - * @param obj 要打印的对象 + * @param object 要打印的对象 */ - public static void error(Object obj) { - if (obj instanceof Throwable) { - Throwable e = (Throwable) obj; + public static void error(Object object) { + if (object instanceof Throwable) { + Throwable e = (Throwable) object; error(e, e.getMessage()); } else { - error(Symbol.DELIM, obj); + error(Symbol.DELIM, object); } } diff --git a/bus-core/src/main/java/org/aoju/bus/core/lang/Dict.java b/bus-core/src/main/java/org/aoju/bus/core/lang/Dictionary.java similarity index 79% rename from bus-core/src/main/java/org/aoju/bus/core/lang/Dict.java rename to bus-core/src/main/java/org/aoju/bus/core/lang/Dictionary.java index f5bdb0fdf4..2849460483 100755 --- a/bus-core/src/main/java/org/aoju/bus/core/lang/Dict.java +++ b/bus-core/src/main/java/org/aoju/bus/core/lang/Dictionary.java @@ -39,6 +39,8 @@ import java.sql.Time; import java.sql.Timestamp; import java.util.*; +import java.util.function.BiFunction; +import java.util.function.Function; /** * 字典对象,扩充了HashMap中的方法 @@ -46,7 +48,7 @@ * @author Kimi Liu * @since Java 17+ */ -public class Dict extends LinkedHashMap implements BasicType { +public class Dictionary extends LinkedHashMap implements BasicType { private static final long serialVersionUID = 1L; private static final float DEFAULT_LOAD_FACTOR = 0.75f; @@ -60,7 +62,7 @@ public class Dict extends LinkedHashMap implements BasicType map) { + public Dictionary(Map map) { super((null == map) ? new HashMap<>() : map); } @@ -97,7 +99,7 @@ public Dict(Map map) { * @param initialCapacity 初始容量 * @param caseInsensitive 是否大小写不敏感 */ - public Dict(int initialCapacity, boolean caseInsensitive) { + public Dictionary(int initialCapacity, boolean caseInsensitive) { this(initialCapacity, DEFAULT_LOAD_FACTOR, caseInsensitive); } @@ -107,7 +109,7 @@ public Dict(int initialCapacity, boolean caseInsensitive) { * @param initialCapacity 初始容量 * @param loadFactor 容量增长因子,0~1,即达到容量的百分之多少时扩容 */ - public Dict(int initialCapacity, float loadFactor) { + public Dictionary(int initialCapacity, float loadFactor) { this(initialCapacity, loadFactor, false); } @@ -118,7 +120,7 @@ public Dict(int initialCapacity, float loadFactor) { * @param loadFactor 容量增长因子,0~1,即达到容量的百分之多少时扩容 * @param caseInsensitive 是否大小写不敏感 */ - public Dict(int initialCapacity, float loadFactor, boolean caseInsensitive) { + public Dictionary(int initialCapacity, float loadFactor, boolean caseInsensitive) { super(initialCapacity, loadFactor); this.caseInsensitive = caseInsensitive; } @@ -128,8 +130,8 @@ public Dict(int initialCapacity, float loadFactor, boolean caseInsensitive) { * * @return Dict */ - public static Dict create() { - return new Dict(); + public static Dictionary create() { + return new Dictionary(); } /** @@ -139,7 +141,7 @@ public static Dict create() { * @param bean Bean对象 * @return Vo */ - public static Dict parse(T bean) { + public static Dictionary parse(T bean) { return create().parseBean(bean); } @@ -149,12 +151,12 @@ public static Dict parse(T bean) { * @param pairs 键值对 * @return Dict */ - public static Dict of(Pair... pairs) { - final Dict dict = create(); + public static Dictionary of(Pair... pairs) { + final Dictionary dictionary = create(); for (Pair pair : pairs) { - dict.put(pair.getKey(), pair.getValue()); + dictionary.put(pair.getKey(), pair.getValue()); } - return dict; + return dictionary; } /** @@ -173,19 +175,19 @@ public static Dict of(Pair... pairs) { * @param keysAndValues 键值对列表,必须奇数参数为key,偶数参数为value * @return Dict */ - public static Dict of(Object... keysAndValues) { - final Dict dict = create(); + public static Dictionary of(Object... keysAndValues) { + final Dictionary dictionary = create(); String key = null; for (int i = 0; i < keysAndValues.length; i++) { if (i % 2 == 0) { key = Convert.toString(keysAndValues[i]); } else { - dict.put(key, keysAndValues[i]); + dictionary.put(key, keysAndValues[i]); } } - return dict; + return dictionary; } @Override @@ -199,17 +201,17 @@ public Object put(String key, Object value) { } @Override - public Dict clone() { - return (Dict) super.clone(); + public Dictionary clone() { + return (Dictionary) super.clone(); } @Override - public Object getObj(String key) { + public Object getObject(String key) { return super.get(key); } @Override - public String getStr(String attr) { + public String getString(String attr) { return Convert.toString(get(attr), null); } @@ -249,8 +251,8 @@ public Byte getByte(String attr) { } @Override - public Boolean getBool(String attr) { - return Convert.toBool(get(attr), null); + public Boolean getBoolean(String attr) { + return Convert.toBoolean(get(attr), null); } @Override @@ -278,6 +280,61 @@ public void putAll(Map m) { m.forEach(this::put); } + @Override + public boolean containsKey(Object key) { + return super.containsKey(customKey((String) key)); + } + + @Override + public Object remove(Object key) { + return super.remove(customKey((String) key)); + } + + @Override + public boolean remove(Object key, Object value) { + return super.remove(customKey((String) key), value); + } + + @Override + public boolean replace(String key, Object oldValue, Object newValue) { + return super.replace(customKey(key), oldValue, newValue); + } + + @Override + public Object replace(String key, Object value) { + return super.replace(customKey(key), value); + } + + @Override + public Object getOrDefault(Object key, Object defaultValue) { + return super.getOrDefault(customKey((String) key), defaultValue); + } + + @Override + public Object computeIfPresent(final String key, final BiFunction remappingFunction) { + return super.computeIfPresent(customKey(key), remappingFunction); + } + + @Override + public Object compute(final String key, final BiFunction remappingFunction) { + return super.compute(customKey(key), remappingFunction); + } + + @Override + public Object merge(final String key, final Object value, final BiFunction remappingFunction) { + return super.merge(customKey(key), value, remappingFunction); + } + + @Override + public Object putIfAbsent(String key, Object value) { + return super.putIfAbsent(customKey(key), value); + } + + @Override + public Object computeIfAbsent(String key, Function mappingFunction) { + return super.computeIfAbsent(customKey(key), mappingFunction); + } + /** * @param attr 字段名 * @return 字段值 @@ -430,7 +487,7 @@ public T toBeanIgnoreCase(Class clazz) { * @param bean 值对象 * @return 自己 */ - public Dict parseBean(T bean) { + public Dictionary parseBean(T bean) { Assert.notNull(bean, "Bean class must be not null"); this.putAll(BeanKit.beanToMap(bean)); return this; @@ -446,7 +503,7 @@ public Dict parseBean(T bean) { * @param ignoreNullValue 是否忽略值为空的字段 * @return 自己 */ - public Dict parseBean(T bean, boolean isToUnderlineCase, boolean ignoreNullValue) { + public Dictionary parseBean(T bean, boolean isToUnderlineCase, boolean ignoreNullValue) { Assert.notNull(bean, "Bean class must be not null"); this.putAll(BeanKit.beanToMap(bean, isToUnderlineCase, ignoreNullValue)); return this; @@ -460,7 +517,7 @@ public Dict parseBean(T bean, boolean isToUnderlineCase, boolean ignoreNullV * @param dict 字典对象 * @param withoutNames 不需要去除的字段名 */ - public void removeEqual(T dict, String... withoutNames) { + public void removeEqual(T dict, String... withoutNames) { HashSet withoutSet = CollKit.newHashSet(withoutNames); for (Map.Entry entry : dict.entrySet()) { if (withoutSet.contains(entry.getKey())) { @@ -480,8 +537,8 @@ public void removeEqual(T dict, String... withoutNames) { * @param keys 键列表 * @return Dict 结果 */ - public Dict filter(String... keys) { - final Dict result = new Dict(keys.length, 1); + public Dictionary filter(String... keys) { + final Dictionary result = new Dictionary(keys.length, 1); for (String key : keys) { if (this.containsKey(key)) { @@ -509,7 +566,7 @@ public T getBean(String attr) { * @param value 值 * @return 本身 */ - public Dict setIgnoreNull(String attr, Object value) { + public Dictionary setIgnoreNull(String attr, Object value) { if (null != attr && null != value) { set(attr, value); } @@ -523,7 +580,7 @@ public Dict setIgnoreNull(String attr, Object value) { * @param value 值 * @return 本身 */ - public Dict set(String attr, Object value) { + public Dictionary set(String attr, Object value) { this.put(attr, value); return this; } @@ -541,19 +598,6 @@ public T get(String attr, T defaultValue) { return (T) (null != result ? result : defaultValue); } - /** - * 将Key转为小写 - * - * @param key KEY - * @return 小写KEY - */ - private String customKey(String key) { - if (this.caseInsensitive && null != key) { - key = key.toLowerCase(); - } - return key; - } - /** * 通过lambda批量设置值 * 实际使用时,可以使用getXXX的方法引用来完成键值对的赋值: @@ -565,9 +609,22 @@ private String customKey(String key) { * @param fields lambda,不能为空 * @return this */ - public Dict setFields(Func0... fields) { + public Dictionary setFields(Func0... fields) { Arrays.stream(fields).forEach(f -> set(LambdaKit.getFieldName(f), f.callWithRuntimeException())); return this; } + /** + * 将Key转为小写 + * + * @param key KEY + * @return 小写KEY + */ + private String customKey(String key) { + if (this.caseInsensitive && null != key) { + key = key.toLowerCase(); + } + return key; + } + } diff --git a/bus-core/src/main/java/org/aoju/bus/core/lang/FileType.java b/bus-core/src/main/java/org/aoju/bus/core/lang/FileType.java index b7d5427562..6cd1a01b5c 100755 --- a/bus-core/src/main/java/org/aoju/bus/core/lang/FileType.java +++ b/bus-core/src/main/java/org/aoju/bus/core/lang/FileType.java @@ -757,12 +757,8 @@ public class FileType { put("47494638396126026f01", "gif"); // TIFF (tif) put("49492a00227105008037", "tif"); - // 16色位图(bmp) - put("424d228c010000000000", "bmp"); - // 24色位图(bmp) - put("424d8240090000000000", "bmp"); - // 256色位图(bmp) - put("424d8e1b030000000000", "bmp"); + // 位图(bmp) + put("424d", "bmp"); // CAD (dwg) put("41433130313500000000", "dwg"); put("3c21444f435459504520", "html"); diff --git a/bus-core/src/main/java/org/aoju/bus/core/lang/MediaType.java b/bus-core/src/main/java/org/aoju/bus/core/lang/MediaType.java index ec4e2ad083..8ba262e479 100755 --- a/bus-core/src/main/java/org/aoju/bus/core/lang/MediaType.java +++ b/bus-core/src/main/java/org/aoju/bus/core/lang/MediaType.java @@ -418,11 +418,11 @@ private static TreeMap createParametersMap(Map i return map; } - public boolean equals(Object obj) { - if (!(obj instanceof MediaType)) { + public boolean equals(Object object) { + if (!(object instanceof MediaType)) { return false; } else { - MediaType other = (MediaType) obj; + MediaType other = (MediaType) object; return this.type.equalsIgnoreCase(other.type) && this.subtype.equalsIgnoreCase(other.subtype) && this.parameters.equals(other.parameters); diff --git a/bus-core/src/main/java/org/aoju/bus/core/lang/Optional.java b/bus-core/src/main/java/org/aoju/bus/core/lang/Optional.java index 7b5075886f..5c70023e16 100644 --- a/bus-core/src/main/java/org/aoju/bus/core/lang/Optional.java +++ b/bus-core/src/main/java/org/aoju/bus/core/lang/Optional.java @@ -488,22 +488,22 @@ public java.util.Optional toOptional() { *

  • 它们包裹住的元素之间相互 {@code equals()} * * - * @param obj 一个要用来判断是否相等的参数 + * @param object 一个要用来判断是否相等的参数 * @return 如果传入的参数也是一个 {@code Optional}并且它们包裹住的元素都为空 * 或者它们包裹住的元素之间相互 {@code equals()} 就返回{@code true} * 否则返回 {@code false} */ @Override - public boolean equals(Object obj) { - if (this == obj) { + public boolean equals(Object object) { + if (this == object) { return true; } - if (!(obj instanceof Optional)) { + if (!(object instanceof Optional)) { return false; } - Optional other = (Optional) obj; + Optional other = (Optional) object; return Objects.equals(value, other.value); } diff --git a/bus-core/src/main/java/org/aoju/bus/core/lang/RegEx.java b/bus-core/src/main/java/org/aoju/bus/core/lang/RegEx.java index 67d89f0e59..635ab4c86e 100755 --- a/bus-core/src/main/java/org/aoju/bus/core/lang/RegEx.java +++ b/bus-core/src/main/java/org/aoju/bus/core/lang/RegEx.java @@ -309,7 +309,7 @@ public class RegEx { public static final Pattern CAR_VIN = Pattern.compile(CAR_VIN_PATTERN); /** - * 社会统一信用代码 + * 统一社会信用代码 *
          * 第一部分:登记管理部门代码1位 (数字或大写英文字母)
          * 第二部分:机构类别代码1位 (数字或大写英文字母)
    @@ -321,7 +321,6 @@ public class RegEx {
         public static final String CREDIT_CODE_PATTERN = "^[0-9A-HJ-NPQRTUWXY]{2}\\d{6}[0-9A-HJ-NPQRTUWXY]{10}$";
         public static final Pattern CREDIT_CODE = Pattern.compile(CREDIT_CODE_PATTERN);
     
    -
         /**
          * 正则中需要被转义的关键字
          */
    diff --git a/bus-core/src/main/java/org/aoju/bus/core/lang/System.java b/bus-core/src/main/java/org/aoju/bus/core/lang/System.java
    index d0305dd7aa..dbd815842e 100755
    --- a/bus-core/src/main/java/org/aoju/bus/core/lang/System.java
    +++ b/bus-core/src/main/java/org/aoju/bus/core/lang/System.java
    @@ -26,6 +26,7 @@
     package org.aoju.bus.core.lang;
     
     import org.aoju.bus.core.convert.Convert;
    +import org.aoju.bus.core.toolkit.BooleanKit;
     import org.aoju.bus.core.toolkit.StringKit;
     
     import java.util.Properties;
    @@ -317,12 +318,7 @@ public static boolean getBoolean(String key, boolean defaultValue) {
                 return defaultValue;
             }
     
    -        value = value.trim().toLowerCase();
    -        if (value.isEmpty()) {
    -            return true;
    -        }
    -
    -        return Convert.toBool(value, defaultValue);
    +        return BooleanKit.toBoolean(value);
         }
     
         /**
    diff --git a/bus-core/src/main/java/org/aoju/bus/core/lang/Validator.java b/bus-core/src/main/java/org/aoju/bus/core/lang/Validator.java
    index 3676f09755..5573785e56 100755
    --- a/bus-core/src/main/java/org/aoju/bus/core/lang/Validator.java
    +++ b/bus-core/src/main/java/org/aoju/bus/core/lang/Validator.java
    @@ -29,7 +29,6 @@
     import org.aoju.bus.core.toolkit.*;
     
     import java.net.MalformedURLException;
    -import java.util.regex.Matcher;
     import java.util.regex.Pattern;
     
     /**
    @@ -50,132 +49,6 @@ public static boolean isNull(Object value) {
             return null == value;
         }
     
    -    /**
    -     * 给定值是否不为{@code null}
    -     *
    -     * @param value 值
    -     * @return 是否不为null
    -     */
    -    public static boolean isNotNull(Object value) {
    -        return null != value;
    -    }
    -
    -    /**
    -     * 验证是否为空
    -     * 对于String类型判定是否为empty(null 或 "")
    -     *
    -     * @param value 值
    -     * @return 是否为空
    -     */
    -    public static boolean isEmpty(Object value) {
    -        return (null == value || (value instanceof String && StringKit.isEmpty((String) value)));
    -    }
    -
    -    /**
    -     * 验证是否为非空
    -     * 对于String类型判定是否为empty(null 或 "")
    -     *
    -     * @param value 值
    -     * @return 是否为空
    -     */
    -    public static boolean isNotEmpty(Object value) {
    -        return false == isEmpty(value);
    -    }
    -
    -    /**
    -     * 给定值是否为{@code true}
    -     *
    -     * @param value 值
    -     * @return 是否为true
    -     */
    -    public static boolean isTrue(boolean value) {
    -        return value;
    -    }
    -
    -    /**
    -     * 给定值是否不为{@code false}
    -     *
    -     * @param value 值
    -     * @return 是否不为false
    -     */
    -    public static boolean isFalse(boolean value) {
    -        return false == value;
    -    }
    -
    -    /**
    -     * 验证是否为英文字母 、数字和下划线
    -     *
    -     * @param value 值
    -     * @return 是否为英文字母 、数字和下划线
    -     */
    -    public static boolean isGeneral(CharSequence value) {
    -        return isMatchRegex(RegEx.GENERAL, value);
    -    }
    -
    -    /**
    -     * 验证是否为给定最小长度的英文字母 、数字和下划线
    -     *
    -     * @param value 值
    -     * @param min   最小长度,负数自动识别为0
    -     * @return 是否为给定最小长度的英文字母 、数字和下划线
    -     */
    -    public static boolean isGeneral(CharSequence value, int min) {
    -        return isGeneral(value, min, 0);
    -    }
    -
    -    /**
    -     * 验证是否为给定长度范围的英文字母 、数字和下划线
    -     *
    -     * @param value 值
    -     * @param min   最小长度,负数自动识别为0
    -     * @param max   最大长度,0或负数表示不限制最大长度
    -     * @return 是否为给定长度范围的英文字母 、数字和下划线
    -     */
    -    public static boolean isGeneral(CharSequence value, int min, int max) {
    -        if (min < 0) {
    -            min = 0;
    -        }
    -        String reg = "^\\w{" + min + Symbol.COMMA + max + "}$";
    -        if (max <= 0) {
    -            reg = "^\\w{" + min + ",}$";
    -        }
    -        return isMatchRegex(reg, value);
    -    }
    -
    -    /**
    -     * 通过正则表达式验证
    -     *
    -     * @param regex 正则
    -     * @param value 值
    -     * @return 是否匹配正则
    -     */
    -    public static boolean isMatchRegex(String regex, CharSequence value) {
    -        return PatternKit.isMatch(regex, value);
    -    }
    -
    -    /**
    -     * 通过正则表达式验证
    -     *
    -     * @param pattern 正则模式
    -     * @param value   值
    -     * @return 是否匹配正则
    -     */
    -    public static boolean isMatchRegex(Pattern pattern, CharSequence value) {
    -        return PatternKit.isMatch(pattern, value);
    -    }
    -
    -    /**
    -     * 验证是否相等
    -     * 当两值都为null返回true
    -     *
    -     * @param t1 对象1
    -     * @param t2 对象2
    -     * @return 当两值都为null或相等返回true
    -     */
    -    public static boolean equal(Object t1, Object t2) {
    -        return ObjectKit.equal(t1, t2);
    -    }
    -
         /**
          * 检查指定值是否为{@code null}
          *
    @@ -193,6 +66,16 @@ public static  T validateNull(T value, String errorMsgTemplate, Object... par
             return null;
         }
     
    +    /**
    +     * 给定值是否不为{@code null}
    +     *
    +     * @param value 值
    +     * @return 是否不为null
    +     */
    +    public static boolean isNotNull(Object value) {
    +        return null != value;
    +    }
    +
         /**
          * 检查指定值是否非{@code null}
          *
    @@ -210,6 +93,17 @@ public static  T validateNotNull(T value, String errorMsgTemplate, Object...
             return value;
         }
     
    +    /**
    +     * 验证是否为空
    +     * 对于String类型判定是否为empty(null 或 "")
    +     *
    +     * @param value 值
    +     * @return 是否为空
    +     */
    +    public static boolean isEmpty(Object value) {
    +        return (null == value || (value instanceof String && StringKit.isEmpty((String) value)));
    +    }
    +
         /**
          * 验证是否为空,非空时抛出异常
          * 对于String类型判定是否为empty(null 或 "")
    @@ -227,6 +121,17 @@ public static  T validateEmpty(T value, String errorMsg) throws ValidateExcep
             return value;
         }
     
    +    /**
    +     * 验证是否为非空
    +     * 对于String类型判定是否为empty(null 或 "")
    +     *
    +     * @param value 值
    +     * @return 是否为空
    +     */
    +    public static boolean isNotEmpty(Object value) {
    +        return false == isEmpty(value);
    +    }
    +
         /**
          * 验证是否为非空,为空时抛出异常
          * 对于String类型判定是否为empty(null 或 "")
    @@ -244,6 +149,16 @@ public static  T validateNotEmpty(T value, String errorMsg) throws ValidateEx
             return value;
         }
     
    +    /**
    +     * 给定值是否为{@code true}
    +     *
    +     * @param value 值
    +     * @return 是否为true
    +     */
    +    public static boolean isTrue(boolean value) {
    +        return value;
    +    }
    +
         /**
          * 检查指定值是否为{@code true}
          *
    @@ -260,6 +175,16 @@ public static boolean validateTrue(boolean value, String errorMsgTemplate, Objec
             return true;
         }
     
    +    /**
    +     * 给定值是否不为{@code false}
    +     *
    +     * @param value 值
    +     * @return 是否不为false
    +     */
    +    public static boolean isFalse(boolean value) {
    +        return false == value;
    +    }
    +
         /**
          * 检查指定值是否为{@code false}
          *
    @@ -276,6 +201,18 @@ public static boolean validateFalse(boolean value, String errorMsgTemplate, Obje
             return false;
         }
     
    +    /**
    +     * 验证是否相等
    +     * 当两值都为null返回true
    +     *
    +     * @param t1 对象1
    +     * @param t2 对象2
    +     * @return 当两值都为null或相等返回true
    +     */
    +    public static boolean equal(Object t1, Object t2) {
    +        return ObjectKit.equal(t1, t2);
    +    }
    +
         /**
          * 验证是否相等,不相等抛出异常
          *
    @@ -337,205 +274,268 @@ public static void validateNotEmptyAndNotEqual(Object t1, Object t2, String erro
         }
     
         /**
    -     * 通过正则表达式验证
    -     * 不符合正则抛出{@link ValidateException} 异常
    +     * 判断字符串是否全部为大写字母
    +     *
    +     * @param value 值
    +     * @return 是否全部为大写字母
    +     */
    +    public static boolean isUpperCase(CharSequence value) {
    +        return StringKit.isAllCharMatch(value, Character::isUpperCase);
    +    }
    +
    +    /**
    +     * 验证字符串是否全部为大写字母
          *
          * @param       字符串类型
    -     * @param regex    正则
    -     * @param value    值
    +     * @param value    表单值
          * @param errorMsg 验证错误的信息
          * @return 验证后的值
          * @throws ValidateException 验证异常
          */
    -    public static  T validateMatchRegex(String regex, T value, String errorMsg) throws ValidateException {
    -        if (false == isMatchRegex(regex, value)) {
    +    public static  T validateUpperCase(T value, String errorMsg) throws ValidateException {
    +        if (false == isUpperCase(value)) {
                 throw new ValidateException(errorMsg);
             }
             return value;
         }
     
         /**
    -     * 验证是否为英文字母 、数字和下划线
    +     * 判断字符串是否全部为小写字母
    +     *
    +     * @param value 值
    +     * @return 是否全部为小写字母
    +     */
    +    public static boolean isLowerCase(CharSequence value) {
    +        return StringKit.isAllCharMatch(value, Character::isLowerCase);
    +    }
    +
    +    /**
    +     * 验证字符串是否全部为小写字母
          *
          * @param       字符串类型
    -     * @param value    值
    +     * @param value    表单值
          * @param errorMsg 验证错误的信息
          * @return 验证后的值
          * @throws ValidateException 验证异常
          */
    -    public static  T validateGeneral(T value, String errorMsg) throws ValidateException {
    -        if (false == isGeneral(value)) {
    +    public static  T validateLowerCase(T value, String errorMsg) throws ValidateException {
    +        if (false == isLowerCase(value)) {
                 throw new ValidateException(errorMsg);
             }
             return value;
         }
     
    +
         /**
    -     * 验证是否为给定长度范围的英文字母 、数字和下划线
    +     * 验证该字符串是否是字母(包括大写和小写字母)
    +     *
    +     * @param value 字符串内容
    +     * @return 是否是字母(包括大写和小写字母)
    +     */
    +    public static boolean isLetter(CharSequence value) {
    +        return isMatchRegex(RegEx.WORD_PATTERN, value);
    +    }
    +
    +    /**
    +     * 验证是否为字母(包括大写和小写字母)
          *
          * @param       字符串类型
    -     * @param value    值
    -     * @param min      最小长度,负数自动识别为0
    -     * @param max      最大长度,0或负数表示不限制最大长度
    +     * @param value    表单值
          * @param errorMsg 验证错误的信息
          * @return 验证后的值
          * @throws ValidateException 验证异常
          */
    -    public static  T validateGeneral(T value, int min, int max, String errorMsg) throws ValidateException {
    -        if (false == isGeneral(value, min, max)) {
    +    public static  T validateLetter(T value, String errorMsg) throws ValidateException {
    +        if (false == isLetter(value)) {
                 throw new ValidateException(errorMsg);
             }
             return value;
         }
     
         /**
    -     * 验证是否为给定最小长度的英文字母 、数字和下划线
    +     * 验证是否由为字母汉字组成(包括大写和小写字母和汉字)
    +     *
    +     * @param value 值
    +     * @return 是否为字母汉字组成(包括大写和小写字母和汉字)
    +     */
    +    public static boolean isLetterWithChinese(CharSequence value) {
    +        return StringKit.isAllCharMatch(value, Character::isLetter);
    +    }
    +
    +    /**
    +     * 验证是否由为字母汉字组成(包括大写和小写字母和汉字)
          *
          * @param       字符串类型
    -     * @param value    值
    -     * @param min      最小长度,负数自动识别为0
    +     * @param value    表单值
          * @param errorMsg 验证错误的信息
          * @return 验证后的值
          * @throws ValidateException 验证异常
          */
    -    public static  T validateGeneral(T value, int min, String errorMsg) throws ValidateException {
    -        return validateGeneral(value, min, 0, errorMsg);
    +    public static  T validateLetterWithChinese(T value, String errorMsg) throws ValidateException {
    +        if (false == isLetterWithChinese(value)) {
    +            throw new ValidateException(errorMsg);
    +        }
    +        return value;
         }
     
         /**
    -     * 判断字符串是否全部为字母组成,包括大写和小写字母和汉字
    +     * 验证是否为数字
          *
    -     * @param value 值
    -     * @return 是否全部为字母组成, 包括大写和小写字母和汉字
    +     * @param value 字符串内容
    +     * @return 是否是数字
          */
    -    public static boolean isLetter(CharSequence value) {
    -        return StringKit.isAllCharMatch(value, Character::isLetter);
    +    public static boolean isNumber(CharSequence value) {
    +        return MathKit.isNumber(value);
    +    }
    +
    +    /**
    +     * 验证是否为数字
    +     *
    +     * @param value    表单值
    +     * @param errorMsg 验证错误的信息
    +     * @return 验证后的值
    +     * @throws ValidateException 验证异常
    +     */
    +    public static String validateNumber(String value, String errorMsg) throws ValidateException {
    +        if (false == isNumber(value)) {
    +            throw new ValidateException(errorMsg);
    +        }
    +        return value;
    +    }
    +
    +    /**
    +     * 是否包含数字
    +     *
    +     * @param value 当前字符串
    +     * @return boolean 是否存在数字
    +     */
    +    public static boolean hasNumber(CharSequence value) {
    +        return PatternKit.contains(RegEx.NUMBERS_PATTERN, value);
         }
     
         /**
    -     * 验证是否全部为字母组成,包括大写和小写字母和汉字
    +     * 是否包含数字
          *
    -     * @param       字符串类型
    -     * @param value    表单值
    -     * @param errorMsg 验证错误的信息
    -     * @return 验证后的值
    +     * @param value 当前字符串
    +     * @return boolean 是否存在数字
          * @throws ValidateException 验证异常
          */
    -    public static  T validateLetter(T value, String errorMsg) throws ValidateException {
    -        if (false == isLetter(value)) {
    +    public static String validateHasNumber(String value, String errorMsg) throws ValidateException {
    +        if (false == hasNumber(value)) {
                 throw new ValidateException(errorMsg);
             }
             return value;
         }
     
         /**
    -     * 判断字符串是否全部为大写字母
    +     * 验证是否为英文字母 、数字和下划线
          *
          * @param value 值
    -     * @return 是否全部为大写字母
    +     * @return 是否为英文字母 、数字和下划线
          */
    -    public static boolean isUpperCase(CharSequence value) {
    -        return StringKit.isAllCharMatch(value, Character::isUpperCase);
    +    public static boolean isGeneral(CharSequence value) {
    +        return isMatchRegex(RegEx.GENERAL, value);
         }
     
         /**
    -     * 验证字符串是否全部为大写字母
    +     * 验证是否为英文字母 、数字和下划线
          *
          * @param       字符串类型
    -     * @param value    表单值
    +     * @param value    值
          * @param errorMsg 验证错误的信息
          * @return 验证后的值
          * @throws ValidateException 验证异常
          */
    -    public static  T validateUpperCase(T value, String errorMsg) throws ValidateException {
    -        if (false == isUpperCase(value)) {
    +    public static  T validateGeneral(T value, String errorMsg) throws ValidateException {
    +        if (false == isGeneral(value)) {
                 throw new ValidateException(errorMsg);
             }
             return value;
         }
     
         /**
    -     * 判断字符串是否全部为小写字母
    +     * 验证是否为给定最小长度的英文字母 、数字和下划线
          *
          * @param value 值
    -     * @return 是否全部为小写字母
    +     * @param min   最小长度,负数自动识别为0
    +     * @return 是否为给定最小长度的英文字母 、数字和下划线
          */
    -    public static boolean isLowerCase(CharSequence value) {
    -        return StringKit.isAllCharMatch(value, Character::isLowerCase);
    +    public static boolean isGeneral(CharSequence value, int min) {
    +        return isGeneral(value, min, 0);
         }
     
         /**
    -     * 验证字符串是否全部为小写字母
    +     * 验证是否为给定最小长度的英文字母 、数字和下划线
          *
          * @param       字符串类型
    -     * @param value    表单值
    +     * @param value    值
    +     * @param min      最小长度,负数自动识别为0
          * @param errorMsg 验证错误的信息
          * @return 验证后的值
          * @throws ValidateException 验证异常
          */
    -    public static  T validateLowerCase(T value, String errorMsg) throws ValidateException {
    -        if (false == isLowerCase(value)) {
    -            throw new ValidateException(errorMsg);
    -        }
    -        return value;
    -    }
    -
    -    /**
    -     * 验证该字符串是否是数字
    -     *
    -     * @param value 字符串内容
    -     * @return 是否是数字
    -     */
    -    public static boolean isNumber(CharSequence value) {
    -        return MathKit.isNumber(value);
    +    public static  T validateGeneral(T value, int min, String errorMsg) throws ValidateException {
    +        return validateGeneral(value, min, 0, errorMsg);
         }
     
         /**
    -     * 是否包含数字
    +     * 验证是否为给定长度范围的英文字母 、数字和下划线
          *
    -     * @param value 当前字符串
    -     * @return boolean 是否存在数字
    +     * @param value 值
    +     * @param min   最小长度,负数自动识别为0
    +     * @param max   最大长度,0或负数表示不限制最大长度
    +     * @return 是否为给定长度范围的英文字母 、数字和下划线
          */
    -    public static boolean hasNumber(CharSequence value) {
    -        return PatternKit.contains(RegEx.NUMBERS_PATTERN, value);
    +    public static boolean isGeneral(CharSequence value, int min, int max) {
    +        if (min < 0) {
    +            min = 0;
    +        }
    +        String reg = "^\\w{" + min + Symbol.COMMA + max + "}$";
    +        if (max <= 0) {
    +            reg = "^\\w{" + min + ",}$";
    +        }
    +        return isMatchRegex(reg, value);
         }
     
         /**
    -     * 验证是否为数字
    +     * 验证是否为给定长度范围的英文字母 、数字和下划线
          *
    -     * @param value    表单值
    +     * @param       字符串类型
    +     * @param value    值
    +     * @param min      最小长度,负数自动识别为0
    +     * @param max      最大长度,0或负数表示不限制最大长度
          * @param errorMsg 验证错误的信息
          * @return 验证后的值
          * @throws ValidateException 验证异常
          */
    -    public static String validateNumber(String value, String errorMsg) throws ValidateException {
    -        if (false == isNumber(value)) {
    +    public static  T validateGeneral(T value, int min, int max, String errorMsg) throws ValidateException {
    +        if (false == isGeneral(value, min, max)) {
                 throw new ValidateException(errorMsg);
             }
             return value;
         }
     
         /**
    -     * 验证该字符串是否是字母(包括大写和小写字母)
    +     * 验证是否为中文字、英文字母、数字和下划线
          *
    -     * @param value 字符串内容
    -     * @return 是否是字母(包括大写和小写字母)
    +     * @param value 值
    +     * @return 是否为中文字、英文字母、数字和下划线
          */
    -    public static boolean isWord(CharSequence value) {
    -        return isMatchRegex(RegEx.WORD_PATTERN, value);
    +    public static boolean isGeneralWithChinese(CharSequence value) {
    +        return isMatchRegex(RegEx.GENERAL_WITH_CHINESE, value);
         }
     
         /**
    -     * 验证是否为字母(包括大写和小写字母)
    +     * 验证是否为中文字、英文字母、数字和下划线
          *
          * @param       字符串类型
    -     * @param value    表单值
    +     * @param value    值
          * @param errorMsg 验证错误的信息
          * @return 验证后的值
          * @throws ValidateException 验证异常
          */
    -    public static  T validateWord(T value, String errorMsg) throws ValidateException {
    -        if (false == isWord(value)) {
    +    public static  T validateGeneralWithChinese(T value, String errorMsg) throws ValidateException {
    +        if (false == isGeneralWithChinese(value)) {
                 throw new ValidateException(errorMsg);
             }
             return value;
    @@ -692,48 +692,13 @@ public static boolean isCitizenId(CharSequence value) {
          * @return 验证后的值
          * @throws ValidateException 验证异常
          */
    -    public static  T validateCitizenIdNumber(T value, String errorMsg) throws ValidateException {
    +    public static  T validateCitizenId(T value, String errorMsg) throws ValidateException {
             if (false == isCitizenId(value)) {
                 throw new ValidateException(errorMsg);
             }
             return value;
         }
     
    -    /**
    -     * 验证是否为生日
    -     *
    -     * @param year  年,从1900年开始计算
    -     * @param month 月,从1开始计数
    -     * @param day   日,从1开始计数
    -     * @return 是否为生日
    -     */
    -    public static boolean isBirthday(int year, int month, int day) {
    -        // 验证年
    -        int thisYear = DateKit.thisYear();
    -        if (year < 1900 || year > thisYear) {
    -            return false;
    -        }
    -
    -        // 验证月
    -        if (month < 1 || month > 12) {
    -            return false;
    -        }
    -
    -        // 验证日
    -        if (day < 1 || day > 31) {
    -            return false;
    -        }
    -        // 检查几个特殊月的最大天数
    -        if (day == 31 && (month == 4 || month == 6 || month == 9 || month == 11)) {
    -            return false;
    -        }
    -        if (month == 2) {
    -            // 在2月,非闰年最大28,闰年最大29
    -            return day < 29 || (day == 29 && DateKit.isLeapYear(year));
    -        }
    -        return true;
    -    }
    -
         /**
          * 验证是否为生日
          * 只支持以下几种格式:
    @@ -749,14 +714,7 @@ public static boolean isBirthday(int year, int month, int day) {
          * @return 是否为生日
          */
         public static boolean isBirthday(CharSequence value) {
    -        final Matcher matcher = RegEx.BIRTHDAY.matcher(value);
    -        if (matcher.find()) {
    -            int year = Integer.parseInt(matcher.group(1));
    -            int month = Integer.parseInt(matcher.group(3));
    -            int day = Integer.parseInt(matcher.group(5));
    -            return isBirthday(year, month, day);
    -        }
    -        return false;
    +        return DateKit.isBirthday(value);
         }
     
         /**
    @@ -924,17 +882,7 @@ public static boolean isChinese(CharSequence value) {
         }
     
         /**
    -     * 验证是否包含汉字
    -     *
    -     * @param value 值
    -     * @return 是否包含汉字
    -     */
    -    public static boolean hasChinese(CharSequence value) {
    -        return PatternKit.contains(RegEx.CHINESES_PATTERN, value);
    -    }
    -
    -    /**
    -     * 验证是否为汉字
    +     * 验证是否都为汉字
          *
          * @param       字符串类型
          * @param value    表单值
    @@ -950,26 +898,26 @@ public static  T validateChinese(T value, String errorMs
         }
     
         /**
    -     * 验证是否为中文字、英文字母、数字和下划线
    +     * 验证是否包含汉字
          *
          * @param value 值
    -     * @return 是否为中文字、英文字母、数字和下划线
    +     * @return 是否包含汉字
          */
    -    public static boolean isGeneralWithChinese(CharSequence value) {
    -        return isMatchRegex(RegEx.GENERAL_WITH_CHINESE, value);
    +    public static boolean hasChinese(CharSequence value) {
    +        return PatternKit.contains(RegEx.CHINESES_PATTERN, value);
         }
     
         /**
    -     * 验证是否为中文字、英文字母、数字和下划线
    +     * 验证是否都为汉字
          *
          * @param       字符串类型
    -     * @param value    值
    +     * @param value    表单值
          * @param errorMsg 验证错误的信息
          * @return 验证后的值
          * @throws ValidateException 验证异常
          */
    -    public static  T validateGeneralWithChinese(T value, String errorMsg) throws ValidateException {
    -        if (false == isGeneralWithChinese(value)) {
    +    public static  T validateHasChinese(T value, String errorMsg) throws ValidateException {
    +        if (false == hasChinese(value)) {
                 throw new ValidateException(errorMsg);
             }
             return value;
    @@ -1060,6 +1008,63 @@ public static void validateBetween(Number value, Number min, Number max, String
             }
         }
     
    +    /**
    +     * 通过正则表达式验证
    +     *
    +     * @param regex 正则
    +     * @param value 值
    +     * @return 是否匹配正则
    +     */
    +    public static boolean isMatchRegex(String regex, CharSequence value) {
    +        return PatternKit.isMatch(regex, value);
    +    }
    +
    +    /**
    +     * 通过正则表达式验证
    +     *
    +     * @param pattern 正则模式
    +     * @param value   值
    +     * @return 是否匹配正则
    +     */
    +    public static boolean isMatchRegex(Pattern pattern, CharSequence value) {
    +        return PatternKit.isMatch(pattern, value);
    +    }
    +
    +    /**
    +     * 通过正则表达式验证
    +     * 不符合正则抛出{@link ValidateException} 异常
    +     *
    +     * @param       字符串类型
    +     * @param regex    正则
    +     * @param value    值
    +     * @param errorMsg 验证错误的信息
    +     * @return 验证后的值
    +     * @throws ValidateException 验证异常
    +     */
    +    public static  T validateMatchRegex(String regex, T value, String errorMsg) throws ValidateException {
    +        if (false == isMatchRegex(regex, value)) {
    +            throw new ValidateException(errorMsg);
    +        }
    +        return value;
    +    }
    +
    +    /**
    +     * 是否是有效的统一社会信用代码
    +     * 
    +     * 第一部分:登记管理部门代码1位 (数字或大写英文字母)
    +     * 第二部分:机构类别代码1位 (数字或大写英文字母)
    +     * 第三部分:登记管理机关行政区划码6位 (数字)
    +     * 第四部分:主体标识码(组织机构代码)9位 (数字或大写英文字母)
    +     * 第五部分:校验码1位 (数字或大写英文字母)
    +     * 
    + * + * @param value 统一社会信用代码 + * @return 校验结果 + */ + public static boolean isCreditCode(CharSequence value) { + return LicenseKit.isCreditCode(value); + } + /** * 是否是有效的统一社会信用代码 *
    @@ -1070,11 +1075,15 @@ public static void validateBetween(Number value, Number min, Number max, String
          * 第五部分:校验码1位 (数字或大写英文字母)
          * 
    * - * @param creditCode 统一社会信用代码 + * @param value 统一社会信用代码 * @return 校验结果 + * @throws ValidateException 验证异常 */ - public static boolean isCreditCode(CharSequence creditCode) { - return LicenseKit.isCreditCode(creditCode); + public static T validateCreditCode(T value, String errorMsg) throws ValidateException { + if (false == isCreditCode(value)) { + throw new ValidateException(errorMsg); + } + return value; } /** @@ -1114,26 +1123,6 @@ public static boolean isCarDrivingLicence(CharSequence value) { return isMatchRegex(RegEx.CAR_DRIVING_LICENCE, value); } - /** - * 是否是中文姓名 - * 维吾尔族姓名里面的点是· - * 正确维吾尔族姓名: - *
    -     * 霍加阿卜杜拉·麦提喀斯木
    -     * 玛合萨提别克·哈斯木别克
    -     * 阿布都热依木江·艾斯卡尔
    -     * 阿卜杜尼亚孜·毛力尼亚孜
    -     * 
    - * 总结中文姓名:2-60位,只能是中文和· - * - * @param value 中文姓名 - * @return 是否是正确的中文姓名 - */ - public static boolean isChineseName(CharSequence value) { - return isMatchRegex(RegEx.CHINESE_NAME_PATTERN, value); - } - - /** * 验证是否为驾驶证 别名:驾驶证档案编号、行驶证编号 * @@ -1179,4 +1168,36 @@ public static void validatePassword(String value, String errorMsg, boolean... we } } + /** + * 是否是中文姓名 + * 维吾尔族姓名里面的点是· + * 正确维吾尔族姓名: + *
    +     * 霍加阿卜杜拉·麦提喀斯木
    +     * 玛合萨提别克·哈斯木别克
    +     * 阿布都热依木江·艾斯卡尔
    +     * 阿卜杜尼亚孜·毛力尼亚孜
    +     * 
    + * 总结中文姓名:2-60位,只能是中文和· + * + * @param value 中文姓名 + * @return 是否是正确的中文姓名 + */ + public static boolean isChineseName(CharSequence value) { + return isMatchRegex(RegEx.CHINESE_NAME_PATTERN, value); + } + + /** + * 验证是是否符合密码要求 + * + * @param value 值 + * @param errorMsg 验证错误的信息 + * @throws ValidateException 验证异常 + */ + public static void validateisChineseName(String value, String errorMsg) throws ValidateException { + if (false == isChineseName(value)) { + throw new ValidateException(errorMsg); + } + } + } diff --git a/bus-core/src/main/java/org/aoju/bus/core/lang/Weighing.java b/bus-core/src/main/java/org/aoju/bus/core/lang/Weighing.java index 7b446d5789..a1fe804960 100755 --- a/bus-core/src/main/java/org/aoju/bus/core/lang/Weighing.java +++ b/bus-core/src/main/java/org/aoju/bus/core/lang/Weighing.java @@ -67,7 +67,7 @@ public Weighing() { * * @param weightObj 带有权重的对象 */ - public Weighing(WeightObj weightObj) { + public Weighing(WeightObject weightObj) { this(); if (null != weightObj) { add(weightObj); @@ -79,10 +79,10 @@ public Weighing(WeightObj weightObj) { * * @param weightObjs 带有权重的对象 */ - public Weighing(Iterable> weightObjs) { + public Weighing(Iterable> weightObjs) { this(); if (CollKit.isNotEmpty(weightObjs)) { - for (WeightObj weightObj : weightObjs) { + for (WeightObject weightObj : weightObjs) { add(weightObj); } } @@ -93,9 +93,9 @@ public Weighing(Iterable> weightObjs) { * * @param weightObjs 带有权重的对象 */ - public Weighing(WeightObj[] weightObjs) { + public Weighing(WeightObject[] weightObjs) { this(); - for (WeightObj weightObj : weightObjs) { + for (WeightObject weightObj : weightObjs) { add(weightObj); } } @@ -113,12 +113,12 @@ public static Weighing create() { /** * 增加对象 * - * @param obj 对象 + * @param object 对象 * @param weight 权重 * @return this */ - public Weighing add(T obj, double weight) { - return add(new WeightObj<>(obj, weight)); + public Weighing add(T object, double weight) { + return add(new WeightObject<>(object, weight)); } /** @@ -127,9 +127,9 @@ public Weighing add(T obj, double weight) { * @param weightObj 权重对象 * @return this */ - public Weighing add(WeightObj weightObj) { + public Weighing add(WeightObject weightObj) { double lastWeight = (this.weightMap.size() == 0) ? 0 : this.weightMap.lastKey(); - this.weightMap.put(weightObj.getWeight() + lastWeight, weightObj.getObj());// 权重累加 + this.weightMap.put(weightObj.getWeight() + lastWeight, weightObj.getObject());// 权重累加 return this; } @@ -165,7 +165,7 @@ public T next() { * * @param 对象类型 */ - public static class WeightObj { + public static class WeightObject { /** * 权重 */ @@ -173,16 +173,16 @@ public static class WeightObj { /** * 对象 */ - private T obj; + private T object; /** * 构造 * - * @param obj 对象 + * @param object 对象 * @param weight 权重 */ - public WeightObj(T obj, double weight) { - this.obj = obj; + public WeightObject(T object, double weight) { + this.object = object; this.weight = weight; } @@ -191,17 +191,17 @@ public WeightObj(T obj, double weight) { * * @return 对象 */ - public T getObj() { - return obj; + public T getObject() { + return object; } /** * 设置对象 * - * @param obj 对象 + * @param object 对象 */ - public void setObj(T obj) { - this.obj = obj; + public void setObject(T object) { + this.object = object; } /** @@ -217,7 +217,7 @@ public double getWeight() { public int hashCode() { final int prime = 31; int result = 1; - result = prime * result + ((null == obj) ? 0 : obj.hashCode()); + result = prime * result + ((null == object) ? 0 : object.hashCode()); long temp; temp = Double.doubleToLongBits(weight); result = prime * result + (int) (temp ^ (temp >>> Normal._32)); @@ -225,22 +225,22 @@ public int hashCode() { } @Override - public boolean equals(Object obj) { - if (this == obj) { + public boolean equals(Object object) { + if (this == object) { return true; } - if (null == obj) { + if (null == object) { return false; } - if (getClass() != obj.getClass()) { + if (getClass() != object.getClass()) { return false; } - WeightObj other = (WeightObj) obj; - if (null == this.obj) { - if (null != other.obj) { + WeightObject other = (WeightObject) object; + if (null == this.object) { + if (null != other.object) { return false; } - } else if (!this.obj.equals(other.obj)) { + } else if (!this.object.equals(other.object)) { return false; } return Double.doubleToLongBits(weight) == Double.doubleToLongBits(other.weight); diff --git a/bus-core/src/main/java/org/aoju/bus/core/lang/ansi/Ansi8BitColor.java b/bus-core/src/main/java/org/aoju/bus/core/lang/ansi/Ansi8BitColor.java index 75e09220a2..82a4f7ba0c 100755 --- a/bus-core/src/main/java/org/aoju/bus/core/lang/ansi/Ansi8BitColor.java +++ b/bus-core/src/main/java/org/aoju/bus/core/lang/ansi/Ansi8BitColor.java @@ -83,14 +83,14 @@ public static Ansi8BitColor background(int code) { } @Override - public boolean equals(Object obj) { - if (this == obj) { + public boolean equals(Object object) { + if (this == object) { return true; } - if (obj == null || getClass() != obj.getClass()) { + if (object == null || getClass() != object.getClass()) { return false; } - Ansi8BitColor other = (Ansi8BitColor) obj; + Ansi8BitColor other = (Ansi8BitColor) object; return this.prefix.equals(other.prefix) && this.code == other.code; } diff --git a/bus-core/src/main/java/org/aoju/bus/core/lang/mutable/MutableBool.java b/bus-core/src/main/java/org/aoju/bus/core/lang/mutable/MutableBoolean.java similarity index 85% rename from bus-core/src/main/java/org/aoju/bus/core/lang/mutable/MutableBool.java rename to bus-core/src/main/java/org/aoju/bus/core/lang/mutable/MutableBoolean.java index 3375da6d6a..6973b7ef29 100755 --- a/bus-core/src/main/java/org/aoju/bus/core/lang/mutable/MutableBool.java +++ b/bus-core/src/main/java/org/aoju/bus/core/lang/mutable/MutableBoolean.java @@ -32,14 +32,14 @@ * @see Boolean * @since Java 17+ */ -public class MutableBool implements Comparable, Mutable { +public class MutableBoolean implements Comparable, Mutable { private boolean value; /** * 构造,默认值0 */ - public MutableBool() { + public MutableBoolean() { } @@ -48,7 +48,7 @@ public MutableBool() { * * @param value 值 */ - public MutableBool(final boolean value) { + public MutableBoolean(final boolean value) { this.value = value; } @@ -58,7 +58,7 @@ public MutableBool(final boolean value) { * @param value String值 * @throws NumberFormatException 转为Boolean错误 */ - public MutableBool(final String value) throws NumberFormatException { + public MutableBoolean(final String value) throws NumberFormatException { this.value = Boolean.parseBoolean(value); } @@ -85,17 +85,17 @@ public void set(final Boolean value) { * 相等需同时满足如下条件: *
      *
    1. 非空
    2. - *
    3. 类型为 {@link MutableBool}
    4. + *
    5. 类型为 {@link MutableBoolean}
    6. *
    7. 值相等
    8. *
    * - * @param obj 比对的对象 + * @param object 比对的对象 * @return 相同返回true,否则 false */ @Override - public boolean equals(final Object obj) { - if (obj instanceof MutableBool) { - return value == ((MutableBool) obj).value; + public boolean equals(final Object object) { + if (object instanceof MutableBoolean) { + return value == ((MutableBoolean) object).value; } return false; } @@ -108,11 +108,11 @@ public int hashCode() { /** * 比较 * - * @param other 其它 {@link MutableBool} 对象 + * @param other 其它 {@link MutableBoolean} 对象 * @return x==y返回0,x<y返回-1,x>y返回1 */ @Override - public int compareTo(final MutableBool other) { + public int compareTo(final MutableBoolean other) { return Boolean.compare(this.value, other.value); } diff --git a/bus-core/src/main/java/org/aoju/bus/core/lang/mutable/MutableByte.java b/bus-core/src/main/java/org/aoju/bus/core/lang/mutable/MutableByte.java index ffb3bd9bc4..2ee23db3dd 100755 --- a/bus-core/src/main/java/org/aoju/bus/core/lang/mutable/MutableByte.java +++ b/bus-core/src/main/java/org/aoju/bus/core/lang/mutable/MutableByte.java @@ -193,13 +193,13 @@ public double doubleValue() { *
  • 值相等
  • * * - * @param obj 比对的对象 + * @param object 比对的对象 * @return 相同返回true,否则 false */ @Override - public boolean equals(final Object obj) { - if (obj instanceof MutableByte) { - return value == ((MutableByte) obj).byteValue(); + public boolean equals(final Object object) { + if (object instanceof MutableByte) { + return value == ((MutableByte) object).byteValue(); } return false; } diff --git a/bus-core/src/main/java/org/aoju/bus/core/lang/mutable/MutableDouble.java b/bus-core/src/main/java/org/aoju/bus/core/lang/mutable/MutableDouble.java index f98fc9688b..d2845c27c2 100755 --- a/bus-core/src/main/java/org/aoju/bus/core/lang/mutable/MutableDouble.java +++ b/bus-core/src/main/java/org/aoju/bus/core/lang/mutable/MutableDouble.java @@ -187,13 +187,13 @@ public double doubleValue() { *
  • 值相等
  • * * - * @param obj 比对的对象 + * @param object 比对的对象 * @return 相同返回true,否则 false */ @Override - public boolean equals(final Object obj) { - if (obj instanceof MutableDouble) { - return (Double.doubleToLongBits(((MutableDouble) obj).value) == Double.doubleToLongBits(value)); + public boolean equals(final Object object) { + if (object instanceof MutableDouble) { + return (Double.doubleToLongBits(((MutableDouble) object).value) == Double.doubleToLongBits(value)); } return false; } diff --git a/bus-core/src/main/java/org/aoju/bus/core/lang/mutable/MutableFloat.java b/bus-core/src/main/java/org/aoju/bus/core/lang/mutable/MutableFloat.java index d1121ea647..a7acb78a3a 100755 --- a/bus-core/src/main/java/org/aoju/bus/core/lang/mutable/MutableFloat.java +++ b/bus-core/src/main/java/org/aoju/bus/core/lang/mutable/MutableFloat.java @@ -188,13 +188,13 @@ public double doubleValue() { *
  • 值相等
  • * * - * @param obj 比对的对象 + * @param object 比对的对象 * @return 相同返回true,否则 false */ @Override - public boolean equals(final Object obj) { - if (obj instanceof MutableFloat) { - return (Float.floatToIntBits(((MutableFloat) obj).value) == Float.floatToIntBits(value)); + public boolean equals(final Object object) { + if (object instanceof MutableFloat) { + return (Float.floatToIntBits(((MutableFloat) object).value) == Float.floatToIntBits(value)); } return false; } diff --git a/bus-core/src/main/java/org/aoju/bus/core/lang/mutable/MutableInt.java b/bus-core/src/main/java/org/aoju/bus/core/lang/mutable/MutableInt.java index 92839fe208..f8906f63ce 100755 --- a/bus-core/src/main/java/org/aoju/bus/core/lang/mutable/MutableInt.java +++ b/bus-core/src/main/java/org/aoju/bus/core/lang/mutable/MutableInt.java @@ -188,13 +188,13 @@ public double doubleValue() { *
  • 值相等
  • * * - * @param obj 比对的对象 + * @param object 比对的对象 * @return 相同返回true,否则 false */ @Override - public boolean equals(final Object obj) { - if (obj instanceof MutableInt) { - return value == ((MutableInt) obj).intValue(); + public boolean equals(final Object object) { + if (object instanceof MutableInt) { + return value == ((MutableInt) object).intValue(); } return false; } diff --git a/bus-core/src/main/java/org/aoju/bus/core/lang/mutable/MutableLong.java b/bus-core/src/main/java/org/aoju/bus/core/lang/mutable/MutableLong.java index dfae0dcd8f..eb1b5b8ba5 100755 --- a/bus-core/src/main/java/org/aoju/bus/core/lang/mutable/MutableLong.java +++ b/bus-core/src/main/java/org/aoju/bus/core/lang/mutable/MutableLong.java @@ -189,13 +189,13 @@ public double doubleValue() { *
  • 值相等
  • * * - * @param obj 比对的对象 + * @param object 比对的对象 * @return 相同返回true,否则 false */ @Override - public boolean equals(final Object obj) { - if (obj instanceof MutableLong) { - return value == ((MutableLong) obj).longValue(); + public boolean equals(final Object object) { + if (object instanceof MutableLong) { + return value == ((MutableLong) object).longValue(); } return false; } diff --git a/bus-core/src/main/java/org/aoju/bus/core/lang/mutable/MutableObject.java b/bus-core/src/main/java/org/aoju/bus/core/lang/mutable/MutableObject.java index 72619005c2..d806e64f5d 100755 --- a/bus-core/src/main/java/org/aoju/bus/core/lang/mutable/MutableObject.java +++ b/bus-core/src/main/java/org/aoju/bus/core/lang/mutable/MutableObject.java @@ -73,15 +73,15 @@ public void set(final T value) { } @Override - public boolean equals(final Object obj) { - if (null == obj) { + public boolean equals(final Object object) { + if (null == object) { return false; } - if (this == obj) { + if (this == object) { return true; } - if (this.getClass() == obj.getClass()) { - final MutableObject that = (MutableObject) obj; + if (this.getClass() == object.getClass()) { + final MutableObject that = (MutableObject) object; return this.value.equals(that.value); } return false; diff --git a/bus-core/src/main/java/org/aoju/bus/core/lang/mutable/MutableShort.java b/bus-core/src/main/java/org/aoju/bus/core/lang/mutable/MutableShort.java index 0079daf8e7..0ffd3c5474 100755 --- a/bus-core/src/main/java/org/aoju/bus/core/lang/mutable/MutableShort.java +++ b/bus-core/src/main/java/org/aoju/bus/core/lang/mutable/MutableShort.java @@ -193,13 +193,13 @@ public double doubleValue() { *
  • 值相等
  • * * - * @param obj 比对的对象 + * @param object 比对的对象 * @return 相同返回true,否则 false */ @Override - public boolean equals(final Object obj) { - if (obj instanceof MutableShort) { - return value == ((MutableShort) obj).shortValue(); + public boolean equals(final Object object) { + if (object instanceof MutableShort) { + return value == ((MutableShort) object).shortValue(); } return false; } diff --git a/bus-core/src/main/java/org/aoju/bus/core/lang/reflect/MethodHandle.java b/bus-core/src/main/java/org/aoju/bus/core/lang/reflect/MethodHandle.java index ee89f08000..077bba52df 100755 --- a/bus-core/src/main/java/org/aoju/bus/core/lang/reflect/MethodHandle.java +++ b/bus-core/src/main/java/org/aoju/bus/core/lang/reflect/MethodHandle.java @@ -149,33 +149,33 @@ public static java.lang.invoke.MethodHandle findConstructor(Class callerClass *
    * * @param 返回结果类型 - * @param obj 接口的子对象或代理对象 + * @param object 接口的子对象或代理对象 * @param methodName 方法名称 * @param args 参数 * @return 结果 */ - public static T invokeSpecial(Object obj, String methodName, Object... args) { - Assert.notNull(obj, "Object to get method must be not null!"); + public static T invokeSpecial(Object object, String methodName, Object... args) { + Assert.notNull(object, "Object to get method must be not null!"); Assert.notBlank(methodName, "Method name must be not blank!"); - final Method method = ReflectKit.getMethodOfObj(obj, methodName, args); + final Method method = ReflectKit.getMethodOfObject(object, methodName, args); if (null == method) { - throw new InstrumentException("No such method: [{}] from [{}]", methodName, obj.getClass()); + throw new InstrumentException("No such method: [{}] from [{}]", methodName, object.getClass()); } - return invokeSpecial(obj, method, args); + return invokeSpecial(object, method, args); } /** * 执行接口或对象中的方法 * * @param 返回结果类型 - * @param obj 接口的子对象或代理对象 + * @param object 接口的子对象或代理对象 * @param method 方法 * @param args 参数 * @return 结果 */ - public static T invoke(Object obj, Method method, Object... args) { - return invoke(false, obj, method, args); + public static T invoke(Object object, Method method, Object... args) { + return invoke(false, object, method, args); } /** @@ -195,13 +195,13 @@ public static T invoke(Object obj, Method method, Object... args) { * * * @param 返回结果类型 - * @param obj 接口的子对象或代理对象 + * @param object 接口的子对象或代理对象 * @param method 方法 * @param args 参数 * @return 结果 */ - public static T invokeSpecial(Object obj, Method method, Object... args) { - return invoke(true, obj, method, args); + public static T invokeSpecial(Object object, Method method, Object... args) { + return invoke(true, object, method, args); } /** @@ -222,20 +222,20 @@ public static T invokeSpecial(Object obj, Method method, Object... args) { * * @param 返回结果类型 * @param isSpecial 是否为特殊方法(private、static等) - * @param obj 接口的子对象或代理对象 + * @param object 接口的子对象或代理对象 * @param method 方法 * @param args 参数 * @return 结果 */ - public static T invoke(boolean isSpecial, Object obj, Method method, Object... args) { + public static T invoke(boolean isSpecial, Object object, Method method, Object... args) { Assert.notNull(method, "Method must be not null!"); final Class declaringClass = method.getDeclaringClass(); final MethodHandles.Lookup lookup = lookup(declaringClass); try { java.lang.invoke.MethodHandle handle = isSpecial ? lookup.unreflectSpecial(method, declaringClass) : lookup.unreflect(method); - if (null != obj) { - handle = handle.bindTo(obj); + if (null != object) { + handle = handle.bindTo(object); } return (T) handle.invokeWithArguments(args); } catch (Throwable e) { diff --git a/bus-core/src/main/java/org/aoju/bus/core/lang/tuple/Pair.java b/bus-core/src/main/java/org/aoju/bus/core/lang/tuple/Pair.java index 8fb87911d9..8b4c569496 100755 --- a/bus-core/src/main/java/org/aoju/bus/core/lang/tuple/Pair.java +++ b/bus-core/src/main/java/org/aoju/bus/core/lang/tuple/Pair.java @@ -114,16 +114,16 @@ public int compareTo(final Pair other) { /** * 据这两个元素,将这一对与另一对进行比较 * - * @param obj 要比较的对象null返回false + * @param object 要比较的对象null返回false * @return 如果这一对的元素相等,则为true */ @Override - public boolean equals(final Object obj) { - if (obj == this) { + public boolean equals(final Object object) { + if (object == this) { return true; } - if (obj instanceof Map.Entry) { - final Map.Entry other = (Map.Entry) obj; + if (object instanceof Map.Entry) { + final Map.Entry other = (Map.Entry) object; return Objects.equals(getKey(), other.getKey()) && Objects.equals(getValue(), other.getValue()); } diff --git a/bus-core/src/main/java/org/aoju/bus/core/lang/tuple/Triple.java b/bus-core/src/main/java/org/aoju/bus/core/lang/tuple/Triple.java index 6fcd746291..4f71b755fc 100755 --- a/bus-core/src/main/java/org/aoju/bus/core/lang/tuple/Triple.java +++ b/bus-core/src/main/java/org/aoju/bus/core/lang/tuple/Triple.java @@ -78,12 +78,12 @@ public int compareTo(final Triple other) { } @Override - public boolean equals(final Object obj) { - if (obj == this) { + public boolean equals(final Object object) { + if (object == this) { return true; } - if (obj instanceof Triple) { - final Triple other = (Triple) obj; + if (object instanceof Triple) { + final Triple other = (Triple) object; return Objects.equals(getLeft(), other.getLeft()) && Objects.equals(getMiddle(), other.getMiddle()) && Objects.equals(getRight(), other.getRight()); diff --git a/bus-core/src/main/java/org/aoju/bus/core/lock/ListWithLock.java b/bus-core/src/main/java/org/aoju/bus/core/lock/ListWithLock.java index 7e6e5b1229..591e140685 100644 --- a/bus-core/src/main/java/org/aoju/bus/core/lock/ListWithLock.java +++ b/bus-core/src/main/java/org/aoju/bus/core/lock/ListWithLock.java @@ -72,7 +72,7 @@ public boolean add(T t) { WriteLock writeLock = this.writeLock(); writeLock.lock(); try { - List list = this.getObj(); + List list = this.getObject(); return list.add(t); } catch (Throwable e) { Console.error(e.getMessage(), e); @@ -89,7 +89,7 @@ public void clear() { WriteLock writeLock = this.writeLock(); writeLock.lock(); try { - this.getObj().clear(); + this.getObject().clear(); } catch (Throwable e) { Console.error(e.getMessage(), e); } finally { @@ -107,7 +107,7 @@ public boolean remove(T t) { WriteLock writeLock = this.writeLock(); writeLock.lock(); try { - List list = this.getObj(); + List list = this.getObject(); return list.remove(t); } catch (Throwable e) { Console.error(e.getMessage(), e); @@ -126,7 +126,7 @@ public int size() { ReadLock readLock = this.readLock(); readLock.lock(); try { - List list = this.getObj(); + List list = this.getObject(); return list.size(); } finally { readLock.unlock(); diff --git a/bus-core/src/main/java/org/aoju/bus/core/lock/MapWithLock.java b/bus-core/src/main/java/org/aoju/bus/core/lock/MapWithLock.java index 1b28e3b9de..ac38c12493 100644 --- a/bus-core/src/main/java/org/aoju/bus/core/lock/MapWithLock.java +++ b/bus-core/src/main/java/org/aoju/bus/core/lock/MapWithLock.java @@ -89,7 +89,7 @@ public V put(K key, V value) { WriteLock writeLock = this.writeLock(); writeLock.lock(); try { - Map map = this.getObj(); + Map map = this.getObject(); return map.put(key, value); } catch (Throwable e) { Console.error(e.getMessage(), e); @@ -111,7 +111,7 @@ public V putIfAbsent(K key, V value) { WriteLock writeLock = this.writeLock(); writeLock.lock(); try { - Map map = this.getObj(); + Map map = this.getObject(); V oldValue = map.putIfAbsent(key, value); if (null == oldValue) { return value; @@ -139,7 +139,7 @@ public void putAll(Map map) { WriteLock writeLock = this.writeLock(); writeLock.lock(); try { - this.getObj().putAll(map); + this.getObject().putAll(map); } catch (Throwable e) { Console.error(e.getMessage(), e); } finally { @@ -154,7 +154,7 @@ public void clear() { WriteLock writeLock = this.writeLock(); writeLock.lock(); try { - Map map = this.getObj(); + Map map = this.getObject(); map.clear(); } catch (Throwable e) { Console.error(e.getMessage(), e); @@ -173,7 +173,7 @@ public V remove(K key) { WriteLock writeLock = this.writeLock(); writeLock.lock(); try { - Map map = this.getObj(); + Map map = this.getObject(); return map.remove(key); } catch (Throwable e) { Console.error(e.getMessage(), e); @@ -193,7 +193,7 @@ public V get(K key) { ReadLock readLock = this.readLock(); readLock.lock(); try { - Map map = this.getObj(); + Map map = this.getObject(); return map.get(key); } catch (Throwable e) { Console.error(e.getMessage(), e); @@ -212,7 +212,7 @@ public int size() { ReadLock readLock = this.readLock(); readLock.lock(); try { - Map map = this.getObj(); + Map map = this.getObject(); return map.size(); } finally { readLock.unlock(); @@ -228,8 +228,8 @@ public Map copy() { ReadLock readLock = readLock(); readLock.lock(); try { - if (this.getObj().size() > 0) { - return new HashMap<>(getObj()); + if (this.getObject().size() > 0) { + return new HashMap<>(getObject()); } return null; } finally { diff --git a/bus-core/src/main/java/org/aoju/bus/core/lock/ObjWithLock.java b/bus-core/src/main/java/org/aoju/bus/core/lock/ObjWithLock.java index e8cf0b9223..6b73fcfaa2 100644 --- a/bus-core/src/main/java/org/aoju/bus/core/lock/ObjWithLock.java +++ b/bus-core/src/main/java/org/aoju/bus/core/lock/ObjWithLock.java @@ -51,26 +51,26 @@ public class ObjWithLock implements Serializable { /** * 对象信息 */ - private T obj; + private T object; /** * 构造对象 * - * @param obj 对象信息 + * @param object 对象信息 */ - public ObjWithLock(T obj) { - this(obj, new ReentrantReadWriteLock()); + public ObjWithLock(T object) { + this(object, new ReentrantReadWriteLock()); } /** * 构造对象 * - * @param obj 对象信息 - * @param lock 读写锁 + * @param object 对象信息 + * @param lock 读写锁 */ - public ObjWithLock(T obj, ReentrantReadWriteLock lock) { + public ObjWithLock(T object, ReentrantReadWriteLock lock) { super(); - this.obj = obj; + this.object = object; this.lock = lock; } @@ -106,17 +106,17 @@ public ReadLock readLock() { * * @return 对象 */ - public T getObj() { - return obj; + public T getObject() { + return object; } /** * 设置对象 * - * @param obj 对象信息 + * @param object 对象信息 */ - public void setObj(T obj) { - this.obj = obj; + public void setObject(T object) { + this.object = object; } /** @@ -128,7 +128,7 @@ public void read(LockHandler readLockHandler) { ReadLock readLock = lock.readLock(); readLock.lock(); try { - readLockHandler.read(obj); + readLockHandler.read(object); } catch (Throwable e) { Console.error(e.getMessage(), e); } finally { @@ -145,7 +145,7 @@ public void write(LockHandler writeLockHandler) { WriteLock writeLock = lock.writeLock(); writeLock.lock(); try { - writeLockHandler.write(obj); + writeLockHandler.write(object); } catch (Throwable e) { Console.error(e.getMessage(), e); } finally { diff --git a/bus-core/src/main/java/org/aoju/bus/core/lock/SetWithLock.java b/bus-core/src/main/java/org/aoju/bus/core/lock/SetWithLock.java index 8c08b2245b..d32991b1d8 100644 --- a/bus-core/src/main/java/org/aoju/bus/core/lock/SetWithLock.java +++ b/bus-core/src/main/java/org/aoju/bus/core/lock/SetWithLock.java @@ -68,7 +68,7 @@ public boolean add(T t) { ReentrantReadWriteLock.WriteLock writeLock = this.writeLock(); writeLock.lock(); try { - Set set = this.getObj(); + Set set = this.getObject(); return set.add(t); } catch (Throwable e) { Console.error(e.getMessage(), e); @@ -85,7 +85,7 @@ public void clear() { ReentrantReadWriteLock.WriteLock writeLock = this.writeLock(); writeLock.lock(); try { - Set set = this.getObj(); + Set set = this.getObject(); set.clear(); } catch (Throwable e) { Console.error(e.getMessage(), e); @@ -104,7 +104,7 @@ public boolean remove(T t) { ReentrantReadWriteLock.WriteLock writeLock = this.writeLock(); writeLock.lock(); try { - Set set = this.getObj(); + Set set = this.getObject(); return set.remove(t); } catch (Throwable e) { Console.error(e.getMessage(), e); @@ -123,7 +123,7 @@ public int size() { ReentrantReadWriteLock.ReadLock readLock = this.readLock(); readLock.lock(); try { - Set set = this.getObj(); + Set set = this.getObject(); return set.size(); } finally { readLock.unlock(); diff --git a/bus-core/src/main/java/org/aoju/bus/core/map/AbstractTable.java b/bus-core/src/main/java/org/aoju/bus/core/map/AbstractTable.java index 3f1d52ba31..c14dab3f67 100644 --- a/bus-core/src/main/java/org/aoju/bus/core/map/AbstractTable.java +++ b/bus-core/src/main/java/org/aoju/bus/core/map/AbstractTable.java @@ -56,11 +56,11 @@ public abstract class AbstractTable implements Table { private Set> cellSet; @Override - public boolean equals(Object obj) { - if (obj == this) { + public boolean equals(Object object) { + if (object == this) { return true; - } else if (obj instanceof Table) { - final Table that = (Table) obj; + } else if (object instanceof Table) { + final Table that = (Table) object; return this.cellSet().equals(that.cellSet()); } else { return false; @@ -131,12 +131,12 @@ public V getValue() { } @Override - public boolean equals(Object obj) { - if (obj == this) { + public boolean equals(Object object) { + if (object == this) { return true; } - if (obj instanceof Cell) { - Cell other = (Cell) obj; + if (object instanceof Cell) { + Cell other = (Cell) object; return ObjectKit.equal(rowKey, other.getRowKey()) && ObjectKit.equal(columnKey, other.getColumnKey()) && ObjectKit.equal(value, other.getValue()); diff --git a/bus-core/src/main/java/org/aoju/bus/core/map/ForestMap.java b/bus-core/src/main/java/org/aoju/bus/core/map/ForestMap.java index 3dd6556804..fbbd7fd44f 100644 --- a/bus-core/src/main/java/org/aoju/bus/core/map/ForestMap.java +++ b/bus-core/src/main/java/org/aoju/bus/core/map/ForestMap.java @@ -307,6 +307,18 @@ default boolean containsChildNode(K parentKey, K childKey) { .orElse(false); } + /** + * 获取指定节点的值 + * + * @param key 节点的key + * @return 节点值,若节点不存在,或节点值为null都将返回null + */ + default V getNodeValue(K key) { + return Optional.ofNullable(get(key)) + .map(TreeEntry::getValue) + .get(); + } + /** * 获取指定父节点直接关联的子节点
    * 比如:若存在 a -> b -> c 的关系,此时输入 b 将返回 c,输入 a 将返回 b diff --git a/bus-core/src/main/java/org/aoju/bus/core/map/MapProxy.java b/bus-core/src/main/java/org/aoju/bus/core/map/MapProxy.java index e42db02bca..2a8e3a7458 100755 --- a/bus-core/src/main/java/org/aoju/bus/core/map/MapProxy.java +++ b/bus-core/src/main/java/org/aoju/bus/core/map/MapProxy.java @@ -73,7 +73,7 @@ public static MapProxy create(Map map) { return (map instanceof MapProxy) ? (MapProxy) map : new MapProxy(map); } - public Object getObj(Object key, Object defaultValue) { + public Object getObject(Object key, Object defaultValue) { final Object value = map.get(key); return null != value ? value : defaultValue; } diff --git a/bus-core/src/main/java/org/aoju/bus/core/map/MapWrapper.java b/bus-core/src/main/java/org/aoju/bus/core/map/MapWrapper.java index f853aa2057..192e8eff92 100755 --- a/bus-core/src/main/java/org/aoju/bus/core/map/MapWrapper.java +++ b/bus-core/src/main/java/org/aoju/bus/core/map/MapWrapper.java @@ -47,6 +47,8 @@ */ public class MapWrapper implements Map, Iterable>, Serializable, Cloneable { + private static final long serialVersionUID = 1L; + /** * 默认增长因子 */ diff --git a/bus-core/src/main/java/org/aoju/bus/core/map/TransitionMap.java b/bus-core/src/main/java/org/aoju/bus/core/map/TransitionMap.java index 3e9fcb7c6e..3a23356a72 100644 --- a/bus-core/src/main/java/org/aoju/bus/core/map/TransitionMap.java +++ b/bus-core/src/main/java/org/aoju/bus/core/map/TransitionMap.java @@ -27,6 +27,7 @@ import java.util.Map; import java.util.function.BiFunction; +import java.util.function.Function; import java.util.function.Supplier; /** @@ -94,7 +95,7 @@ public boolean remove(Object key, Object value) { @Override public boolean replace(K key, V oldValue, V newValue) { - return super.replace(customKey(key), customValue(oldValue), customValue(values())); + return super.replace(customKey(key), customValue(oldValue), customValue(newValue)); } @Override @@ -122,6 +123,16 @@ public V merge(K key, V value, BiFunction rem return super.merge(customKey(key), customValue(value), (v1, v2) -> remappingFunction.apply(customValue(v1), customValue(v2))); } + @Override + public V putIfAbsent(K key, V value) { + return super.putIfAbsent(customKey(key), customValue(value)); + } + + @Override + public V computeIfAbsent(final K key, final Function mappingFunction) { + return super.computeIfAbsent(customKey(key), mappingFunction); + } + /** * 自定义键 * diff --git a/bus-core/src/main/java/org/aoju/bus/core/scanner/CombinationElement.java b/bus-core/src/main/java/org/aoju/bus/core/scanner/CombinationElement.java deleted file mode 100755 index 3e59eaea45..0000000000 --- a/bus-core/src/main/java/org/aoju/bus/core/scanner/CombinationElement.java +++ /dev/null @@ -1,185 +0,0 @@ -/********************************************************************************* - * * - * The MIT License (MIT) * - * * - * Copyright (c) 2015-2022 aoju.org and other contributors. * - * * - * Permission is hereby granted, free of charge, to any person obtaining a copy * - * of this software and associated documentation files (the "Software"), to deal * - * in the Software without restriction, including without limitation the rights * - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * - * copies of the Software, and to permit persons to whom the Software is * - * furnished to do so, subject to the following conditions: * - * * - * The above copyright notice and this permission notice shall be included in * - * all copies or substantial portions of the Software. * - * * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * - * THE SOFTWARE. * - * * - ********************************************************************************/ -package org.aoju.bus.core.scanner; - -import org.aoju.bus.core.map.TableMap; -import org.aoju.bus.core.toolkit.AnnoKit; - -import java.io.Serializable; -import java.lang.annotation.Annotation; -import java.lang.reflect.AnnotatedElement; -import java.util.Arrays; -import java.util.Collection; -import java.util.Map; -import java.util.function.Predicate; - -/** - * 组合注解 对JDK的原生注解机制做一个增强,支持类似Spring的组合注解 - * 核心实现使用了递归获取指定元素上的注解以及注解的注解,以实现复合注解的获取 - * - * @author Kimi Liu - * @since Java 17+ - */ - -public class CombinationElement implements AnnotatedElement, Serializable { - - private static final long serialVersionUID = 1L; - /** - * 过滤器 - */ - private final Predicate predicate; - /** - * 注解类型与注解对象对应表 - */ - private Map, Annotation> annotationMap; - /** - * 直接注解类型与注解对象对应表 - */ - private Map, Annotation> declaredAnnotationMap; - - /** - * 构造 - * - * @param element 需要解析注解的元素:可以是Class、Method、Field、Constructor、ReflectPermission - */ - public CombinationElement(AnnotatedElement element) { - this(element, null); - } - - /** - * 构造 - * - * @param element 需要解析注解的元素:可以是Class、Method、Field、Constructor、ReflectPermission - * @param predicate 过滤器,{@link Predicate#test(Object)}返回{@code true}保留,否则不保留 - */ - public CombinationElement(AnnotatedElement element, Predicate predicate) { - this.predicate = predicate; - init(element); - } - - /** - * 创建CombinationAnnotationElement - * - * @param element 需要解析注解的元素:可以是Class、Method、Field、Constructor、ReflectPermission - * @param predicate 过滤器,{@link Predicate#test(Object)}返回{@code true}保留,否则不保留 - * @return the object - */ - public static CombinationElement of(AnnotatedElement element, Predicate predicate) { - return new CombinationElement(element, predicate); - } - - @Override - public boolean isAnnotationPresent(Class annotationClass) { - return annotationMap.containsKey(annotationClass); - } - - @Override - public T getAnnotation(Class annotationClass) { - Annotation annotation = annotationMap.get(annotationClass); - return (annotation == null) ? null : (T) annotation; - } - - @Override - public Annotation[] getAnnotations() { - final Collection annotations = this.annotationMap.values(); - return annotations.toArray(new Annotation[0]); - } - - @Override - public Annotation[] getDeclaredAnnotations() { - final Collection annotations = this.declaredAnnotationMap.values(); - return annotations.toArray(new Annotation[0]); - } - - /** - * 初始化 - * - * @param element 元素 - */ - private void init(AnnotatedElement element) { - final Annotation[] declaredAnnotations = element.getDeclaredAnnotations(); - this.declaredAnnotationMap = new TableMap<>(); - parseDeclared(declaredAnnotations); - - final Annotation[] annotations = element.getAnnotations(); - if (Arrays.equals(declaredAnnotations, annotations)) { - this.annotationMap = this.declaredAnnotationMap; - } else { - this.annotationMap = new TableMap<>(); - parse(annotations); - } - } - - /** - * 进行递归解析注解,直到全部都是元注解为止 - * - * @param annotations Class, Method, Field等 - */ - private void parseDeclared(Annotation[] annotations) { - Class annotationType; - // 直接注解 - for (Annotation annotation : annotations) { - annotationType = annotation.annotationType(); - if (AnnoKit.isNotJdkMateAnnotation(annotationType)) { - if (test(annotation)) { - declaredAnnotationMap.put(annotationType, annotation); - } - // 测试不通过的注解,不影响继续递归 - parseDeclared(annotationType.getDeclaredAnnotations()); - } - } - } - - /** - * 进行递归解析注解,直到全部都是元注解为止 - * - * @param annotations Class, Method, Field等 - */ - private void parse(Annotation[] annotations) { - Class annotationType; - for (Annotation annotation : annotations) { - annotationType = annotation.annotationType(); - if (AnnoKit.isNotJdkMateAnnotation(annotationType)) { - if (test(annotation)) { - annotationMap.put(annotationType, annotation); - } - // 测试不通过的注解,不影响继续递归 - parse(annotationType.getAnnotations()); - } - } - } - - /** - * 检查给定的注解是否符合过滤条件 - * - * @param annotation 注解对象 - * @return 是否符合条件 - */ - private boolean test(Annotation annotation) { - return null == this.predicate || this.predicate.test(annotation); - } - -} diff --git a/bus-core/src/main/java/org/aoju/bus/core/swing/StringListener.java b/bus-core/src/main/java/org/aoju/bus/core/swing/StringListener.java index ff3cd8eb13..09adf80845 100755 --- a/bus-core/src/main/java/org/aoju/bus/core/swing/StringListener.java +++ b/bus-core/src/main/java/org/aoju/bus/core/swing/StringListener.java @@ -45,7 +45,7 @@ public abstract class StringListener implements ClipboardListener, Serializable @Override public Transferable onChange(Clipboard clipboard, Transferable contents) { if (contents.isDataFlavorSupported(DataFlavor.stringFlavor)) { - return onChange(clipboard, SwingKit.getStr(contents)); + return onChange(clipboard, SwingKit.getString(contents)); } return null; } diff --git a/bus-core/src/main/java/org/aoju/bus/core/text/Lookups.java b/bus-core/src/main/java/org/aoju/bus/core/text/Lookups.java index 922362d1cb..fa9b937808 100755 --- a/bus-core/src/main/java/org/aoju/bus/core/text/Lookups.java +++ b/bus-core/src/main/java/org/aoju/bus/core/text/Lookups.java @@ -30,7 +30,7 @@ import java.util.Map; /** - * 查找字符串值的字符串键. + * 查找字符串值的字符串键 * * @author Kimi Liu * @since Java 17+ @@ -38,7 +38,7 @@ public abstract class Lookups { /** - * 基于系统属性的查找. + * 基于系统属性的查找 */ private static final Lookups SYSTEM_PROPERTIES_LOOKUP = new SystemPropertiesLookups(); @@ -110,11 +110,11 @@ public String lookup(final String key) { if (null == map) { return null; } - final Object obj = map.get(key); - if (null == obj) { + final Object object = map.get(key); + if (null == object) { return null; } - return obj.toString(); + return object.toString(); } } diff --git a/bus-core/src/main/java/org/aoju/bus/core/text/TextBuilder.java b/bus-core/src/main/java/org/aoju/bus/core/text/TextBuilder.java index 7732665cf8..0288e9472b 100755 --- a/bus-core/src/main/java/org/aoju/bus/core/text/TextBuilder.java +++ b/bus-core/src/main/java/org/aoju/bus/core/text/TextBuilder.java @@ -399,17 +399,17 @@ public TextBuilder appendNull() { * 将对象附加到此字符串生成器 * 附加null将调用{@link #appendNull()}. * - * @param obj 要追加的对象 + * @param object 要追加的对象 * @return this */ - public TextBuilder append(final Object obj) { - if (null == obj) { + public TextBuilder append(final Object object) { + if (null == object) { return appendNull(); } - if (obj instanceof CharSequence) { - return append((CharSequence) obj); + if (object instanceof CharSequence) { + return append((CharSequence) object); } - return append(obj.toString()); + return append(object.toString()); } /** @@ -849,11 +849,11 @@ public TextBuilder append(final double value) { * 将对象后接新行追加到此字符串生成器 * 附加null将调用{@link #appendNull()} * - * @param obj 要附加的值 + * @param object 要附加的值 * @return this */ - public TextBuilder appendln(final Object obj) { - return append(obj).appendNewLine(); + public TextBuilder appendln(final Object object) { + return append(object).appendNewLine(); } /** @@ -1172,15 +1172,15 @@ public TextBuilder appendWithSeparators(final Iterator it, final String separ * 如果对象的长度大于长度,则左手边就会丢失 * 如果对象为空,则使用空文本值 * - * @param obj 要追加的对象null使用空文本 + * @param object 要追加的对象null使用空文本 * @param width 固定的字段宽度,零或负没有影响 * @param padChar 要使用的填充字符 * @return this */ - public TextBuilder appendFixedWidthPadLeft(final Object obj, final int width, final char padChar) { + public TextBuilder appendFixedWidthPadLeft(final Object object, final int width, final char padChar) { if (width > 0) { ensureCapacity(this.indexes + width); - String text = null == obj ? getNullText() : obj.toString(); + String text = null == object ? getNullText() : object.toString(); if (null == text) { text = Normal.EMPTY; } @@ -1214,20 +1214,20 @@ public TextBuilder appendFixedWidthPadLeft(final int value, final int width, fin } /** - * 将对象附加到右侧的生成器内边距,使其具有固定的长度。 + * 将对象附加到右侧的生成器内边距,使其具有固定的长度 * 使用对象的toString * 如果物体比长度大,右边的部分就会丢失 * 如果对象为空,则使用空文本值 * - * @param obj 要追加的对象null使用空文本 + * @param object 要追加的对象null使用空文本 * @param width 固定的字段宽度,零或负没有影响 * @param padChar 要使用的填充字符 * @return this */ - public TextBuilder appendFixedWidthPadRight(final Object obj, final int width, final char padChar) { + public TextBuilder appendFixedWidthPadRight(final Object object, final int width, final char padChar) { if (width > 0) { ensureCapacity(this.indexes + width); - String text = null == obj ? getNullText() : obj.toString(); + String text = null == object ? getNullText() : object.toString(); if (null == text) { text = Normal.EMPTY; } @@ -1265,15 +1265,15 @@ public TextBuilder appendFixedWidthPadRight(final int value, final int width, fi * 插入null将使用存储的空文本值 * * @param index 要添加的索引必须有效 - * @param obj 要插入的对象 + * @param object 要插入的对象 * @return this * @throws IndexOutOfBoundsException 如果索引无效 */ - public TextBuilder insert(final int index, final Object obj) { - if (null == obj) { + public TextBuilder insert(final int index, final Object object) { + if (null == object) { return insert(index, nullText); } - return insert(index, obj.toString()); + return insert(index, object.toString()); } /** @@ -2262,12 +2262,12 @@ public String build() { /** * 检查此生成器的内容与另一个生成器的内容是否包含相同的字符内容. * - * @param obj 要检查的对象null返回false + * @param object 要检查的对象null返回false * @return 如果生成器以相同的顺序包含相同的字符,则为真 */ @Override - public boolean equals(final Object obj) { - return obj instanceof TextBuilder && equals((TextBuilder) obj); + public boolean equals(final Object object) { + return object instanceof TextBuilder && equals((TextBuilder) object); } @Override diff --git a/bus-core/src/main/java/org/aoju/bus/core/text/TextJoiner.java b/bus-core/src/main/java/org/aoju/bus/core/text/TextJoiner.java index ee5223dc4b..b52d3abde0 100644 --- a/bus-core/src/main/java/org/aoju/bus/core/text/TextJoiner.java +++ b/bus-core/src/main/java/org/aoju/bus/core/text/TextJoiner.java @@ -212,20 +212,20 @@ public TextJoiner setEmptyResult(String text) { /** * 追加对象到拼接器中 * - * @param obj 对象,支持数组、集合等 + * @param object 对象,支持数组、集合等 * @return this */ - public TextJoiner append(Object obj) { - if (null == obj) { + public TextJoiner append(Object object) { + if (null == object) { append((CharSequence) null); - } else if (ArrayKit.isArray(obj)) { - append(new ArrayIterator<>(obj)); - } else if (obj instanceof Iterator) { - append((Iterator) obj); - } else if (obj instanceof Iterable) { - append(((Iterable) obj).iterator()); + } else if (ArrayKit.isArray(object)) { + append(new ArrayIterator<>(object)); + } else if (object instanceof Iterator) { + append((Iterator) object); + } else if (object instanceof Iterable) { + append(((Iterable) object).iterator()); } else { - append(ObjectKit.toString(obj)); + append(ObjectKit.toString(object)); } return this; } diff --git a/bus-core/src/main/java/org/aoju/bus/core/text/escape/NumericEscaper.java b/bus-core/src/main/java/org/aoju/bus/core/text/escape/NumericEscaper.java index 2a2a0589b6..8a3a8a5fdf 100755 --- a/bus-core/src/main/java/org/aoju/bus/core/text/escape/NumericEscaper.java +++ b/bus-core/src/main/java/org/aoju/bus/core/text/escape/NumericEscaper.java @@ -273,14 +273,14 @@ public Range intersectionWith(Range other) { return between(min, max, getComparator()); } - public boolean equals(Object obj) { - if (obj == this) { + public boolean equals(Object object) { + if (object == this) { return true; } - if ((null == obj) || (obj.getClass() != getClass())) { + if ((null == object) || (object.getClass() != getClass())) { return false; } - Range range = (Range) obj; + Range range = (Range) object; return (this.minimum.equals(range.minimum)) && (this.maximum.equals(range.maximum)); } diff --git a/bus-core/src/main/java/org/aoju/bus/core/toolkit/$.java b/bus-core/src/main/java/org/aoju/bus/core/toolkit/$.java index 2ef3d31601..e5fc833491 100755 --- a/bus-core/src/main/java/org/aoju/bus/core/toolkit/$.java +++ b/bus-core/src/main/java/org/aoju/bus/core/toolkit/$.java @@ -39,39 +39,39 @@ public class $ { /** * 断言,必须不能为 null * - * @param obj 检查无效的对象引用 - * @param 引用的类型 - * @return {@code obj} 是否为 {@code null} - * @throws NullPointerException 如果 {@code obj} 为 {@code null} + * @param object 检查无效的对象引用 + * @param 引用的类型 + * @return {@code object} 是否为 {@code null} + * @throws NullPointerException 如果 {@code object} 为 {@code null} */ - public static T requireNotNull(T obj) { - return Objects.requireNonNull(obj); + public static T requireNotNull(T object) { + return Objects.requireNonNull(object); } /** * 断言,必须不能为 null * - * @param obj 检查是否为空的对象引用 + * @param object 检查是否为空的对象引用 * @param message 在抛出{@code NullPointerException}时使用的详细信息 * @param 引用的类型 - * @return {@code obj} 如果不为 {@code null} - * @throws NullPointerException 如果 {@code obj} 为 {@code null} + * @return {@code object} 如果不为 {@code null} + * @throws NullPointerException 如果 {@code object} 为 {@code null} */ - public static T requireNotNull(T obj, String message) { - return Objects.requireNonNull(obj, message); + public static T requireNotNull(T object, String message) { + return Objects.requireNonNull(object, message); } /** * 断言,必须不能为 null * - * @param obj 检查是否为空的对象引用 + * @param object 检查是否为空的对象引用 * @param messageSupplier 在抛出{@code NullPointerException}时使用的详细信息的提供者 * @param 引用的类型 - * @return {@code obj} 如果不为 {@code null} - * @throws NullPointerException 如果 {@code obj} 为 {@code null} + * @return {@code object} 如果不为 {@code null} + * @throws NullPointerException 如果 {@code object} 为 {@code null} */ - public static T requireNotNull(T obj, Supplier messageSupplier) { - return Objects.requireNonNull(obj, messageSupplier); + public static T requireNotNull(T object, Supplier messageSupplier) { + return Objects.requireNonNull(object, messageSupplier); } /** @@ -97,23 +97,23 @@ public static boolean isFalse(Boolean object) { /** * 判断对象是否为null * - * @param obj 要根据{@code null}检查的引用 + * @param object 要根据{@code null}检查的引用 * @return 如果提供的引用是{@code null},则为{@code true};否则为{@code false} * @see java.util.function.Predicate */ - public static boolean isNull(Object obj) { - return Objects.isNull(obj); + public static boolean isNull(Object object) { + return Objects.isNull(object); } /** * 判断对象是否 not null * - * @param obj 要根据{@code null}检查的引用 + * @param object 要根据{@code null}检查的引用 * @return 如果提供的引用是{@code null},则为{@code true};否则为{@code false} * @see java.util.function.Predicate */ - public static boolean isNotNull(Object obj) { - return Objects.nonNull(obj); + public static boolean isNotNull(Object object) { + return Objects.nonNull(object); } /** @@ -165,31 +165,31 @@ public static boolean isAnyBlank(final CharSequence... cs) { /** * 判断对象是数组 * - * @param obj 要检查的对象可能为空 + * @param object 要检查的对象可能为空 * @return 是否数组 */ - public static boolean isArray(Object obj) { - return ObjectKit.isArray(obj); + public static boolean isArray(Object object) { + return ObjectKit.isArray(object); } /** * 判断空对象 object、map、list、set、字符串、数组 * - * @param obj 要检查的对象可能为空 + * @param object 要检查的对象可能为空 * @return 数组是否为空 */ - public static boolean isEmpty(Object obj) { - return ObjectKit.isEmpty(obj); + public static boolean isEmpty(Object object) { + return ObjectKit.isEmpty(object); } /** * 对象不为空 object、map、list、set、字符串、数组 * - * @param obj 要检查的对象可能为空 + * @param object 要检查的对象可能为空 * @return 是否不为空 */ - public static boolean isNotEmpty(Object obj) { - return !ObjectKit.isEmpty(obj); + public static boolean isNotEmpty(Object object) { + return !ObjectKit.isEmpty(object); } /** @@ -286,11 +286,11 @@ public static boolean isNotEqual(Object o1, Object o2) { /** * 返回对象的 hashCode * - * @param obj Object - * @return hashCode + * @param object Object + * @return the int */ - public static int hashCode(Object obj) { - return Objects.hashCode(obj); + public static int hashCode(Object object) { + return Objects.hashCode(object); } /** diff --git a/bus-core/src/main/java/org/aoju/bus/core/toolkit/AnnoKit.java b/bus-core/src/main/java/org/aoju/bus/core/toolkit/AnnoKit.java index 7b6cd231a7..eaee466aa3 100755 --- a/bus-core/src/main/java/org/aoju/bus/core/toolkit/AnnoKit.java +++ b/bus-core/src/main/java/org/aoju/bus/core/toolkit/AnnoKit.java @@ -245,7 +245,7 @@ public static T getAnnotationValue(AnnotatedElement annotationEle, Class T[] removeBlank(T[] array) { /** * 数组或集合转String * - * @param obj 集合或数组对象 + * @param object 集合或数组对象 * @return 数组字符串, 与集合转字符串格式相同 */ - public static String toString(final Object obj) { - if (null == obj) { + public static String toString(final Object object) { + if (null == object) { return null; } - if (obj instanceof long[]) { - return Arrays.toString((long[]) obj); - } else if (obj instanceof int[]) { - return Arrays.toString((int[]) obj); - } else if (obj instanceof short[]) { - return Arrays.toString((short[]) obj); - } else if (obj instanceof char[]) { - return Arrays.toString((char[]) obj); - } else if (obj instanceof byte[]) { - return Arrays.toString((byte[]) obj); - } else if (obj instanceof boolean[]) { - return Arrays.toString((boolean[]) obj); - } else if (obj instanceof float[]) { - return Arrays.toString((float[]) obj); - } else if (obj instanceof double[]) { - return Arrays.toString((double[]) obj); - } else if (ArrayKit.isArray(obj)) { - return Arrays.deepToString((Object[]) obj); + if (object instanceof long[]) { + return Arrays.toString((long[]) object); + } else if (object instanceof int[]) { + return Arrays.toString((int[]) object); + } else if (object instanceof short[]) { + return Arrays.toString((short[]) object); + } else if (object instanceof char[]) { + return Arrays.toString((char[]) object); + } else if (object instanceof byte[]) { + return Arrays.toString((byte[]) object); + } else if (object instanceof boolean[]) { + return Arrays.toString((boolean[]) object); + } else if (object instanceof float[]) { + return Arrays.toString((float[]) object); + } else if (object instanceof double[]) { + return Arrays.toString((double[]) object); + } else if (ArrayKit.isArray(object)) { + return Arrays.deepToString((Object[]) object); } - return obj.toString(); + return object.toString(); } /** @@ -879,25 +879,25 @@ public static T[] clone(final T[] array) { /** * 克隆数组,如果非数组返回null * - * @param 数组元素类型 - * @param obj 数组对象 + * @param 数组元素类型 + * @param object 数组对象 * @return 克隆后的数组对象 */ - public static T clone(T obj) { - if (null == obj) { + public static T clone(T object) { + if (null == object) { return null; } - if (isArray(obj)) { + if (isArray(object)) { final Object result; - final Class componentType = obj.getClass().getComponentType(); + final Class componentType = object.getClass().getComponentType(); if (componentType.isPrimitive()) {// 原始类型 - int length = Array.getLength(obj); + int length = Array.getLength(object); result = Array.newInstance(componentType, length); while (length-- > 0) { - Array.set(result, length, Array.get(obj, length)); + Array.set(result, length, Array.get(object, length)); } } else { - result = ((Object[]) obj).clone(); + result = ((Object[]) object).clone(); } return (T) result; } @@ -7610,36 +7610,36 @@ public static boolean[] unWrap(Boolean... values) { /** * 包装数组对象 * - * @param obj 对象,可以是对象数组或者基本类型数组 + * @param object 对象,可以是对象数组或者基本类型数组 * @return 包装类型数组或对象数组 * @throws InstrumentException 对象为非数组 */ - public static Object[] wrap(Object obj) { - if (null == obj) { + public static Object[] wrap(Object object) { + if (null == object) { return null; } - if (isArray(obj)) { + if (isArray(object)) { try { - return (Object[]) obj; + return (Object[]) object; } catch (Exception e) { - String className = obj.getClass().getComponentType().getName(); + String className = object.getClass().getComponentType().getName(); switch (className) { case "long": - return wrap((long[]) obj); + return wrap((long[]) object); case "int": - return wrap(obj); + return wrap(object); case "short": - return wrap((short[]) obj); + return wrap((short[]) object); case "char": - return wrap((char[]) obj); + return wrap((char[]) object); case "byte": - return wrap((byte[]) obj); + return wrap((byte[]) object); case "boolean": - return wrap((boolean[]) obj); + return wrap((boolean[]) object); case "float": - return wrap((float[]) obj); + return wrap((float[]) object); case "double": - return wrap((double[]) obj); + return wrap((double[]) object); default: throw new InstrumentException(e); } @@ -7672,9 +7672,16 @@ public static T get(Object array, int index) { * @return 结果 */ public static T[] get(Object array, int... indexes) { - T[] result = newArray(indexes.length); - for (int i : indexes) { - result[i] = get(array, i); + if (null == array) { + return null; + } + if (null == indexes) { + return newArray(array.getClass().getComponentType(), 0); + } + + final T[] result = newArray(array.getClass().getComponentType(), indexes.length); + for (int i = 0; i < indexes.length; i++) { + result[i] = get(array, indexes[i]); } return result; } @@ -8042,6 +8049,17 @@ public static Object[] sub(Object array, int start, int end, int step) { return list.toArray(); } + /** + * 以 conjunction 为分隔符将多个对象转换为字符串 + * + * @param conjunction 分隔符 {@link Symbol#COMMA} + * @param args 数组 + * @return 连接后的字符串 + */ + public static String join(CharSequence conjunction, Object... args) { + return join(args, conjunction); + } + /** * 以 conjunction 为分隔符将数组转换为字符串 * @@ -8089,25 +8107,6 @@ public static String join(T[] array, CharSequence conjunction, Editor edi return TextJoiner.of(conjunction).append(array, (t) -> String.valueOf(editor.edit(t))).toString(); } - /** - * 以 conjunction 为分隔符将数组转换为字符串 - * - * @param array 数组 - * @param conjunction 分隔符 - * @return 连接后的字符串 - */ - public static String join(Object array, CharSequence conjunction) { - if (null == array) { - return null; - } - if (false == isArray(array)) { - throw new IllegalArgumentException(StringKit.format("[{}] is not a Array!", array.getClass())); - } - - return TextJoiner.of(conjunction).append(array).toString(); - } - - /** * 取最小值 * diff --git a/bus-core/src/main/java/org/aoju/bus/core/toolkit/BooleanKit.java b/bus-core/src/main/java/org/aoju/bus/core/toolkit/BooleanKit.java index 5491888b59..d9875294ec 100755 --- a/bus-core/src/main/java/org/aoju/bus/core/toolkit/BooleanKit.java +++ b/bus-core/src/main/java/org/aoju/bus/core/toolkit/BooleanKit.java @@ -55,11 +55,11 @@ public static boolean isBoolean(Class clazz) { * BooleanKit.isTrue(null) = false * * - * @param bool 被检查的Boolean值 + * @param value 被检查的Boolean值 * @return 当值为true且非null时返回{@code true} */ - public static boolean isTrue(Boolean bool) { - return Boolean.TRUE.equals(bool); + public static boolean isTrue(Boolean value) { + return Boolean.TRUE.equals(value); } /** @@ -71,11 +71,11 @@ public static boolean isTrue(Boolean bool) { * BooleanKit.isFalse(null) = false * * - * @param bool 被检查的Boolean值 + * @param value 被检查的Boolean值 * @return 当值为true且非null时返回{@code true} */ - public static boolean isFalse(Boolean bool) { - return Boolean.FALSE.equals(bool); + public static boolean isFalse(Boolean value) { + return Boolean.FALSE.equals(value); } /** @@ -169,7 +169,7 @@ public static byte toByte(boolean value) { * @param value Boolean值 * @return Byte值 */ - public static Byte toByteObj(boolean value) { + public static Byte toByteObject(boolean value) { return toByte(value); } @@ -189,7 +189,7 @@ public static long toLong(boolean value) { * @param value Boolean值 * @return Long值 */ - public static Long toLongObj(boolean value) { + public static Long toLongObject(boolean value) { return toLong(value); } @@ -209,7 +209,7 @@ public static short toShort(boolean value) { * @param value Boolean值 * @return Short值 */ - public static Short toShortObj(boolean value) { + public static Short toShortObject(boolean value) { return toShort(value); } @@ -229,7 +229,7 @@ public static float toFloat(boolean value) { * @param value Boolean值 * @return float值 */ - public static Float toFloatObj(boolean value) { + public static Float toFloatObject(boolean value) { return toFloat(value); } @@ -249,7 +249,7 @@ public static double toDouble(boolean value) { * @param value Boolean值 * @return double值 */ - public static Double toDoubleObj(boolean value) { + public static Double toDoubleObject(boolean value) { return toDouble(value); } @@ -261,11 +261,11 @@ public static Double toDoubleObj(boolean value) { * BooleanKit.toStringTrueFalse(false) = "false" * * - * @param bool Boolean值 + * @param value Boolean值 * @return {@code 'true'}, {@code 'false'} */ - public static String toStringTrueFalse(boolean bool) { - return toString(bool, "true", "false"); + public static String toStringTrueFalse(boolean value) { + return toString(value, "true", "false"); } /** @@ -276,11 +276,11 @@ public static String toStringTrueFalse(boolean bool) { * BooleanKit.toStringOnOff(false) = "off" * * - * @param bool Boolean值 + * @param value Boolean值 * @return {@code 'on'}, {@code 'off'} */ - public static String toStringOnOff(boolean bool) { - return toString(bool, "on", "off"); + public static String toStringOnOff(boolean value) { + return toString(value, "on", "off"); } /** @@ -291,11 +291,11 @@ public static String toStringOnOff(boolean bool) { * BooleanKit.toStringYesNo(false) = "no" * * - * @param bool Boolean值 + * @param value Boolean值 * @return {@code 'yes'}, {@code 'no'} */ - public static String toStringYesNo(boolean bool) { - return toString(bool, "yes", "no"); + public static String toStringYesNo(boolean value) { + return toString(value, "yes", "no"); } /** @@ -306,13 +306,13 @@ public static String toStringYesNo(boolean bool) { * BooleanKit.toString(false, "true", "false") = "false" * * - * @param bool Boolean值 + * @param value Boolean值 * @param trueString 当值为 {@code true}时返回此字符串, 可能为 {@code null} * @param falseString 当值为 {@code false}时返回此字符串, 可能为 {@code null} * @return 结果值 */ - public static String toString(boolean bool, String trueString, String falseString) { - return bool ? trueString : falseString; + public static String toString(boolean value, String trueString, String falseString) { + return value ? trueString : falseString; } /** @@ -466,24 +466,24 @@ public static Boolean xor(Boolean... array) { /** * 取相反值 * - * @param bool Boolean值 + * @param value Boolean值 * @return 相反的Boolean值 */ - public static Boolean negate(Boolean bool) { - if (null == bool) { + public static Boolean negate(Boolean value) { + if (null == value) { return null; } - return bool ? Boolean.FALSE : Boolean.TRUE; + return value ? Boolean.FALSE : Boolean.TRUE; } /** * 取相反值 * - * @param bool Boolean值 + * @param value Boolean值 * @return 相反的Boolean值 */ - public static boolean negate(boolean bool) { - return !bool; + public static boolean negate(boolean value) { + return !value; } /** diff --git a/bus-core/src/main/java/org/aoju/bus/core/toolkit/CharsKit.java b/bus-core/src/main/java/org/aoju/bus/core/toolkit/CharsKit.java index 1da84b4ad3..fa12ddbe41 100755 --- a/bus-core/src/main/java/org/aoju/bus/core/toolkit/CharsKit.java +++ b/bus-core/src/main/java/org/aoju/bus/core/toolkit/CharsKit.java @@ -65,11 +65,11 @@ public class CharsKit { * CharKit.isAscii('©') = false * * - * @param ch 被检查的字符处 + * @param args 被检查的字符处 * @return true表示为ASCII字符, ASCII字符位于0~127之间 */ - public static boolean isAscii(char ch) { - return ch < 128; + public static boolean isAscii(char args) { + return args < 128; } /** @@ -84,11 +84,11 @@ public static boolean isAscii(char ch) { * CharKit.isAsciiPrintable('©') = false * * - * @param ch 被检查的字符处 + * @param args 被检查的字符处 * @return true表示为ASCII可见字符, 可见字符位于32~126之间 */ - public static boolean isAsciiPrintable(char ch) { - return ch >= Normal._32 && ch < 127; + public static boolean isAsciiPrintable(char args) { + return args >= Normal._32 && args < 127; } /** @@ -103,11 +103,11 @@ public static boolean isAsciiPrintable(char ch) { * CharKit.isAsciiControl('©') = false * * - * @param ch 被检查的字符 + * @param args 被检查的字符 * @return true表示为控制符, 控制符位于0~31和127 */ - public static boolean isAsciiControl(final char ch) { - return ch < Normal._32 || ch == 127; + public static boolean isAsciiControl(final char args) { + return args < Normal._32 || args == 127; } /** @@ -123,11 +123,11 @@ public static boolean isAsciiControl(final char ch) { * CharKit.isLetter('©') = false * * - * @param ch 被检查的字符 + * @param args 被检查的字符 * @return true表示为字母(包括大写字母和小写字母)字母包括A~Z和a~z */ - public static boolean isLetter(char ch) { - return isLetterUpper(ch) || isLetterLower(ch); + public static boolean isLetter(char args) { + return isLetterUpper(args) || isLetterLower(args); } /** @@ -142,11 +142,11 @@ public static boolean isLetter(char ch) { * CharKit.isLetterUpper('©') = false * * - * @param ch 被检查的字符 + * @param args 被检查的字符 * @return true表示为大写字母, 大写字母包括A~Z */ - public static boolean isLetterUpper(final char ch) { - return ch >= 'A' && ch <= 'Z'; + public static boolean isLetterUpper(final char args) { + return args >= 'A' && args <= 'Z'; } /** @@ -161,11 +161,11 @@ public static boolean isLetterUpper(final char ch) { * CharKit.isLetterLower('©') = false * * - * @param ch 被检查的字符 + * @param args 被检查的字符 * @return true表示为小写字母, 小写字母指a~z */ - public static boolean isLetterLower(final char ch) { - return ch >= 'a' && ch <= 'z'; + public static boolean isLetterLower(final char args) { + return args >= 'a' && args <= 'z'; } /** @@ -180,11 +180,11 @@ public static boolean isLetterLower(final char ch) { * CharKit.isNumber('©') = false * * - * @param ch 被检查的字符 + * @param args 被检查的字符 * @return true表示为数字字符, 数字字符指0~9 */ - public static boolean isNumber(char ch) { - return ch >= Symbol.C_ZERO && ch <= Symbol.C_NINE; + public static boolean isNumber(char args) { + return args >= Symbol.C_ZERO && args <= Symbol.C_NINE; } /** @@ -195,11 +195,11 @@ public static boolean isNumber(char ch) { * 4. A~F * * - * @param c 字符 + * @param args 字符 * @return 是否为16进制规范的字符 */ - public static boolean isHexChar(char c) { - return isNumber(c) || (c >= 'a' && c <= 'f') || (c >= 'A' && c <= 'F'); + public static boolean isHexChar(char args) { + return isNumber(args) || (args >= 'a' && args <= 'f') || (args >= 'A' && args <= 'F'); } /** @@ -214,11 +214,11 @@ public static boolean isHexChar(char c) { * CharKit.isLetterOrNumber('©') = false * * - * @param ch 被检查的字符 + * @param args 被检查的字符 * @return true表示为字母或数字, 包括A~Z、a~z、0~9 */ - public static boolean isLetterOrNumber(final char ch) { - return isLetter(ch) || isNumber(ch); + public static boolean isLetterOrNumber(final char args) { + return isLetter(args) || isNumber(args); } @@ -245,41 +245,41 @@ public static boolean isCharClass(Class clazz) { * char.class * * - * @param value 被检查的对象 + * @param args 被检查的对象 * @return true表示为字符类 */ - public static boolean isChar(Object value) { - return value instanceof Character || value.getClass() == char.class; + public static boolean isChar(Object args) { + return args instanceof Character || args.getClass() == char.class; } /** * 是否空白符 * 空白符包括空格、制表符、全角空格和不间断空格 * - * @param c 字符 + * @param args 字符 * @return 是否空白符 * @see Character#isWhitespace(int) * @see Character#isSpaceChar(int) */ - public static boolean isBlankChar(char c) { - return isBlankChar((int) c); + public static boolean isBlankChar(char args) { + return isBlankChar((int) args); } /** * 是否空白符 * 空白符包括空格、制表符、全角空格和不间断空格 * - * @param c 字符 + * @param args 字符 * @return 是否空白符 * @see Character#isWhitespace(int) * @see Character#isSpaceChar(int) */ - public static boolean isBlankChar(int c) { - return Character.isWhitespace(c) - || Character.isSpaceChar(c) - || c == '\ufeff' - || c == '\u202a' - || c == '\u0000'; + public static boolean isBlankChar(int args) { + return Character.isWhitespace(args) + || Character.isSpaceChar(args) + || args == '\ufeff' + || args == '\u202a' + || args == '\u0000'; } /** @@ -367,11 +367,11 @@ public static boolean isNotBlank(CharSequence text) { * StringKit.isNoneBlank("foo", "bar") = true * * - * @param texts 要检查的字符串可以为null或空 + * @param args 要检查的字符串可以为null或空 * @return 所有字符序列都不为空或null或仅为空格 */ - public static boolean isNoneBlank(final CharSequence... texts) { - return !isAnyBlank(texts); + public static boolean isNoneBlank(final CharSequence... args) { + return !isAnyBlank(args); } /** @@ -391,14 +391,14 @@ public static boolean isNoneBlank(final CharSequence... texts) { * StringKit.isAnyBlank("foo", "bar") = false * * - * @param texts 要检查的字符序列可以为空或空 + * @param args 要检查的字符序列可以为空或空 * @return 如果任何一个字符序列是空的,或者是空的,或者只有空白 */ - public static boolean isAnyBlank(final CharSequence... texts) { - if (ArrayKit.isEmpty(texts)) { + public static boolean isAnyBlank(final CharSequence... args) { + if (ArrayKit.isEmpty(args)) { return false; } - for (final CharSequence text : texts) { + for (final CharSequence text : args) { if (isBlank(text)) { return true; } @@ -422,15 +422,15 @@ public static boolean isAnyBlank(final CharSequence... texts) { *
  • isAllBlank(CharSequence...) 等价于 {@code isBlank(...) && isBlank(...) && ...}
  • * * - * @param texts 字符串列表 + * @param args 字符串列表 * @return 所有字符串是否为空白 */ - public static boolean isAllBlank(CharSequence... texts) { - if (ArrayKit.isEmpty(texts)) { + public static boolean isAllBlank(CharSequence... args) { + if (ArrayKit.isEmpty(args)) { return true; } - for (CharSequence text : texts) { + for (CharSequence text : args) { if (isNotBlank(text)) { return false; } @@ -463,7 +463,7 @@ public static boolean isAllBlank(CharSequence... texts) { * @see #isBlank(CharSequence) */ public static boolean isEmpty(CharSequence text) { - return text == null || text.length() == 0; + return text == null || text.length() == 0 || text.isEmpty(); } /** @@ -507,15 +507,15 @@ public static boolean isNotEmpty(CharSequence text) { *
  • isAllEmpty(CharSequence...) 等价于 {@code isEmpty(...) && isEmpty(...) && ...}
  • * * - * @param texts 字符串列表 + * @param args 字符串列表 * @return 所有字符串是否为空白 */ - public static boolean isAllEmpty(CharSequence... texts) { - if (ArrayKit.isEmpty(texts)) { + public static boolean isAllEmpty(CharSequence... args) { + if (ArrayKit.isEmpty(args)) { return true; } - for (CharSequence text : texts) { + for (CharSequence text : args) { if (isNotEmpty(text)) { return false; } @@ -540,21 +540,21 @@ public static boolean isAllEmpty(CharSequence... texts) { *
  • isAllNotEmpty(CharSequence...) 等价于 {@code !isEmpty(...) && !isEmpty(...) && ...}
  • * * - * @param args 字符串数组 + * @param text 字符串数组 * @return 所有字符串是否都不为为空白 */ - public static boolean isAllNotEmpty(CharSequence... args) { - return false == hasEmpty(args); + public static boolean isAllNotEmpty(CharSequence... text) { + return false == hasEmpty(text); } /** * 是否存都不为{@code null}或空对象或空白符的对象,通过{@link #hasBlank(CharSequence...)} 判断元素 * - * @param args 被检查的对象,一个或者多个 + * @param text 被检查的对象,一个或者多个 * @return 是否都不为空 */ - public static boolean isAllNotBlank(CharSequence... args) { - return false == hasBlank(args); + public static boolean isAllNotBlank(CharSequence... text) { + return false == hasBlank(text); } /** @@ -567,7 +567,7 @@ public static boolean isNullOrUndefined(CharSequence text) { if (null == text) { return true; } - return isNullOrUndefinedStr(text); + return isNullOrUndefinedString(text); } /** @@ -580,7 +580,7 @@ public static boolean isEmptyOrUndefined(CharSequence text) { if (isEmpty(text)) { return true; } - return isNullOrUndefinedStr(text); + return isNullOrUndefinedString(text); } /** @@ -593,7 +593,7 @@ public static boolean isBlankOrUndefined(CharSequence text) { if (isBlank(text)) { return true; } - return isNullOrUndefinedStr(text); + return isNullOrUndefinedString(text); } /** @@ -602,7 +602,7 @@ public static boolean isBlankOrUndefined(CharSequence text) { * @param text 字符串 * @return 是否为“null”、“undefined” */ - private static boolean isNullOrUndefinedStr(CharSequence text) { + private static boolean isNullOrUndefinedString(CharSequence text) { String strString = text.toString().trim(); return Normal.NULL.equals(strString) || Normal.UNDEFINED.equals(strString); } @@ -613,7 +613,7 @@ private static boolean isNullOrUndefinedStr(CharSequence text) { * @param text 字符串 * @return 是否不为“null”、“undefined”,不为“null”、“undefined”返回true,否则false */ - private static boolean isNotNullAndNotUndefinedStr(CharSequence text) { + private static boolean isNotNullAndNotUndefinedString(CharSequence text) { String strString = text.toString().trim(); return !Normal.NULL.equals(strString) && !Normal.UNDEFINED.equals(strString); } @@ -634,15 +634,15 @@ private static boolean isNotNullAndNotUndefinedStr(CharSequence text) { *
  • {@link #isAllBlank(CharSequence...)} 等价于 {@code isBlank(...) && isBlank(...) && ...}
  • * * - * @param texts 字符串列表 + * @param args 字符串列表 * @return 是否包含空字符串 */ - public static boolean hasBlank(CharSequence... texts) { - if (ArrayKit.isEmpty(texts)) { + public static boolean hasBlank(CharSequence... args) { + if (ArrayKit.isEmpty(args)) { return true; } - for (CharSequence text : texts) { + for (CharSequence text : args) { if (isBlank(text)) { return true; } @@ -708,15 +708,15 @@ public static String emptyToNull(CharSequence text) { *
  • {@link #isAllEmpty(CharSequence...)} 等价于 {@code isEmpty(...) && isEmpty(...) && ...}
  • * * - * @param texts 字符串列表 + * @param args 字符串列表 * @return 是否包含空字符串 */ - public static boolean hasEmpty(CharSequence... texts) { - if (ArrayKit.isEmpty(texts)) { + public static boolean hasEmpty(CharSequence... args) { + if (ArrayKit.isEmpty(args)) { return true; } - for (CharSequence text : texts) { + for (CharSequence text : args) { if (isEmpty(text)) { return true; } @@ -1185,7 +1185,7 @@ public static String removeSuffix(CharSequence text, CharSequence suffix) { /** * 去掉指定后缀,并小写首字母 * - * @param text 字符串 + * @param text 字符串 * @param suffix 后缀 * @return 切掉后的字符串,若后缀不是 suffix, 返回原字符串 */ @@ -1196,7 +1196,7 @@ public static String removeSufAndLowerFirst(CharSequence text, CharSequence suff /** * 忽略大小写去掉指定后缀 * - * @param text 字符串 + * @param text 字符串 * @param suffix 后缀 * @return 切掉后的字符串,若后缀不是 suffix, 返回原字符串 */ @@ -1272,11 +1272,11 @@ public static String lowerFirst(CharSequence text) { * 如果转换前的驼峰式命名的字符串为空,则返回空字符串 * 例如:HelloWorld= hello_world * - * @param camelCaseStr 转换前的驼峰式命名的字符串 + * @param word 转换前的驼峰式命名的字符串 * @return 转换后下划线大写方式命名的字符串 */ - public static String toUnderlineCase(CharSequence camelCaseStr) { - return NamingCase.toUnderlineCase(camelCaseStr); + public static String toUnderlineCase(CharSequence word) { + return NamingCase.toUnderlineCase(word); } /** @@ -1320,15 +1320,15 @@ public static String toCamelCase(CharSequence name, char symbol) { * 移除字符串中所有给定字符串 * 例:removeAll("aa-bb-cc-dd", "-") - aabbccdd * - * @param text 字符串 - * @param strToRemove 被移除的字符串 + * @param text 字符串 + * @param word 被移除的字符串 * @return 移除后的字符串 */ - public static String removeAll(CharSequence text, CharSequence strToRemove) { - if (isEmpty(text) || isEmpty(strToRemove)) { + public static String removeAll(CharSequence text, CharSequence word) { + if (isEmpty(text) || isEmpty(word)) { return toString(text); } - return text.toString().replace(strToRemove, Normal.EMPTY); + return text.toString().replace(word, Normal.EMPTY); } /** @@ -1361,15 +1361,15 @@ public static String removeAll(CharSequence text, char... chars) { * 移除字符串中所有给定字符串,当某个字符串出现多次,则全部移除 * 例:removeAny("aa-bb-cc-dd", "a", "b") - --cc-dd * - * @param text 字符串 - * @param strsToRemove 被移除的字符串 + * @param text 字符串 + * @param word 被移除的字符串 * @return 移除后的字符串 */ - public static String removeAny(CharSequence text, CharSequence... strsToRemove) { + public static String removeAny(CharSequence text, CharSequence... word) { String result = toString(text); if (isNotEmpty(text)) { - for (CharSequence strToRemove : strsToRemove) { - result = removeAll(result, strToRemove); + for (CharSequence x : word) { + result = removeAll(result, x); } } return result; @@ -1500,12 +1500,12 @@ public static String subPreGbk(CharSequence text, int len, CharSequence suffix) * 截取部分字符串,这里一个汉字的长度认为是2 * 可以自定义halfUp,如len为10,如果截取后最后一个字符是半个字符,{@code true}表示保留,则长度是11,否则长度9 * - * @param text 字符串 - * @param len bytes切割到的位置(包含) - * @param halfUp 遇到截取一半的GBK字符,是否保留。 + * @param text 字符串 + * @param len bytes切割到的位置(包含) + * @param word 遇到截取一半的GBK字符,是否保留。 * @return 切割后的字符串 */ - public static String subPreGbk(CharSequence text, int len, boolean halfUp) { + public static String subPreGbk(CharSequence text, int len, boolean word) { if (isEmpty(text)) { return toString(text); } @@ -1522,7 +1522,7 @@ public static String subPreGbk(CharSequence text, int len, boolean halfUp) { } if (counterOfDoubleByte % 2 != 0) { - if (halfUp) { + if (word) { len += 1; } else { len -= 1; @@ -1868,41 +1868,41 @@ public static String subByLength(CharSequence text, int length) { * equals("abc", "ABC") = false * * - * @param stra 要比较的字符串 - * @param strb 要比较的字符串 + * @param x 要比较的字符串 + * @param y 要比较的字符串 * @return 如果两个字符串相同,或者都是null,则返回true */ - public static boolean equals(CharSequence stra, CharSequence strb) { - return equals(stra, strb, false); + public static boolean equals(CharSequence x, CharSequence y) { + return equals(x, y, false); } /** * 比较两个字符串是否相等 *
      - *
    • stra和strb都为{@code null}
    • + *
    • x和y都为{@code null}
    • *
    • 忽略大小写使用{@link String#equalsIgnoreCase(String)}判断相等
    • *
    • 不忽略大小写使用{@link String#contentEquals(CharSequence)}判断相等
    • *
    * - * @param stra 要比较的字符串 - * @param strb 要比较的字符串 + * @param x 要比较的字符串 + * @param y 要比较的字符串 * @param ignoreCase 是否忽略大小写 * @return 如果两个字符串相同,或者都是null,则返回true */ - public static boolean equals(CharSequence stra, CharSequence strb, boolean ignoreCase) { - if (null == stra) { + public static boolean equals(CharSequence x, CharSequence y, boolean ignoreCase) { + if (null == x) { // 只有两个都为null才判断相等 - return null == strb; + return null == y; } - if (null == strb) { + if (null == y) { // 字符串2空,字符串1非空,直接false return false; } if (ignoreCase) { - return stra.toString().equalsIgnoreCase(strb.toString()); + return x.toString().equalsIgnoreCase(y.toString()); } else { - return stra.equals(strb); + return x.equals(y); } } @@ -1917,54 +1917,54 @@ public static boolean equals(CharSequence stra, CharSequence strb, boolean ignor * equalsIgnoreCase("abc", "ABC") = true * * - * @param stra 要比较的字符串 - * @param strb 要比较的字符串 + * @param x 要比较的字符串 + * @param y 要比较的字符串 * @return 如果两个字符串相同,或者都是null,则返回true */ - public static boolean equalsIgnoreCase(CharSequence stra, CharSequence strb) { - return equals(stra, strb, true); + public static boolean equalsIgnoreCase(CharSequence x, CharSequence y) { + return equals(x, y, true); } /** * 给定字符串是否与提供的中任一字符串相同(忽略大小写),相同则返回{@code true},没有相同的返回{@code false} * 如果参与比对的字符串列表为空,返回{@code false} * - * @param stra 给定需要检查的字符串 - * @param strb 需要参与比对的字符串列表 + * @param x 给定需要检查的字符串 + * @param y 需要参与比对的字符串列表 * @return 是否相同 */ - public static boolean equalsAnyIgnoreCase(CharSequence stra, CharSequence... strb) { - return equalsAny(stra, true, strb); + public static boolean equalsAnyIgnoreCase(CharSequence x, CharSequence... y) { + return equalsAny(x, true, y); } /** * 给定字符串是否与提供的中任一字符串相同,相同则返回{@code true},没有相同的返回{@code false} * 如果参与比对的字符串列表为空,返回{@code false} * - * @param str1 给定需要检查的字符串 - * @param texts 需要参与比对的字符串列表 + * @param text 给定需要检查的字符串 + * @param args 需要参与比对的字符串列表 * @return 是否相同 */ - public static boolean equalsAny(CharSequence str1, CharSequence... texts) { - return equalsAny(str1, false, texts); + public static boolean equalsAny(CharSequence text, CharSequence... args) { + return equalsAny(text, false, args); } /** * 给定字符串是否与提供的中任一字符串相同,相同则返回{@code true},没有相同的返回{@code false} * 如果参与比对的字符串列表为空,返回{@code false} * - * @param str1 给定需要检查的字符串 + * @param text 给定需要检查的字符串 * @param ignoreCase 是否忽略大小写 - * @param texts 需要参与比对的字符串列表 + * @param args 需要参与比对的字符串列表 * @return 是否相同 */ - public static boolean equalsAny(CharSequence str1, boolean ignoreCase, CharSequence... texts) { - if (ArrayKit.isEmpty(texts)) { + public static boolean equalsAny(CharSequence text, boolean ignoreCase, CharSequence... args) { + if (ArrayKit.isEmpty(text)) { return false; } - for (CharSequence text : texts) { - if (equals(str1, text, ignoreCase)) { + for (CharSequence t : args) { + if (equals(text, t, ignoreCase)) { return true; } } @@ -1974,44 +1974,44 @@ public static boolean equalsAny(CharSequence str1, boolean ignoreCase, CharSeque /** * 指定范围内查找指定字符 * - * @param text 字符串 - * @param searchChar 被查找的字符 + * @param text 字符串 + * @param word 被查找的字符 * @return 位置 */ - public static int indexOf(final CharSequence text, char searchChar) { - return indexOf(text, searchChar, 0); + public static int indexOf(final CharSequence text, char word) { + return indexOf(text, word, 0); } /** * 指定范围内查找指定字符 * - * @param text 字符串 - * @param searchChar 被查找的字符 - * @param start 起始位置,如果小于0,从0开始查找 + * @param text 字符串 + * @param word 被查找的字符 + * @param start 起始位置,如果小于0,从0开始查找 * @return 位置 */ - public static int indexOf(final CharSequence text, char searchChar, int start) { + public static int indexOf(final CharSequence text, char word, int start) { if (text instanceof String) { - return ((String) text).indexOf(searchChar, start); + return ((String) text).indexOf(word, start); } else { - return indexOf(text, searchChar, start, -1); + return indexOf(text, word, start, -1); } } /** * 指定范围内查找指定字符 * - * @param text 字符串 - * @param searchChar 被查找的字符 - * @param start 起始位置,如果小于0,从0开始查找 - * @param end 终止位置,如果超过text.length()则默认查找到字符串末尾 + * @param text 字符串 + * @param word 被查找的字符 + * @param start 起始位置,如果小于0,从0开始查找 + * @param end 终止位置,如果超过text.length()则默认查找到字符串末尾 * @return 位置 */ - public static int indexOf(final CharSequence text, char searchChar, int start, int end) { + public static int indexOf(final CharSequence text, char word, int start, int end) { if (isEmpty(text)) { return Normal.__1; } - return new CharFinder(searchChar).setText(text).setEndIndex(end).start(start); + return new CharFinder(word).setText(text).setEndIndex(end).start(start); } /** @@ -2981,11 +2981,11 @@ public static String wrap(CharSequence text, CharSequence prefix, CharSequence s * 包装多个字符串 * * @param prefixAndSuffix 前缀和后缀 - * @param texts 多个字符串 + * @param args 多个字符串 * @return 包装的字符串数组 */ - public static String[] wrapAll(CharSequence prefixAndSuffix, CharSequence... texts) { - return wrapAll(prefixAndSuffix, prefixAndSuffix, texts); + public static String[] wrapAll(CharSequence prefixAndSuffix, CharSequence... args) { + return wrapAll(prefixAndSuffix, prefixAndSuffix, args); } /** @@ -2993,13 +2993,13 @@ public static String[] wrapAll(CharSequence prefixAndSuffix, CharSequence... tex * * @param prefix 前缀 * @param suffix 后缀 - * @param texts 多个字符串 + * @param args 多个字符串 * @return 包装的字符串数组 */ - public static String[] wrapAll(CharSequence prefix, CharSequence suffix, CharSequence... texts) { - final String[] results = new String[texts.length]; - for (int i = 0; i < texts.length; i++) { - results[i] = wrap(texts[i], prefix, suffix); + public static String[] wrapAll(CharSequence prefix, CharSequence suffix, CharSequence... args) { + final String[] results = new String[args.length]; + for (int i = 0; i < args.length; i++) { + results[i] = wrap(args[i], prefix, suffix); } return results; } @@ -3121,28 +3121,28 @@ public static String wrapIfMissing(CharSequence text, CharSequence prefix, CharS if (isNotEmpty(suffix)) { len += suffix.length(); } - StringBuilder sb = new StringBuilder(len); + StringBuilder stringBuilder = new StringBuilder(len); if (isNotEmpty(prefix) && false == startWith(text, prefix)) { - sb.append(prefix); + stringBuilder.append(prefix); } if (isNotEmpty(text)) { - sb.append(text); + stringBuilder.append(text); } if (isNotEmpty(suffix) && false == endWith(text, suffix)) { - sb.append(suffix); + stringBuilder.append(suffix); } - return sb.toString(); + return stringBuilder.toString(); } /** * 包装多个字符串,如果已经包装,则不再包装 * * @param prefixAndSuffix 前缀和后缀 - * @param texts 多个字符串 + * @param args 多个字符串 * @return 包装的字符串数组 */ - public static String[] wrapAllIfMissing(CharSequence prefixAndSuffix, CharSequence... texts) { - return wrapAllIfMissing(prefixAndSuffix, prefixAndSuffix, texts); + public static String[] wrapAllIfMissing(CharSequence prefixAndSuffix, CharSequence... args) { + return wrapAllIfMissing(prefixAndSuffix, prefixAndSuffix, args); } /** @@ -3150,13 +3150,13 @@ public static String[] wrapAllIfMissing(CharSequence prefixAndSuffix, CharSequen * * @param prefix 前缀 * @param suffix 后缀 - * @param texts 多个字符串 + * @param args 多个字符串 * @return 包装的字符串数组 */ - public static String[] wrapAllIfMissing(CharSequence prefix, CharSequence suffix, CharSequence... texts) { - final String[] results = new String[texts.length]; - for (int i = 0; i < texts.length; i++) { - results[i] = wrapIfMissing(texts[i], prefix, suffix); + public static String[] wrapAllIfMissing(CharSequence prefix, CharSequence suffix, CharSequence... args) { + final String[] results = new String[args.length]; + for (int i = 0; i < args.length; i++) { + results[i] = wrapIfMissing(args[i], prefix, suffix); } return results; } @@ -3165,14 +3165,14 @@ public static String[] wrapAllIfMissing(CharSequence prefix, CharSequence suffix * 字符串是否以给定字符开始 * * @param text 字符串 - * @param c 字符 + * @param word 字符 * @return 是否开始 */ - public static boolean startWith(CharSequence text, char c) { + public static boolean startWith(CharSequence text, char word) { if (true == isEmpty(text)) { return false; } - return c == text.charAt(0); + return word == text.charAt(0); } /** @@ -3241,16 +3241,16 @@ public static boolean startWithIgnoreEquals(CharSequence text, CharSequence pref * 给定字符串是否以任何一个字符串开始 * 给定字符串和数组为空都返回false * - * @param text 给定字符串 - * @param prefixes 需要检测的开始字符串 + * @param text 给定字符串 + * @param args 需要检测的开始字符串 * @return 给定字符串是否以任何一个字符串开始 */ - public static boolean startWithAny(CharSequence text, CharSequence... prefixes) { - if (isEmpty(text) || ArrayKit.isEmpty(prefixes)) { + public static boolean startWithAny(CharSequence text, CharSequence... args) { + if (isEmpty(text) || ArrayKit.isEmpty(args)) { return false; } - for (CharSequence suffix : prefixes) { + for (CharSequence suffix : args) { if (startWith(text, suffix, false)) { return true; } @@ -3263,16 +3263,16 @@ public static boolean startWithAny(CharSequence text, CharSequence... prefixes) * 给定字符串是否以任何一个字符串结尾(忽略大小写) * 给定字符串和数组为空都返回false * - * @param text 给定字符串 - * @param suffixes 需要检测的结尾字符串 + * @param text 给定字符串 + * @param args 需要检测的结尾字符串 * @return 给定字符串是否以任何一个字符串结尾 */ - public static boolean startWithAnyIgnoreCase(final CharSequence text, final CharSequence... suffixes) { - if (isEmpty(text) || ArrayKit.isEmpty(suffixes)) { + public static boolean startWithAnyIgnoreCase(final CharSequence text, final CharSequence... args) { + if (isEmpty(text) || ArrayKit.isEmpty(args)) { return false; } - for (final CharSequence suffix : suffixes) { + for (final CharSequence suffix : args) { if (startWith(text, suffix, true)) { return true; } @@ -3362,16 +3362,16 @@ public static boolean endWith(CharSequence text, CharSequence suffix) { * 给定字符串是否以任何一个字符串结尾 * 给定字符串和数组为空都返回false * - * @param text 给定字符串 - * @param suffixes 需要检测的结尾字符串 + * @param text 给定字符串 + * @param args 需要检测的结尾字符串 * @return 给定字符串是否以任何一个字符串结尾 */ - public static boolean endWithAny(CharSequence text, CharSequence... suffixes) { - if (isEmpty(text) || ArrayKit.isEmpty(suffixes)) { + public static boolean endWithAny(CharSequence text, CharSequence... args) { + if (isEmpty(text) || ArrayKit.isEmpty(args)) { return false; } - for (CharSequence suffix : suffixes) { + for (CharSequence suffix : args) { if (endWith(text, suffix, false)) { return true; } @@ -3383,16 +3383,16 @@ public static boolean endWithAny(CharSequence text, CharSequence... suffixes) { * 给定字符串是否以任何一个字符串结尾(忽略大小写) * 给定字符串和数组为空都返回false * - * @param text 给定字符串 - * @param suffixes 需要检测的结尾字符串 + * @param text 给定字符串 + * @param args 需要检测的结尾字符串 * @return 给定字符串是否以任何一个字符串结尾 */ - public static boolean endWithAnyIgnoreCase(CharSequence text, CharSequence... suffixes) { - if (isEmpty(text) || ArrayKit.isEmpty(suffixes)) { + public static boolean endWithAnyIgnoreCase(CharSequence text, CharSequence... args) { + if (isEmpty(text) || ArrayKit.isEmpty(args)) { return false; } - for (CharSequence suffix : suffixes) { + for (CharSequence suffix : args) { if (endWith(text, suffix, true)) { return true; } @@ -3437,14 +3437,14 @@ public static String strip(CharSequence text, CharSequence prefix, CharSequence int from = 0; int to = text.length(); - String str2 = text.toString(); - if (startWith(str2, prefix)) { + String value = text.toString(); + if (startWith(value, prefix)) { from = prefix.length(); } - if (endWith(str2, suffix)) { + if (endWith(value, suffix)) { to -= suffix.length(); } - return str2.substring(from, to); + return value.substring(from, to); } /** @@ -3473,14 +3473,14 @@ public static String stripIgnoreCase(CharSequence text, CharSequence prefix, Cha int from = 0; int to = text.length(); - String str2 = text.toString(); - if (startWithIgnoreCase(str2, prefix)) { + String value = text.toString(); + if (startWithIgnoreCase(value, prefix)) { from = prefix.length(); } - if (endWithIgnoreCase(str2, suffix)) { + if (endWithIgnoreCase(value, suffix)) { to -= suffix.length(); } - return str2.substring(from, to); + return value.substring(from, to); } /** @@ -3495,12 +3495,12 @@ public static String addPrefixIfNot(CharSequence text, CharSequence prefix) { return toString(text); } - final String str2 = text.toString(); - final String prefix2 = prefix.toString(); - if (false == str2.startsWith(prefix2)) { - return prefix2.concat(str2); + final String value = text.toString(); + final String xSuffix = prefix.toString(); + if (false == value.startsWith(xSuffix)) { + return xSuffix.concat(value); } - return str2; + return value; } /** @@ -3515,23 +3515,23 @@ public static String addSuffixIfNot(CharSequence text, CharSequence suffix) { return toString(text); } - final String str2 = text.toString(); - final String suffix2 = suffix.toString(); - if (false == str2.endsWith(suffix2)) { - return str2.concat(suffix2); + final String value = text.toString(); + final String xSuffix = suffix.toString(); + if (false == value.endsWith(xSuffix)) { + return value.concat(xSuffix); } - return str2; + return value; } /** * 指定字符是否在字符串中出现过 * - * @param text 字符串 - * @param searchChar 被查找的字符 + * @param text 字符串 + * @param word 被查找的字符 * @return 是否包含 */ - public static boolean contains(CharSequence text, char searchChar) { - return indexOf(text, searchChar) > -1; + public static boolean contains(CharSequence text, char word) { + return indexOf(text, word) > -1; } /** @@ -3597,6 +3597,25 @@ public static boolean containsOnly(CharSequence text, char... testChars) { return true; } + /** + * 检查指定字符串中是否含给定的所有字符串 + * + * @param text 字符串 + * @param args 检查的字符 + * @return 字符串含有非检查的字符,返回false + */ + public static boolean containsAll(CharSequence text, CharSequence... args) { + if (isBlank(text) || ArrayKit.isEmpty(args)) { + return false; + } + for (CharSequence value : args) { + if (false == contains(text, value)) { + return false; + } + } + return true; + } + /** * 给定字符串是否包含空白符(空白符包括空格、制表符、全角空格和不间断空格) * 如果给定字符串为null或者"",则返回false @@ -3624,15 +3643,15 @@ public static boolean containsBlank(CharSequence text) { /** * 查找指定字符串是否包含指定字符串列表中的任意一个字符串,如果包含返回找到的第一个字符串 * - * @param text 指定字符串 - * @param testStrs 需要检查的字符串数组 + * @param text 指定字符串 + * @param args 需要检查的字符串数组 * @return 被包含的第一个字符串 */ - public static String getContainsAny(CharSequence text, CharSequence... testStrs) { - if (isEmpty(text) || ArrayKit.isEmpty(testStrs)) { + public static String getContainsAny(CharSequence text, CharSequence... args) { + if (isEmpty(text) || ArrayKit.isEmpty(args)) { return null; } - for (CharSequence val : testStrs) { + for (CharSequence val : args) { if (val.toString().contains(text)) { return val.toString(); } @@ -3643,45 +3662,45 @@ public static String getContainsAny(CharSequence text, CharSequence... testStrs) /** * 是否包含特定字符,忽略大小写,如果给定两个参数都为null,返回true * - * @param text 被检测字符串 - * @param testStr 被测试是否包含的字符串 + * @param text 被检测字符串 + * @param word 被测试是否包含的字符串 * @return 是否包含 */ - public static boolean containsIgnoreCase(CharSequence text, CharSequence testStr) { + public static boolean containsIgnoreCase(CharSequence text, CharSequence word) { if (null == text) { // 如果被监测字符串和 - return null == testStr; + return null == word; } - return indexOfIgnoreCase(text, testStr) > -1; + return indexOfIgnoreCase(text, word) > -1; } /** * 查找指定字符串是否包含指定字符串列表中的任意一个字符串 * 忽略大小写 * - * @param text 指定字符串 - * @param testStrs 需要检查的字符串数组 + * @param text 指定字符串 + * @param args 需要检查的字符串数组 * @return 是否包含任意一个字符串 */ - public static boolean containsAnyIgnoreCase(CharSequence text, CharSequence... testStrs) { - return null != getContainsStrIgnoreCase(text, testStrs); + public static boolean containsAnyIgnoreCase(CharSequence text, CharSequence... args) { + return null != getContainsStrIgnoreCase(text, args); } /** * 查找指定字符串是否包含指定字符串列表中的任意一个字符串,如果包含返回找到的第一个字符串 * 忽略大小写 * - * @param text 指定字符串 - * @param testStrs 需要检查的字符串数组 + * @param text 指定字符串 + * @param args 需要检查的字符串数组 * @return 被包含的第一个字符串 */ - public static String getContainsStrIgnoreCase(CharSequence text, CharSequence... testStrs) { - if (isEmpty(text) || ArrayKit.isEmpty(testStrs)) { + public static String getContainsStrIgnoreCase(CharSequence text, CharSequence... args) { + if (isEmpty(text) || ArrayKit.isEmpty(args)) { return null; } - for (CharSequence testStr : testStrs) { - if (containsIgnoreCase(text, testStr)) { - return testStr.toString(); + for (CharSequence value : args) { + if (containsIgnoreCase(text, value)) { + return value.toString(); } } return null; @@ -3815,11 +3834,11 @@ public static String[] cut(CharSequence text, int partLength) { * 将给定字符串,变成 "xxx...xxx" 形式的字符串 * *
      - *
    • abcdef 5 -》 a...f
    • - *
    • abcdef 4 -》 a..f
    • - *
    • abcdef 3 -》 a.f
    • - *
    • abcdef 2 -》 a.
    • - *
    • abcdef 1 -》 a
    • + *
    • abcdef 5 - a...f
    • + *
    • abcdef 4 - a..f
    • + *
    • abcdef 3 - a.f
    • + *
    • abcdef 2 - a.
    • + *
    • abcdef 1 - a
    • *
    * * @param text 字符串 @@ -3856,21 +3875,23 @@ public static String brief(CharSequence text, int maxLength) { /** - * 如果字符串还没有以后缀结尾,则将后缀追加到字符串的末尾. + * 如果字符串还没有以后缀结尾,则将后缀追加到字符串的末尾 * * @param text 字符串. - * @param suffix 附加到字符串末尾的后缀. - * @param ignoreCase 指示比较是否应忽略大小写. - * @param suffixes 有效终止符的附加后缀(可选). - * @return 如果添加了后缀,则为新字符串,否则为相同的字符串. - */ - private static String appendIfMissing(final String text, final CharSequence suffix, final boolean ignoreCase, - final CharSequence... suffixes) { + * @param suffix 附加到字符串末尾的后缀 + * @param ignoreCase 指示比较是否应忽略大小写 + * @param args 有效终止符的附加后缀(可选) + * @return 如果添加了后缀,则为新字符串,否则为相同的字符 + */ + private static String appendIfMissing(final String text, + final CharSequence suffix, + final boolean ignoreCase, + final CharSequence... args) { if (null == text || isEmpty(suffix) || endWith(text, suffix, ignoreCase)) { return toString(text); } - if (null != suffixes && suffixes.length > 0) { - for (final CharSequence s : suffixes) { + if (null != args && args.length > 0) { + for (final CharSequence s : args) { if (endWith(text, s, ignoreCase)) { return text; } @@ -3881,7 +3902,7 @@ private static String appendIfMissing(final String text, final CharSequence suff /** - * 如果字符串还没有以任何后缀结尾,则将后缀追加到字符串的末尾. + * 如果字符串还没有以任何后缀结尾,则将后缀追加到字符串的末尾 * *
          * StringKit.appendIfMissing(null, null) = null
    @@ -3905,14 +3926,15 @@ private static String appendIfMissing(final String text, final CharSequence suff
          * StringKit.appendIfMissing("abcMNO", "xyz", "mno") = "abcMNOxyz"
          * 
    * - * @param text 字符串. - * @param suffix 附加到字符串末尾的后缀. - * @param suffixes 有效终止符的附加后缀(可选). - * @return 如果添加了后缀,则为新字符串,否则为相同的字符串. + * @param text 字符串 + * @param suffix 附加到字符串末尾的后缀 + * @param args 有效终止符的附加后缀(可选) + * @return 如果添加了后缀,则为新字符串,否则为相同的字符串 */ - public static String appendIfMissing(final String text, final CharSequence suffix, final CharSequence... - suffixes) { - return appendIfMissing(text, suffix, false, suffixes); + public static String appendIfMissing(final String text, + final CharSequence suffix, + final CharSequence... args) { + return appendIfMissing(text, suffix, false, args); } /** @@ -3940,32 +3962,35 @@ public static String appendIfMissing(final String text, final CharSequence suffi * StringKit.appendIfMissingIgnoreCase("abcMNO", "xyz", "mno") = "abcMNO" * * - * @param text 字符串. - * @param suffix 附加到字符串末尾的后缀. - * @param suffixes 有效终止符的附加后缀(可选). - * @return 如果添加了后缀,则为新字符串,否则为相同的字符串. + * @param text 字符串 + * @param suffix 附加到字符串末尾的后缀 + * @param args 有效终止符的附加后缀(可选) + * @return 如果添加了后缀,则为新字符串,否则为相同的字符串 */ - public static String appendIfMissingIgnoreCase(final String text, final CharSequence suffix, final CharSequence... - suffixes) { - return appendIfMissing(text, suffix, true, suffixes); + public static String appendIfMissingIgnoreCase(final String text, + final CharSequence suffix, + final CharSequence... args) { + return appendIfMissing(text, suffix, true, args); } /** - * 如果字符串还没有以任何前缀开始,则将前缀添加到字符串的开头. + * 如果字符串还没有以任何前缀开始,则将前缀添加到字符串的开头 * - * @param text 字符串. - * @param prefix 在字符串开始前的前缀. - * @param ignoreCase 指示比较是否应忽略大小写. - * @param prefixes 有效的附加前缀(可选). - * @return 如果前缀是前缀,则为新字符串,否则为相同的字符串. - */ - private static String prependIfMissing(final String text, final CharSequence prefix, final boolean ignoreCase, - final CharSequence... prefixes) { + * @param text 字符串 + * @param prefix 在字符串开始前的前缀 + * @param ignoreCase 指示比较是否应忽略大小写 + * @param args 有效的附加前缀(可选) + * @return 如果前缀是前缀,则为新字符串,否则为相同的字符串 + */ + private static String prependIfMissing(final String text, + final CharSequence prefix, + final boolean ignoreCase, + final CharSequence... args) { if (null == text || isEmpty(prefix) || startWith(text, prefix, ignoreCase)) { return toString(text); } - if (null != prefixes && prefixes.length > 0) { - for (final CharSequence s : prefixes) { + if (null != args && args.length > 0) { + for (final CharSequence s : args) { if (startWith(text, s, ignoreCase)) { return text; } @@ -3975,7 +4000,7 @@ private static String prependIfMissing(final String text, final CharSequence pre } /** - * 如果字符串还没有以任何前缀开始,则将前缀添加到字符串的开头. + * 如果字符串还没有以任何前缀开始,则将前缀添加到字符串的开头 * *
          * StringKit.prependIfMissing(null, null) = null
    @@ -3999,18 +4024,19 @@ private static String prependIfMissing(final String text, final CharSequence pre
          * StringKit.prependIfMissing("MNOabc", "xyz", "mno") = "xyzMNOabc"
          * 
    * - * @param text T字符串. - * @param prefix 在字符串开始前的前缀. - * @param prefixes 有效的附加前缀(可选). - * @return 如果前缀是前缀,则为新字符串,否则为相同的字符串. + * @param text T字符串 + * @param prefix 在字符串开始前的前缀 + * @param args 有效的附加前缀(可选) + * @return 如果前缀是前缀,则为新字符串,否则为相同的字符串 */ - public static String prependIfMissing(final String text, final CharSequence prefix, final CharSequence... - prefixes) { - return prependIfMissing(text, prefix, false, prefixes); + public static String prependIfMissing(final String text, + final CharSequence prefix, + final CharSequence... args) { + return prependIfMissing(text, prefix, false, args); } /** - * 如果字符串尚未开始,则将前缀添加到字符串的开头,不区分大小写,并使用任何前缀. + * 如果字符串尚未开始,则将前缀添加到字符串的开头,不区分大小写,并使用任何前缀 * *
          * StringKit.prependIfMissingIgnoreCase(null, null) = null
    @@ -4034,14 +4060,15 @@ public static String prependIfMissing(final String text, final CharSequence pref
          * StringKit.prependIfMissingIgnoreCase("MNOabc", "xyz", "mno") = "MNOabc"
          * 
    * - * @param text T字符串. - * @param prefix 在字符串开始前的前缀. - * @param prefixes 有效的附加前缀(可选). - * @return 如果前缀是前缀,则为新字符串,否则为相同的字符串. + * @param text 字符串 + * @param prefix 在字符串开始前的前缀 + * @param args 有效的附加前缀(可选) + * @return 如果前缀是前缀,则为新字符串,否则为相同的字符串 */ - public static String prependIfMissingIgnoreCase(final String text, final CharSequence prefix, - final CharSequence... prefixes) { - return prependIfMissing(text, prefix, true, prefixes); + public static String prependIfMissingIgnoreCase(final String text, + final CharSequence prefix, + final CharSequence... args) { + return prependIfMissing(text, prefix, true, args); } /** @@ -4132,23 +4159,23 @@ public static String center(CharSequence text, final int size, char padChar) { * * @param text 字符串 * @param size 指定长度 - * @param padStr 两边补充的字符串 + * @param padText 两边补充的字符串 * @return 补充后的字符串 */ - public static String center(CharSequence text, final int size, CharSequence padStr) { + public static String center(CharSequence text, final int size, CharSequence padText) { if (null == text || size <= 0) { return toString(text); } - if (isEmpty(padStr)) { - padStr = Symbol.SPACE; + if (isEmpty(padText)) { + padText = Symbol.SPACE; } final int strLen = text.length(); final int pads = size - strLen; if (pads <= 0) { return text.toString(); } - text = padPre(text, strLen + pads / 2, padStr); - text = padAfter(text, size, padStr); + text = padPre(text, strLen + pads / 2, padText); + text = padAfter(text, size, padText); return text.toString(); } @@ -4163,10 +4190,10 @@ public static String center(CharSequence text, final int size, CharSequence padS * * @param text 字符串 * @param minLength 最小长度 - * @param padStr 补充的字符 + * @param padText 补充的字符 * @return 补充后的字符串 */ - public static String padPre(CharSequence text, int minLength, CharSequence padStr) { + public static String padPre(CharSequence text, int minLength, CharSequence padText) { if (null == text) { return null; } @@ -4177,7 +4204,7 @@ public static String padPre(CharSequence text, int minLength, CharSequence padSt return subPre(text, minLength); } - return repeatByLength(padStr, minLength - strLen).concat(text.toString()); + return repeatByLength(padText, minLength - strLen).concat(text.toString()); } /** @@ -4247,10 +4274,10 @@ public static String padAfter(CharSequence text, int minLength, char padChar) { * * @param text 字符串,如果为null,直接返回null * @param minLength 最小长度 - * @param padStr 补充的字符 + * @param padText 补充的字符 * @return 补充后的字符串 */ - public static String padAfter(CharSequence text, int minLength, CharSequence padStr) { + public static String padAfter(CharSequence text, int minLength, CharSequence padText) { if (null == text) { return null; } @@ -4261,7 +4288,7 @@ public static String padAfter(CharSequence text, int minLength, CharSequence pad return subByLength(text, minLength); } - return text.toString().concat(repeatByLength(padStr, minLength - strLen)); + return text.toString().concat(repeatByLength(padText, minLength - strLen)); } /** @@ -4309,13 +4336,13 @@ public static String filter(CharSequence text, Filter filter) { /** * 创建StringBuilder对象 * - * @param text 初始字符串列表 + * @param args 初始字符串列表 * @return StringBuilder对象 */ - public static StringBuilder builder(CharSequence... text) { + public static StringBuilder builder(CharSequence... args) { final StringBuilder sb = new StringBuilder(); - for (CharSequence val : text) { - sb.append(val); + for (CharSequence text : args) { + sb.append(text); } return sb; } @@ -4323,11 +4350,11 @@ public static StringBuilder builder(CharSequence... text) { /** * 获取字符串的长度,如果为null返回0 * - * @param cs a 字符串 + * @param text 字符串 * @return 字符串的长度, 如果为null返回0 */ - public static int length(final CharSequence cs) { - return null == cs ? 0 : cs.length(); + public static int length(final CharSequence text) { + return null == text ? 0 : text.length(); } /** @@ -4375,22 +4402,22 @@ public static int ordinalIndexOf(CharSequence text, CharSequence word, int ordin /** * {@link CharSequence} 转为字符串,null安全 * - * @param cs {@link CharSequence} + * @param text {@link CharSequence} * @return 字符串 */ - public static String toString(CharSequence cs) { - return null == cs ? null : cs.toString(); + public static String toString(CharSequence text) { + return null == text ? null : text.toString(); } /** * 字符转为字符串 * 如果为ASCII字符,使用缓存 * - * @param c 字符 + * @param text 字符 * @return 字符串 */ - public static String toString(char c) { - return ASCIICache.toString(c); + public static String toString(char text) { + return ASCIICache.toString(text); } /** @@ -4408,15 +4435,15 @@ public static String toString(char c) { * * * @param text 要检查的CharSequence可能为空 - * @param word 要查找的区分大小写的字符序列可以是空的,也可以包含{@code null} + * @param args 要查找的区分大小写的字符序列可以是空的,也可以包含{@code null} * @return {如果输入{@code sequence}是{@code null}, 并且没有提供{@code searchstring}, * 或者输入{@code sequence}以提供的区分大小写的{@code searchstring}结尾. */ - public static boolean endsWithAny(final CharSequence text, final CharSequence... word) { - if (isEmpty(text) || ArrayKit.isEmpty(word)) { + public static boolean endsWithAny(final CharSequence text, final CharSequence... args) { + if (isEmpty(text) || ArrayKit.isEmpty(args)) { return false; } - for (final CharSequence val : word) { + for (final CharSequence val : args) { if (endWith(text, val)) { return true; } @@ -4427,36 +4454,36 @@ public static boolean endsWithAny(final CharSequence text, final CharSequence... /** * 返回第一个非{@code null}元素 * - * @param texts 多个元素 - * @param 元素类型 + * @param args 多个元素 + * @param 元素类型 * @return 第一个非空元素,如果给定的数组为空或者都为空,返回{@code null} */ - public static T firstNonNull(T... texts) { - return ArrayKit.firstNonNull(texts); + public static T firstNonNull(T... args) { + return ArrayKit.firstNonNull(args); } /** * 返回第一个非empty元素 * - * @param texts 多个元素 - * @param 元素类型 + * @param args 多个元素 + * @param 元素类型 * @return 第一个非空元素,如果给定的数组为空或者都为空,返回{@code null} * @see #isNotEmpty(CharSequence) */ - public static T firstNonEmpty(T... texts) { - return ArrayKit.firstNonNull(CharsKit::isNotEmpty, texts); + public static T firstNonEmpty(T... args) { + return ArrayKit.firstNonNull(CharsKit::isNotEmpty, args); } /** * 返回第一个非blank 元素 * - * @param texts 多个元素 - * @param 元素类型 + * @param args 多个元素 + * @param 元素类型 * @return 第一个非空元素,如果给定的数组为空或者都为空,返回{@code null} * @see #isNotBlank(CharSequence) */ - public static T firstNonBlank(T... texts) { - return ArrayKit.firstNonNull(CharsKit::isNotBlank, texts); + public static T firstNonBlank(T... args) { + return ArrayKit.firstNonNull(CharsKit::isNotBlank, args); } } diff --git a/bus-core/src/main/java/org/aoju/bus/core/toolkit/ClassKit.java b/bus-core/src/main/java/org/aoju/bus/core/toolkit/ClassKit.java index 69b311b273..b95af0a3f2 100755 --- a/bus-core/src/main/java/org/aoju/bus/core/toolkit/ClassKit.java +++ b/bus-core/src/main/java/org/aoju/bus/core/toolkit/ClassKit.java @@ -118,26 +118,26 @@ public class ClassKit { /** * {@code null}安全的获取对象类型 * - * @param 对象类型 - * @param obj 对象,如果为{@code null} 返回{@code null} + * @param 对象类型 + * @param object 对象,如果为{@code null} 返回{@code null} * @return 对象类型, 提供对象如果为{@code null} 返回{@code null} */ - public static Class getClass(T obj) { - return ((null == obj) ? null : (Class) obj.getClass()); + public static Class getClass(T object) { + return ((null == object) ? null : (Class) object.getClass()); } /** * 获取类名 * - * @param obj 获取类名对象 + * @param object 获取类名对象 * @param isSimple 是否简单类名,如果为true,返回不带包名的类名 * @return 类名 */ - public static String getClassName(Object obj, boolean isSimple) { - if (null == obj) { + public static String getClassName(Object object, boolean isSimple) { + if (null == object) { return null; } - final Class clazz = obj.getClass(); + final Class clazz = object.getClass(); return getClassName(clazz, isSimple); } @@ -170,15 +170,15 @@ public static String getClassName(Class clazz, boolean isSimple) { */ public static Class[] getClasses(Object... objects) { Class[] classes = new Class[objects.length]; - Object obj; + Object object; for (int i = 0; i < objects.length; i++) { - obj = objects[i]; - if (obj instanceof NullWrapper) { - classes[i] = ((NullWrapper) obj).getWrappedClass(); - } else if (null == obj) { + object = objects[i]; + if (object instanceof NullWrapper) { + classes[i] = ((NullWrapper) object).getWrappedClass(); + } else if (null == object) { classes[i] = Object.class; } else { - classes[i] = obj.getClass(); + classes[i] = object.getClass(); } } return classes; @@ -322,14 +322,14 @@ public static Method[] getDeclaredMethods(Class clazz) { /** * 查找指定对象中的所有方法(包括非public方法),也包括父对象和Object类的方法 * - * @param obj 被查找的对象 + * @param object 被查找的对象 * @param methodName 方法名 * @param args 参数 * @return 方法 * @throws SecurityException 无访问权限抛出异常 */ - public static Method getDeclaredMethodOfObj(Object obj, String methodName, Object... args) throws SecurityException { - return getDeclaredMethod(obj.getClass(), methodName, getClasses(args)); + public static Method getDeclaredMethodOfObject(Object object, String methodName, Object... args) throws SecurityException { + return getDeclaredMethod(object.getClass(), methodName, getClasses(args)); } /** diff --git a/bus-core/src/main/java/org/aoju/bus/core/toolkit/CollKit.java b/bus-core/src/main/java/org/aoju/bus/core/toolkit/CollKit.java index 3d309fc5ca..0012b63c98 100755 --- a/bus-core/src/main/java/org/aoju/bus/core/toolkit/CollKit.java +++ b/bus-core/src/main/java/org/aoju/bus/core/toolkit/CollKit.java @@ -241,6 +241,27 @@ public static , E> T defaultIfEmpty(T collection, Suppli return isEmpty(collection) ? supplier.get() : collection; } + /** + * 获取一个空List,这个空List不可变 + * + * @param 元素类型 + * @return 空的List + * @see Collections#emptyList() + */ + public static List empty() { + return Collections.emptyList(); + } + + /** + * 获取一个初始大小为0的List,这个空List可变 + * + * @param 元素类型 + * @return 空的List + */ + public static List zero() { + return new ArrayList<>(0); + } + /** * 两个集合的并集 * 针对一个集合中存在多个相同元素的情况,计算两个集合中此元素的个数,保留最多的个数 @@ -481,7 +502,7 @@ public static Collection subtract(Collection coll1, Collection coll */ public static List subtractToList(Collection coll1, Collection coll2) { if (isEmpty(coll1)) { - return Collections.emptyList(); + return newArrayList(); } if (isEmpty(coll2)) { if (null == coll1) { @@ -1540,7 +1561,7 @@ public static List sub(Collection list, int start, int end, int step) */ public static List> split(List list, int size) { if (isEmpty(list)) { - return Collections.emptyList(); + return newArrayList(); } List> result = new ArrayList<>(list.size() / size + 1); @@ -2101,6 +2122,80 @@ public static HashMap toMap(Object[] array) { return MapKit.of(array); } + /** + * 将Collection转化为map(value类型与collection的泛型不同) + * {@code Collection -----> Map } + * + * @param collection 需要转化的集合 + * @param key E类型转化为K类型的lambda方法 + * @param value E类型转化为V类型的lambda方法 + * @param collection中的泛型 + * @param map中的key类型 + * @param map中的value类型 + * @return 转化后的map + */ + public static Map toMap(Collection collection, Function key, Function value) { + return toMap(collection, key, value, false); + } + + /** + * @param collection 需要转化的集合 + * @param key E类型转化为K类型的lambda方法 + * @param value E类型转化为V类型的lambda方法 + * @param isParallel 是否并行流 + * @param collection中的泛型 + * @param map中的key类型 + * @param map中的value类型 + * @return 转化后的map + */ + public static Map toMap(Collection collection, Function key, Function value, boolean isParallel) { + if (isEmpty(collection)) { + return MapKit.zero(); + } + return StreamKit.of(collection, isParallel) + .collect(HashMap::new, (m, v) -> m.put(key.apply(v), value.apply(v)), HashMap::putAll); + } + + /** + * 对null友好的 toMap 操作的 {@link Collector}实现,默认使用HashMap + * + * @param keyMapper 指定map中的key + * @param valueMapper 指定map中的value + * @param mergeFunction 合并前对value进行的操作 + * @param 实体类型 + * @param map中key的类型 + * @param map中value的类型 + * @return 对null友好的 toMap 操作的 {@link Collector}实现 + */ + public static Collector> toMap(Function keyMapper, + Function valueMapper, + BinaryOperator mergeFunction) { + return toMap(keyMapper, valueMapper, mergeFunction, HashMap::new); + } + + /** + * 对null友好的 toMap 操作的 {@link Collector}实现 + * + * @param keyMapper 指定map中的key + * @param valueMapper 指定map中的value + * @param mergeFunction 合并前对value进行的操作 + * @param mapSupplier 最终需要的map类型 + * @param 实体类型 + * @param map中key的类型 + * @param map中value的类型 + * @param map的类型 + * @return 对null友好的 toMap 操作的 {@link Collector}实现 + */ + public static > + Collector toMap(Function keyMapper, + Function valueMapper, + BinaryOperator mergeFunction, + Supplier mapSupplier) { + BiConsumer accumulator + = (map, element) -> map.put(Optional.ofNullable(element).map(keyMapper).get(), Optional.ofNullable(element).map(valueMapper).get()); + return new SimpleCollector<>(mapSupplier, accumulator, mapMerger(mergeFunction), Collections.unmodifiableSet(EnumSet.of(Collector.Characteristics.IDENTITY_FINISH))); + } + /** * 将集合转换为排序后的TreeSet * @@ -2882,7 +2977,7 @@ public static List> group(Collection collection, Hash hash) { * @return 分组列表 */ public static List> groupByField(Collection collection, final String fieldName) { - return group(collection, new Hash() { + return group(collection, new Hash<>() { private final List fieldNameList = new ArrayList<>(); @Override @@ -2980,23 +3075,23 @@ public static List reverse(List list, boolean clone) { /** * 获取指定对象的指定属性值(去除private,protected的限制) * - * @param obj 属性名称所在的对象 + * @param object 属性名称所在的对象 * @param fieldName 属性名称 * @return the object * @throws Exception 异常 */ - public static Object forceGetFieldValue(Object obj, String fieldName) throws Exception { - Field field = ClassKit.getField(obj.getClass(), fieldName); + public static Object forceGetFieldValue(Object object, String fieldName) throws Exception { + Field field = ClassKit.getField(object.getClass(), fieldName); boolean accessible = field.isAccessible(); if (!accessible) { // 如果是private,protected修饰的属性,需要修改为可以访问的 field.setAccessible(true); - obj = field.get(obj); + object = field.get(object); // 还原private,protected属性的访问性质 field.setAccessible(accessible); - return obj; + return object; } - return field.get(obj); + return field.get(object); } /** @@ -3186,6 +3281,22 @@ public static T[] concat(T[] one, T[] other, Class clazz) { return target; } + /** + * 像java11一样获取一个List + * + * @param ts 对象 + * @param 对象类型 + * @return 不可修改List + */ + public static List of(T... ts) { + if (ArrayKit.isEmpty(ts)) { + return newArrayList(); + } + List unmodifiableList = new ArrayList<>(ts.length); + Collections.addAll(unmodifiableList, ts); + return Collections.unmodifiableList(unmodifiableList); + } + /** * 不可变 Set * @@ -3329,22 +3440,6 @@ public static Collection trans(Collection collection, Function(collection, function); } - /** - * 像java11一样获取一个List - * - * @param ts 对象 - * @param 对象类型 - * @return 不可修改List - */ - public static List of(T... ts) { - if (ArrayKit.isEmpty(ts)) { - return Collections.emptyList(); - } - List unmodifiableList = new ArrayList<>(ts.length); - Collections.addAll(unmodifiableList, ts); - return Collections.unmodifiableList(unmodifiableList); - } - /** * 获取Collection或者iterator的大小,此方法可以处理的对象类型如下: *
      @@ -3415,48 +3510,14 @@ public static Map toIdentityMap(Collection collection, Function< */ public static Map toIdentityMap(Collection collection, Function key, boolean isParallel) { if (isEmpty(collection)) { - return Collections.emptyMap(); + return MapKit.newHashMap(0); } return toMap(collection, (v) -> org.aoju.bus.core.lang.Optional.ofNullable(v).map(key).get(), Function.identity(), isParallel); } - /** - * 将Collection转化为map(value类型与collection的泛型不同) - * {@code Collection -----> Map } - * - * @param collection 需要转化的集合 - * @param key E类型转化为K类型的lambda方法 - * @param value E类型转化为V类型的lambda方法 - * @param collection中的泛型 - * @param map中的key类型 - * @param map中的value类型 - * @return 转化后的map - */ - public static Map toMap(Collection collection, Function key, Function value) { - return toMap(collection, key, value, false); - } - - /** - * @param collection 需要转化的集合 - * @param key E类型转化为K类型的lambda方法 - * @param value E类型转化为V类型的lambda方法 - * @param isParallel 是否并行流 - * @param collection中的泛型 - * @param map中的key类型 - * @param map中的value类型 - * @return 转化后的map - */ - public static Map toMap(Collection collection, Function key, Function value, boolean isParallel) { - if (isEmpty(collection)) { - return Collections.emptyMap(); - } - return StreamKit.of(collection, isParallel) - .collect(HashMap::new, (m, v) -> m.put(key.apply(v), value.apply(v)), HashMap::putAll); - } - /** * 将collection按照规则(比如有相同的班级id)分类成map - * {@code Collection -------> Map> } + * {@code Collection -------> Map> } * * @param collection 需要分类的集合 * @param key 键分组的规则 @@ -3470,7 +3531,7 @@ public static Map> groupByKey(Collection collection, Functi /** * 将collection按照规则(比如有相同的班级id)分类成map - * {@code Collection -------> Map> } + * {@code Collection -------> Map> } * * @param collection 需要分类的集合 * @param key 键分组的规则 @@ -3481,14 +3542,14 @@ public static Map> groupByKey(Collection collection, Functi */ public static Map> groupByKey(Collection collection, Function key, boolean isParallel) { if (isEmpty(collection)) { - return Collections.emptyMap(); + return MapKit.zero(); } return StreamKit.of(collection, isParallel).collect(Collectors.groupingBy(key, Collectors.toList())); } /** * 将collection按照两个规则(比如有相同的年级id,班级id)分类成双层map - * {@code Collection ---> Map>> } + * {@code Collection ---> Map>> } * * @param collection 需要分类的集合 * @param key1 第一个分类的规则 @@ -3498,14 +3559,16 @@ public static Map> groupByKey(Collection collection, Functi * @param 第二个map中的key类型 * @return 分类后的map */ - public static Map>> groupBy2Key(Collection collection, Function key1, Function key2) { + public static Map>> groupBy2Key(Collection collection, + Function key1, + Function key2) { return groupBy2Key(collection, key1, key2, false); } /** * 将collection按照两个规则(比如有相同的年级id,班级id)分类成双层map - * {@code Collection ---> Map>> } + * {@code Collection ---> Map>> } * * @param collection 需要分类的集合 * @param key1 第一个分类的规则 @@ -3516,10 +3579,12 @@ public static Map>> groupBy2Key(Collection collec * @param 第二个map中的key类型 * @return 分类后的map */ - public static Map>> groupBy2Key(Collection collection, Function key1, - Function key2, boolean isParallel) { + public static Map>> groupBy2Key(Collection collection, + Function key1, + Function key2, + boolean isParallel) { if (isEmpty(collection)) { - return Collections.emptyMap(); + return MapKit.zero(); } return StreamKit.of(collection, isParallel) .collect(Collectors.groupingBy(key1, Collectors.groupingBy(key2, Collectors.toList()))); @@ -3527,7 +3592,7 @@ public static Map>> groupBy2Key(Collection collec /** * 将collection按照两个规则(比如有相同的年级id,班级id)分类成双层map - * {@code Collection ---> Map> } + * {@code Collection ---> Map> } * * @param collection 需要分类的集合 * @param key1 第一个分类的规则 @@ -3537,13 +3602,15 @@ public static Map>> groupBy2Key(Collection collec * @param collection中的泛型 * @return 分类后的map */ - public static Map> group2Map(Collection collection, Function key1, Function key2) { + public static Map> group2Map(Collection collection, + Function key1, + Function key2) { return group2Map(collection, key1, key2, false); } /** * 将collection按照两个规则(比如有相同的年级id,班级id)分类成双层map - * {@code Collection ---> Map> } + * {@code Collection ---> Map> } * * @param collection 需要分类的集合 * @param key1 第一个分类的规则 @@ -3555,9 +3622,11 @@ public static Map> group2Map(Collection collection, Fu * @return 分类后的map */ public static Map> group2Map(Collection collection, - Function key1, Function key2, boolean isParallel) { + Function key1, + Function key2, + boolean isParallel) { if (isEmpty(collection) || key1 == null || key2 == null) { - return Collections.emptyMap(); + return MapKit.zero(); } return StreamKit.of(collection, isParallel) .collect(Collectors.groupingBy(key1, Collectors.toMap(key2, Function.identity(), (l, r) -> l))); @@ -3565,7 +3634,7 @@ public static Map> group2Map(Collection collection, /** * 将collection按照规则(比如有相同的班级id)分类成map,map中的key为班级id,value为班级名 - * {@code Collection -------> Map> } + * {@code Collection -------> Map> } * * @param collection 需要分类的集合 * @param key 分类的规则 @@ -3575,14 +3644,15 @@ public static Map> group2Map(Collection collection, * @param List中的value类型 * @return 分类后的map */ - public static Map> groupKeyValue(Collection collection, Function key, + public static Map> groupKeyValue(Collection collection, + Function key, Function value) { return groupKeyValue(collection, key, value, false); } /** * 将collection按照规则(比如有相同的班级id)分类成map,map中的key为班级id,value为班级名 - * {@code Collection -------> Map> } + * {@code Collection -------> Map> } * * @param collection 需要分类的集合 * @param key 分类的规则 @@ -3593,10 +3663,12 @@ public static Map> groupKeyValue(Collection collection, * @param List中的value类型 * @return 分类后的map */ - public static Map> groupKeyValue(Collection collection, Function key, - Function value, boolean isParallel) { + public static Map> groupKeyValue(Collection collection, + Function key, + Function value, + boolean isParallel) { if (isEmpty(collection)) { - return Collections.emptyMap(); + return MapKit.zero(); } return StreamKit.of(collection, isParallel) .collect(Collectors.groupingBy(key, Collectors.mapping(value, Collectors.toList()))); @@ -3717,46 +3789,6 @@ public static Map> groupKeyValue(Collection collection, } } - /** - * 对null友好的 toMap 操作的 {@link Collector}实现,默认使用HashMap - * - * @param keyMapper 指定map中的key - * @param valueMapper 指定map中的value - * @param mergeFunction 合并前对value进行的操作 - * @param 实体类型 - * @param map中key的类型 - * @param map中value的类型 - * @return 对null友好的 toMap 操作的 {@link Collector}实现 - */ - public static Collector> toMap(Function keyMapper, - Function valueMapper, - BinaryOperator mergeFunction) { - return toMap(keyMapper, valueMapper, mergeFunction, HashMap::new); - } - - /** - * 对null友好的 toMap 操作的 {@link Collector}实现 - * - * @param keyMapper 指定map中的key - * @param valueMapper 指定map中的value - * @param mergeFunction 合并前对value进行的操作 - * @param mapSupplier 最终需要的map类型 - * @param 实体类型 - * @param map中key的类型 - * @param map中value的类型 - * @param map的类型 - * @return 对null友好的 toMap 操作的 {@link Collector}实现 - */ - public static > - Collector toMap(Function keyMapper, - Function valueMapper, - BinaryOperator mergeFunction, - Supplier mapSupplier) { - BiConsumer accumulator - = (map, element) -> map.put(Optional.ofNullable(element).map(keyMapper).get(), Optional.ofNullable(element).map(valueMapper).get()); - return new SimpleCollector<>(mapSupplier, accumulator, mapMerger(mergeFunction), Collections.unmodifiableSet(EnumSet.of(Collector.Characteristics.IDENTITY_FINISH))); - } - /** * 用户合并map的BinaryOperator,传入合并前需要对value进行的操作 * @@ -3777,7 +3809,7 @@ public static > BinaryOperator mapMerger(BinaryOper /** * 将collection转化为List集合,但是两者的泛型不同 - * {@code Collection ------> List } + * {@code Collection ------> List } * * @param collection 需要转化的集合 * @param function collection中的泛型转化为list泛型的lambda表达式 @@ -3791,7 +3823,7 @@ public static List toList(Collection collection, Function fun /** * 将collection转化为List集合,但是两者的泛型不同 - * {@code Collection ------> List } + * {@code Collection ------> List } * * @param collection 需要转化的集合 * @param function collection中的泛型转化为list泛型的lambda表达式 @@ -3802,7 +3834,7 @@ public static List toList(Collection collection, Function fun */ public static List toList(Collection collection, Function function, boolean isParallel) { if (isEmpty(collection)) { - return Collections.emptyList(); + return newArrayList(); } return StreamKit.of(collection, isParallel) .map(function) @@ -3812,7 +3844,7 @@ public static List toList(Collection collection, Function fun /** * 将collection转化为Set集合,但是两者的泛型不同 - * {@code Collection ------> Set } + * {@code Collection ------> Set } * * @param collection 需要转化的集合 * @param function collection中的泛型转化为set泛型的lambda表达式 @@ -3837,7 +3869,7 @@ public static Set toSet(Collection collection, Function funct */ public static Set toSet(Collection collection, Function function, boolean isParallel) { if (isEmpty(collection)) { - return Collections.emptySet(); + return CollKit.newHashSet(); } return StreamKit.of(collection, isParallel) .map(function) @@ -3859,11 +3891,11 @@ public static Set toSet(Collection collection, Function funct */ public static Map merge(Map map1, Map map2, BiFunction merge) { if (MapKit.isEmpty(map1) && MapKit.isEmpty(map2)) { - return Collections.emptyMap(); + return MapKit.zero(); } else if (MapKit.isEmpty(map1)) { - map1 = Collections.emptyMap(); + map1 = MapKit.zero(); } else if (MapKit.isEmpty(map2)) { - map2 = Collections.emptyMap(); + map2 = MapKit.zero(); } Set key = new HashSet<>(); key.addAll(map1.keySet()); @@ -3930,7 +3962,7 @@ public static void swapElement(List list, T element, T targetElement) { * @param atomicInteger 原子操作类 * @return 索引位置 */ - public static int ringNextIntByObj(Object object, AtomicInteger atomicInteger) { + public static int ringNextIntByObject(Object object, AtomicInteger atomicInteger) { Assert.notNull(object); int modulo = size(object); return ringNextInt(modulo, atomicInteger); diff --git a/bus-core/src/main/java/org/aoju/bus/core/toolkit/EnumKit.java b/bus-core/src/main/java/org/aoju/bus/core/toolkit/EnumKit.java index f9532b9610..54cd63f703 100755 --- a/bus-core/src/main/java/org/aoju/bus/core/toolkit/EnumKit.java +++ b/bus-core/src/main/java/org/aoju/bus/core/toolkit/EnumKit.java @@ -55,12 +55,12 @@ public static boolean isEnum(Class clazz) { /** * 指定类是否为Enum类 * - * @param obj 类 + * @param object 类 * @return 是否为Enum类 */ - public static boolean isEnum(Object obj) { - Assert.notNull(obj); - return obj.getClass().isEnum(); + public static boolean isEnum(Object object) { + Assert.notNull(object); + return object.getClass().isEnum(); } /** diff --git a/bus-core/src/main/java/org/aoju/bus/core/toolkit/FileKit.java b/bus-core/src/main/java/org/aoju/bus/core/toolkit/FileKit.java index 2195aa3d33..d77a0ba62b 100755 --- a/bus-core/src/main/java/org/aoju/bus/core/toolkit/FileKit.java +++ b/bus-core/src/main/java/org/aoju/bus/core/toolkit/FileKit.java @@ -36,7 +36,7 @@ import org.aoju.bus.core.io.resource.ClassPathResource; import org.aoju.bus.core.io.resource.FileResource; import org.aoju.bus.core.io.resource.Resource; -import org.aoju.bus.core.io.streams.BOMInputStream; +import org.aoju.bus.core.io.stream.BOMInputStream; import org.aoju.bus.core.lang.*; import java.io.*; @@ -3928,7 +3928,7 @@ public static RandomAccessFile createRandomAccessFile(File file, FileMode mode) * @return 资源内容 */ public static String readers(String resource) { - return getResourceObj(resource).readString(Charset.UTF_8); + return getResourceObject(resource).readString(Charset.UTF_8); } /** @@ -4070,7 +4070,7 @@ public static URL getResource(String resource, Class baseClass) { * @param path 路径,可以是绝对路径,也可以是相对路径 * @return {@link Resource} 资源对象 */ - public static Resource getResourceObj(String path) { + public static Resource getResourceObject(String path) { return FileKit.isAbsolutePath(path) ? new FileResource(path) : new ClassPathResource(path); } diff --git a/bus-core/src/main/java/org/aoju/bus/core/toolkit/IoKit.java b/bus-core/src/main/java/org/aoju/bus/core/toolkit/IoKit.java index 2eae127d1c..04c9e5b0a7 100755 --- a/bus-core/src/main/java/org/aoju/bus/core/toolkit/IoKit.java +++ b/bus-core/src/main/java/org/aoju/bus/core/toolkit/IoKit.java @@ -28,14 +28,26 @@ import org.aoju.bus.core.collection.LineIterator; import org.aoju.bus.core.convert.Convert; import org.aoju.bus.core.exception.InstrumentException; -import org.aoju.bus.core.io.*; +import org.aoju.bus.core.io.LifeCycle; +import org.aoju.bus.core.io.LineHandler; +import org.aoju.bus.core.io.Progress; +import org.aoju.bus.core.io.Segment; +import org.aoju.bus.core.io.buffer.Buffer; import org.aoju.bus.core.io.copier.ChannelCopier; import org.aoju.bus.core.io.copier.ReaderWriterCopier; import org.aoju.bus.core.io.copier.StreamCopier; -import org.aoju.bus.core.io.streams.BOMInputStream; -import org.aoju.bus.core.io.streams.BOMReader; -import org.aoju.bus.core.io.streams.FastByteOutputStream; -import org.aoju.bus.core.io.streams.NullOutputStream; +import org.aoju.bus.core.io.sink.BufferSink; +import org.aoju.bus.core.io.sink.RealSink; +import org.aoju.bus.core.io.sink.Sink; +import org.aoju.bus.core.io.source.BufferSource; +import org.aoju.bus.core.io.source.RealSource; +import org.aoju.bus.core.io.source.Source; +import org.aoju.bus.core.io.stream.BOMInputStream; +import org.aoju.bus.core.io.stream.BOMReader; +import org.aoju.bus.core.io.stream.FastByteOutputStream; +import org.aoju.bus.core.io.stream.NullOutputStream; +import org.aoju.bus.core.io.timout.AsyncTimeout; +import org.aoju.bus.core.io.timout.Timeout; import org.aoju.bus.core.lang.Assert; import org.aoju.bus.core.lang.Charset; import org.aoju.bus.core.lang.Normal; @@ -166,30 +178,30 @@ public static long copy(Reader reader, Writer writer, int bufferSize) throws Ins /** * 将Reader中的内容复制到Writer中,拷贝后不关闭Reader * - * @param reader Reader - * @param writer Writer - * @param bufferSize 缓存大小 - * @param streamProgress 进度处理器 + * @param reader Reader + * @param writer Writer + * @param bufferSize 缓存大小 + * @param progress 进度处理器 * @return 传输的byte数 * @throws InstrumentException 异常 */ - public static long copy(Reader reader, Writer writer, int bufferSize, StreamProgress streamProgress) throws InstrumentException { - return copy(reader, writer, bufferSize, -1, streamProgress); + public static long copy(Reader reader, Writer writer, int bufferSize, Progress progress) throws InstrumentException { + return copy(reader, writer, bufferSize, -1, progress); } /** * 将Reader中的内容复制到Writer中,拷贝后不关闭Reader * - * @param reader Reader - * @param writer Writer - * @param bufferSize 缓存大小 - * @param count 最大长度 - * @param streamProgress 进度处理器 + * @param reader Reader + * @param writer Writer + * @param bufferSize 缓存大小 + * @param count 最大长度 + * @param progress 进度处理器 * @return 传输的byte数 * @throws InstrumentException IO异常 */ - public static long copy(Reader reader, Writer writer, int bufferSize, long count, StreamProgress streamProgress) throws InstrumentException { - return new ReaderWriterCopier(bufferSize, count, streamProgress).copy(reader, writer); + public static long copy(Reader reader, Writer writer, int bufferSize, long count, Progress progress) throws InstrumentException { + return new ReaderWriterCopier(bufferSize, count, progress).copy(reader, writer); } /** @@ -220,30 +232,30 @@ public static long copy(InputStream in, OutputStream out, int bufferSize) throws /** * 拷贝流 * - * @param in 输入流 - * @param out 输出流 - * @param bufferSize 缓存大小 - * @param streamProgress 进度条 + * @param in 输入流 + * @param out 输出流 + * @param bufferSize 缓存大小 + * @param progress 进度条 * @return 传输的byte数 * @throws InstrumentException 异常 */ - public static long copy(InputStream in, OutputStream out, int bufferSize, StreamProgress streamProgress) throws InstrumentException { - return copy(in, out, bufferSize, -1, streamProgress); + public static long copy(InputStream in, OutputStream out, int bufferSize, Progress progress) throws InstrumentException { + return copy(in, out, bufferSize, -1, progress); } /** * 拷贝流,拷贝后不关闭流 * - * @param in 输入流 - * @param out 输出流 - * @param bufferSize 缓存大小 - * @param count 总拷贝长度 - * @param streamProgress 进度条 + * @param in 输入流 + * @param out 输出流 + * @param bufferSize 缓存大小 + * @param count 总拷贝长度 + * @param progress 进度条 * @return 传输的byte数 * @throws InstrumentException IO异常 */ - public static long copy(InputStream in, OutputStream out, int bufferSize, int count, StreamProgress streamProgress) throws InstrumentException { - return new StreamCopier(bufferSize, count, streamProgress).copy(in, out); + public static long copy(InputStream in, OutputStream out, int bufferSize, int count, Progress progress) throws InstrumentException { + return new StreamCopier(bufferSize, count, progress).copy(in, out); } /** @@ -302,16 +314,16 @@ private static long copySafely(FileChannel inChannel, FileChannel outChannel) th /** * 拷贝流,本方法不会关闭流 * - * @param in 输入流 - * @param out 输出流 - * @param bufferSize 缓存大小 - * @param count 最大长度 - * @param streamProgress 进度条 + * @param in 输入流 + * @param out 输出流 + * @param bufferSize 缓存大小 + * @param count 最大长度 + * @param progress 进度条 * @return 传输的byte数 * @throws InstrumentException IO异常 */ - public static long copy(InputStream in, OutputStream out, int bufferSize, long count, StreamProgress streamProgress) throws InstrumentException { - return copy(Channels.newChannel(in), Channels.newChannel(out), bufferSize, count, streamProgress); + public static long copy(InputStream in, OutputStream out, int bufferSize, long count, Progress progress) throws InstrumentException { + return copy(Channels.newChannel(in), Channels.newChannel(out), bufferSize, count, progress); } /** @@ -342,30 +354,30 @@ public static long copy(ReadableByteChannel in, WritableByteChannel out, int buf /** * 拷贝流,使用NIO,不会关闭channel * - * @param in {@link ReadableByteChannel} - * @param out {@link WritableByteChannel} - * @param bufferSize 缓冲大小,如果小于等于0,使用默认 - * @param streamProgress {@link StreamProgress}进度处理器 + * @param in {@link ReadableByteChannel} + * @param out {@link WritableByteChannel} + * @param bufferSize 缓冲大小,如果小于等于0,使用默认 + * @param progress {@link Progress}进度处理器 * @return 拷贝的字节数 * @throws InstrumentException IO异常 */ - public static long copy(ReadableByteChannel in, WritableByteChannel out, int bufferSize, StreamProgress streamProgress) throws InstrumentException { - return copy(in, out, bufferSize, -1, streamProgress); + public static long copy(ReadableByteChannel in, WritableByteChannel out, int bufferSize, Progress progress) throws InstrumentException { + return copy(in, out, bufferSize, -1, progress); } /** * 拷贝流,使用NIO,不会关闭channel * - * @param in {@link ReadableByteChannel} - * @param out {@link WritableByteChannel} - * @param bufferSize 缓冲大小,如果小于等于0,使用默认 - * @param count 读取总长度 - * @param streamProgress {@link StreamProgress}进度处理器 + * @param in {@link ReadableByteChannel} + * @param out {@link WritableByteChannel} + * @param bufferSize 缓冲大小,如果小于等于0,使用默认 + * @param count 读取总长度 + * @param progress {@link Progress}进度处理器 * @return 拷贝的字节数 * @throws InstrumentException IO异常 */ - public static long copy(ReadableByteChannel in, WritableByteChannel out, int bufferSize, long count, StreamProgress streamProgress) throws InstrumentException { - return new ChannelCopier(bufferSize, count, streamProgress).copy(in, out); + public static long copy(ReadableByteChannel in, WritableByteChannel out, int bufferSize, long count, Progress progress) throws InstrumentException { + return new ChannelCopier(bufferSize, count, progress).copy(in, out); } /** @@ -756,15 +768,15 @@ public static String readHex28Lower(InputStream in) throws InstrumentException { * @return 输出流 * @throws InstrumentException 异常 */ - public static T readObj(InputStream in) throws InstrumentException { + public static T readObject(InputStream in) throws InstrumentException { if (null == in) { throw new IllegalArgumentException("The InputStream must not be null"); } ObjectInputStream ois; try { ois = new ObjectInputStream(in); - final T obj = (T) ois.readObject(); - return obj; + final T object = (T) ois.readObject(); + return object; } catch (IOException e) { throw new InstrumentException(e); } catch (ClassNotFoundException e) { @@ -1095,10 +1107,10 @@ public static void write(OutputStream out, java.nio.charset.Charset charset, boo * * @param out 输出流 * @param isCloseOut 写入完毕是否关闭输出流 - * @param obj 写入的对象内容 + * @param object 写入的对象内容 */ - public static void write(OutputStream out, boolean isCloseOut, Serializable obj) throws InstrumentException { - writeObjects(out, isCloseOut, obj); + public static void write(OutputStream out, boolean isCloseOut, Serializable object) throws InstrumentException { + writeObjects(out, isCloseOut, object); } /** diff --git a/bus-core/src/main/java/org/aoju/bus/core/toolkit/IterKit.java b/bus-core/src/main/java/org/aoju/bus/core/toolkit/IterKit.java index 29a1b1c3ec..d297f69ea4 100755 --- a/bus-core/src/main/java/org/aoju/bus/core/toolkit/IterKit.java +++ b/bus-core/src/main/java/org/aoju/bus/core/toolkit/IterKit.java @@ -1033,41 +1033,41 @@ public static E get(final Iterator iterator, int index) { *
    • object - 单对象的{@link ArrayIterator}
    • *
    * - * @param obj 可以获取{@link Iterator}的对象 + * @param object 可以获取{@link Iterator}的对象 * @return {@link Iterator},如果提供对象为{@code null},返回{@code null} */ - public static Iterator get(final Object obj) { - if (obj == null) { + public static Iterator get(final Object object) { + if (object == null) { return null; - } else if (obj instanceof Iterator) { - return (Iterator) obj; - } else if (obj instanceof Iterable) { - return ((Iterable) obj).iterator(); - } else if (ArrayKit.isArray(obj)) { - return new ArrayIterator<>(obj); - } else if (obj instanceof Enumeration) { - return new EnumerationIterator<>((Enumeration) obj); - } else if (obj instanceof Map) { - return ((Map) obj).entrySet().iterator(); - } else if (obj instanceof NodeList) { - return new NodeListIterator((NodeList) obj); - } else if (obj instanceof Node) { + } else if (object instanceof Iterator) { + return (Iterator) object; + } else if (object instanceof Iterable) { + return ((Iterable) object).iterator(); + } else if (ArrayKit.isArray(object)) { + return new ArrayIterator<>(object); + } else if (object instanceof Enumeration) { + return new EnumerationIterator<>((Enumeration) object); + } else if (object instanceof Map) { + return ((Map) object).entrySet().iterator(); + } else if (object instanceof NodeList) { + return new NodeListIterator((NodeList) object); + } else if (object instanceof Node) { // 遍历子节点 - return new NodeListIterator(((Node) obj).getChildNodes()); - } else if (obj instanceof Dictionary) { - return new EnumerationIterator<>(((Dictionary) obj).elements()); + return new NodeListIterator(((Node) object).getChildNodes()); + } else if (object instanceof Dictionary) { + return new EnumerationIterator<>(((Dictionary) object).elements()); } // 反射获取 try { - final Object iterator = ReflectKit.invoke(obj, "iterator"); + final Object iterator = ReflectKit.invoke(object, "iterator"); if (iterator instanceof Iterator) { return (Iterator) iterator; } } catch (final RuntimeException ignore) { // ignore } - return new ArrayIterator<>(new Object[]{obj}); + return new ArrayIterator<>(new Object[]{object}); } } diff --git a/bus-core/src/main/java/org/aoju/bus/core/toolkit/MapKit.java b/bus-core/src/main/java/org/aoju/bus/core/toolkit/MapKit.java index e83e50cc59..ccdb18402a 100755 --- a/bus-core/src/main/java/org/aoju/bus/core/toolkit/MapKit.java +++ b/bus-core/src/main/java/org/aoju/bus/core/toolkit/MapKit.java @@ -26,6 +26,7 @@ package org.aoju.bus.core.toolkit; import org.aoju.bus.core.convert.Convert; +import org.aoju.bus.core.exception.InstrumentException; import org.aoju.bus.core.lang.Editor; import org.aoju.bus.core.lang.Filter; import org.aoju.bus.core.lang.Normal; @@ -213,10 +214,15 @@ public static ConcurrentHashMap newConcurrentHashMap(Map map) * @return {@link Map}实例 */ public static Map createMap(Class mapType) { - if (mapType.isAssignableFrom(AbstractMap.class)) { + if (null == mapType || mapType.isAssignableFrom(AbstractMap.class)) { return new HashMap<>(); } else { - return (Map) ReflectKit.newInstance(mapType); + try { + return (Map) ReflectKit.newInstance(mapType); + } catch (InstrumentException e) { + // 不支持的map类型,返回默认的HashMap + return new HashMap<>(); + } } } @@ -1249,6 +1255,17 @@ public static Map empty() { return Collections.emptyMap(); } + /** + * 返回一个初始大小为0的HashMap(初始为0,可加入元素) + * + * @param 键类型 + * @param 值类型 + * @return 初始大小为0的HashMap + */ + public static Map zero() { + return new HashMap<>(0, 1); + } + /** * 根据传入的Map类型不同,返回对应类型的空Map * diff --git a/bus-core/src/main/java/org/aoju/bus/core/toolkit/MathKit.java b/bus-core/src/main/java/org/aoju/bus/core/toolkit/MathKit.java index 55572259b2..89acab3645 100755 --- a/bus-core/src/main/java/org/aoju/bus/core/toolkit/MathKit.java +++ b/bus-core/src/main/java/org/aoju/bus/core/toolkit/MathKit.java @@ -134,18 +134,18 @@ public static BigDecimal add(Number v1, Number v2) { * 提供精确的加法运算 * 如果传入多个值为null或者空,则返回0 * - * @param values 多个被加值 + * @param args 多个被加值 * @return 和 */ - public static BigDecimal add(Number... values) { - if (ArrayKit.isEmpty(values)) { + public static BigDecimal add(Number... args) { + if (ArrayKit.isEmpty(args)) { return BigDecimal.ZERO; } - Number value = values[0]; + Number value = args[0]; BigDecimal result = new BigDecimal(null == value ? Symbol.ZERO : value.toString()); - for (int i = 1; i < values.length; i++) { - value = values[i]; + for (int i = 1; i < args.length; i++) { + value = args[i]; if (null != value) { result = result.add(new BigDecimal(value.toString())); } @@ -157,18 +157,18 @@ public static BigDecimal add(Number... values) { * 提供精确的加法运算 * 如果传入多个值为null或者空,则返回0 * - * @param values 多个被加值 + * @param args 多个被加值 * @return 和 */ - public static BigDecimal add(String... values) { - if (ArrayKit.isEmpty(values)) { + public static BigDecimal add(String... args) { + if (ArrayKit.isEmpty(args)) { return BigDecimal.ZERO; } - String value = values[0]; + String value = args[0]; BigDecimal result = null == value ? BigDecimal.ZERO : new BigDecimal(value); - for (int i = 1; i < values.length; i++) { - value = values[i]; + for (int i = 1; i < args.length; i++) { + value = args[i]; if (null != value) { result = result.add(new BigDecimal(value)); } @@ -180,18 +180,18 @@ public static BigDecimal add(String... values) { * 提供精确的加法运算 * 如果传入多个值为null或者空,则返回0 * - * @param values 多个被加值 + * @param args 多个被加值 * @return 和 */ - public static BigDecimal add(BigDecimal... values) { - if (ArrayKit.isEmpty(values)) { + public static BigDecimal add(BigDecimal... args) { + if (ArrayKit.isEmpty(args)) { return BigDecimal.ZERO; } - BigDecimal value = values[0]; + BigDecimal value = args[0]; BigDecimal result = null == value ? BigDecimal.ZERO : value; - for (int i = 1; i < values.length; i++) { - value = values[i]; + for (int i = 1; i < args.length; i++) { + value = args[i]; if (null != value) { result = result.add(value); } @@ -259,18 +259,18 @@ public static BigDecimal sub(Number v1, Number v2) { * 提供精确的减法运算 * 如果传入多个值为null或者空,则返回0 * - * @param values 多个被减值 + * @param args 多个被减值 * @return 差 */ - public static BigDecimal sub(Number... values) { - if (ArrayKit.isEmpty(values)) { + public static BigDecimal sub(Number... args) { + if (ArrayKit.isEmpty(args)) { return BigDecimal.ZERO; } - Number value = values[0]; + Number value = args[0]; BigDecimal result = new BigDecimal(null == value ? Symbol.ZERO : value.toString()); - for (int i = 1; i < values.length; i++) { - value = values[i]; + for (int i = 1; i < args.length; i++) { + value = args[i]; if (null != value) { result = result.subtract(new BigDecimal(value.toString())); } @@ -282,18 +282,18 @@ public static BigDecimal sub(Number... values) { * 提供精确的减法运算 * 如果传入多个值为null或者空,则返回0 * - * @param values 多个被减值 + * @param args 多个被减值 * @return 差 */ - public static BigDecimal sub(String... values) { - if (ArrayKit.isEmpty(values)) { + public static BigDecimal sub(String... args) { + if (ArrayKit.isEmpty(args)) { return BigDecimal.ZERO; } - String value = values[0]; + String value = args[0]; BigDecimal result = new BigDecimal(null == value ? Symbol.ZERO : value); - for (int i = 1; i < values.length; i++) { - value = values[i]; + for (int i = 1; i < args.length; i++) { + value = args[i]; if (null != value) { result = result.subtract(new BigDecimal(value)); } @@ -305,18 +305,18 @@ public static BigDecimal sub(String... values) { * 提供精确的减法运算 * 如果传入多个值为null或者空,则返回0 * - * @param values 多个被减值 + * @param args 多个被减值 * @return 差 */ - public static BigDecimal sub(BigDecimal... values) { - if (ArrayKit.isEmpty(values)) { + public static BigDecimal sub(BigDecimal... args) { + if (ArrayKit.isEmpty(args)) { return BigDecimal.ZERO; } - BigDecimal value = values[0]; + BigDecimal value = args[0]; BigDecimal result = null == value ? BigDecimal.ZERO : value; - for (int i = 1; i < values.length; i++) { - value = values[i]; + for (int i = 1; i < args.length; i++) { + value = args[i]; if (null != value) { result = result.subtract(value); } @@ -384,18 +384,18 @@ public static BigDecimal mul(Number v1, Number v2) { * 提供精确的乘法运算 * 如果传入多个值为null或者空,则返回0 * - * @param values 多个被乘值 + * @param args 多个被乘值 * @return 积 */ - public static BigDecimal mul(Number... values) { - if (ArrayKit.isEmpty(values)) { + public static BigDecimal mul(Number... args) { + if (ArrayKit.isEmpty(args)) { return BigDecimal.ZERO; } - Number value = values[0]; + Number value = args[0]; BigDecimal result = new BigDecimal(null == value ? Symbol.ZERO : value.toString()); - for (int i = 1; i < values.length; i++) { - value = values[i]; + for (int i = 1; i < args.length; i++) { + value = args[i]; if (null != value) { result = result.multiply(new BigDecimal(value.toString())); } @@ -418,17 +418,17 @@ public static BigDecimal mul(String v1, String v2) { * 提供精确的乘法运算 * 如果传入多个值为null或者空,则返回0 * - * @param values 多个被乘值 + * @param args 多个被乘值 * @return 积 */ - public static BigDecimal mul(String... values) { - if (ArrayKit.isEmpty(values) || ArrayKit.hasNull(values)) { + public static BigDecimal mul(String... args) { + if (ArrayKit.isEmpty(args) || ArrayKit.hasNull(args)) { return BigDecimal.ZERO; } - BigDecimal result = new BigDecimal(values[0]); - for (int i = 1; i < values.length; i++) { - result = result.multiply(new BigDecimal(values[i])); + BigDecimal result = new BigDecimal(args[0]); + for (int i = 1; i < args.length; i++) { + result = result.multiply(new BigDecimal(args[i])); } return result; @@ -438,17 +438,17 @@ public static BigDecimal mul(String... values) { * 提供精确的乘法运算 * 如果传入多个值为null或者空,则返回0 * - * @param values 多个被乘值 + * @param args 多个被乘值 * @return 积 */ - public static BigDecimal mul(BigDecimal... values) { - if (ArrayKit.isEmpty(values) || ArrayKit.hasNull(values)) { + public static BigDecimal mul(BigDecimal... args) { + if (ArrayKit.isEmpty(args) || ArrayKit.hasNull(args)) { return BigDecimal.ZERO; } - BigDecimal result = values[0]; - for (int i = 1; i < values.length; i++) { - result = result.multiply(values[i]); + BigDecimal result = args[0]; + for (int i = 1; i < args.length; i++) { + result = result.multiply(args[i]); } return result; } @@ -726,7 +726,7 @@ public static BigDecimal round(double v, int scale) { * @param scale 保留小数位数 * @return 新值 */ - public static String roundStr(double v, int scale) { + public static String roundString(double v, int scale) { return round(v, scale).toString(); } @@ -765,7 +765,7 @@ public static BigDecimal round(BigDecimal number, int scale) { * @param scale 保留小数位数 * @return 新值 */ - public static String roundStr(String numberStr, int scale) { + public static String roundString(String numberStr, int scale) { return round(numberStr, scale).toString(); } @@ -791,7 +791,7 @@ public static BigDecimal round(double v, int scale, RoundingMode roundingMode) { * @param roundingMode 保留小数的模式 {@link RoundingMode} * @return 新值 */ - public static String roundStr(double v, int scale, RoundingMode roundingMode) { + public static String roundString(double v, int scale, RoundingMode roundingMode) { return round(v, scale, roundingMode).toString(); } @@ -844,7 +844,7 @@ public static BigDecimal round(BigDecimal number, int scale, RoundingMode roundi * @param roundingMode 保留小数的模式 {@link RoundingMode} * @return 新值 */ - public static String roundStr(String numberStr, int scale, RoundingMode roundingMode) { + public static String roundString(String numberStr, int scale, RoundingMode roundingMode) { return round(numberStr, scale, roundingMode).toString(); } @@ -1525,7 +1525,7 @@ public static int multiple(int m, int n) { * @param number 数字 * @return 二进制字符串 */ - public static String getBinaryStr(Number number) { + public static String getBinaryString(Number number) { if (number instanceof Long) { return Long.toBinaryString((Long) number); } else if (number instanceof Integer) { @@ -1800,123 +1800,123 @@ public static > T min(T[] numberArray) { /** * 取最小值 * - * @param numberArray 数字数组 + * @param args 数字数组 * @return 最小值 * @see ArrayKit#min(long...) */ - public static long min(long... numberArray) { - return ArrayKit.min(numberArray); + public static long min(long... args) { + return ArrayKit.min(args); } /** * 取最小值 * - * @param numberArray 数字数组 + * @param args 数字数组 * @return 最小值 * @see ArrayKit#min(int...) */ - public static int min(int... numberArray) { - return ArrayKit.min(numberArray); + public static int min(int... args) { + return ArrayKit.min(args); } /** * 取最小值 * - * @param numberArray 数字数组 + * @param args 数字数组 * @return 最小值 * @see ArrayKit#min(short...) */ - public static short min(short... numberArray) { - return ArrayKit.min(numberArray); + public static short min(short... args) { + return ArrayKit.min(args); } /** * 取最小值 * - * @param numberArray 数字数组 + * @param args 数字数组 * @return 最小值 * @see ArrayKit#min(double...) */ - public static double min(double... numberArray) { - return ArrayKit.min(numberArray); + public static double min(double... args) { + return ArrayKit.min(args); } /** * 取最小值 * - * @param numberArray 数字数组 + * @param args 数字数组 * @return 最小值 * @see ArrayKit#min(float...) */ - public static float min(float... numberArray) { - return ArrayKit.min(numberArray); + public static float min(float... args) { + return ArrayKit.min(args); } /** * 取最大值 * - * @param 元素类型 - * @param numberArray 数字数组 + * @param 元素类型 + * @param args 数字数组 * @return 最大值 * @see ArrayKit#max(Comparable[]) */ - public static > T max(T[] numberArray) { - return ArrayKit.max(numberArray); + public static > T max(T[] args) { + return ArrayKit.max(args); } /** * 取最大值 * - * @param numberArray 数字数组 + * @param args 数字数组 * @return 最大值 * @see ArrayKit#max(long...) */ - public static long max(long... numberArray) { - return ArrayKit.max(numberArray); + public static long max(long... args) { + return ArrayKit.max(args); } /** * 取最大值 * - * @param numberArray 数字数组 + * @param args 数字数组 * @return 最大值 * @see ArrayKit#max(int...) */ - public static int max(int... numberArray) { - return ArrayKit.max(numberArray); + public static int max(int... args) { + return ArrayKit.max(args); } /** * 取最大值 * - * @param numberArray 数字数组 + * @param args 数字数组 * @return 最大值 * @see ArrayKit#max(short...) */ - public static short max(short... numberArray) { - return ArrayKit.max(numberArray); + public static short max(short... args) { + return ArrayKit.max(args); } /** * 取最大值 * - * @param numberArray 数字数组 + * @param args 数字数组 * @return 最大值 * @see ArrayKit#max(double...) */ - public static double max(double... numberArray) { - return ArrayKit.max(numberArray); + public static double max(double... args) { + return ArrayKit.max(args); } /** * 取最大值 * - * @param numberArray 数字数组 + * @param args 数字数组 * @return 最大值 * @see ArrayKit#max(float...) */ - public static float max(float... numberArray) { - return ArrayKit.max(numberArray); + public static float max(float... args) { + return ArrayKit.max(args); } /** @@ -2525,7 +2525,7 @@ private static int mathNode(int selectNum) { /** * 给数字对象按照指定长度在左侧补0. *

    - * 使用案例: addZero2Str(11,4) 返回 "0011", addZero2Str(-18,6)返回 "-000018" + * 使用案例: addZero2String(11,4) 返回 "0011", addZero2String(-18,6)返回 "-000018" * * @param numObj 数字对象 * @param length 指定的长度 diff --git a/bus-core/src/main/java/org/aoju/bus/core/toolkit/NameKit.java b/bus-core/src/main/java/org/aoju/bus/core/toolkit/NameKit.java index 3a74fa030e..9530395906 100755 --- a/bus-core/src/main/java/org/aoju/bus/core/toolkit/NameKit.java +++ b/bus-core/src/main/java/org/aoju/bus/core/toolkit/NameKit.java @@ -25,9 +25,6 @@ ********************************************************************************/ package org.aoju.bus.core.toolkit; -import java.util.ArrayList; -import java.util.List; - /** * 生成姓名 * @@ -36,6915 +33,744 @@ */ public class NameKit { - private static final List EN_FIRST_LIST = new ArrayList<>(); - private static final List EN_LAST_LIST = new ArrayList<>(); - private static final List CN_LAST_NAME = new ArrayList<>(); - private static final List CN_FIRST_NAME = new ArrayList<>(); + /** + * 中文姓 + */ + public static final String[] CN_LAST_NAME = { + "怀", "老", "堂", "考", "逄", "栋", "树", "栗", "候", "通", "速", "校", "逢", "性", + "倪", "逮", "逯", "堵", "栾", "耿", "桂", "聂", "衅", "遇", "聊", "行", "桐", "桑", + "道", "桓", "塔", "硕", "塞", "衡", "衣", "桥", "表", "恭", "偶", "衷", "项", "须", + "恽", "顾", "顿", "梁", "袁", "梅", "傅", "肇", "悉", "频", "邓", "肖", "邗", "邛", + "颜", "邝", "悟", "邢", "那", "肥", "碧", "储", "墨", "邬", "袭", "邰", "邱", "邴", + "邵", "邶", "邸", "邹", "检", "郁", "郎", "风", "郏", "郑", "裔", "郗", "裘", "郜", + "郝", "飞", "烟", "惠", "胡", "胥", "郦", "僧", "磨", "僪", "士", "壬", "郭", "森", + "郯", "声", "裴", "郸", "都", "能", "鄂", "愈", "焉", "植", "夏", "褒", "夔", "夕", + "夙", "多", "褚", "愚", "鄞", "鄢", "焦", "大", "天", "夫", "脱", "夷", "示", "礼", + "祁", "允", "元", "充", "兆", "酆", "奇", "祈", "慈", "奈", "奉", "光", "慎", "酒", + "慕", "奕", "祖", "党", "楚", "奚", "祝", "祢", "全", "公", "六", "祭", "兰", "关", + "兴", "其", "饶", "典", "养", "楼", "腾", "冀", "覃", "禄", "冉", "熊", "福", "冒", + "首", "香", "禚", "军", "农", "冠", "妫", "冯", "况", "冷", "禹", "冼", "禽", "禾", + "释", "秋", "始", "凌", "种", "野", "金", "姒", "姓", "委", "燕", "秘", "姚", "姜", + "解", "凤", "秦", "臧", "姬", "凭", "称", "出", "函", "言", "刀", "刁", "威", "娄", + "戈", "樊", "戊", "程", "戎", "税", "戏", "成", "刑", "舒", "刘", "战", "戚", "刚", + "舜", "初", "戢", "利", "别", "爱", "戴", "户", "稽", "訾", "房", "所", "穆", "扈", + "前", "才", "剑", "牛", "牟", "牢", "剧", "牧", "马", "扬", "良", "穰", "牵", "扶", + "驹", "詹", "空", "艾", "承", "檀", "犁", "节", "抄", "骆", "骑", "芒", "抗", "折", + "力", "功", "务", "窦", "芮", "励", "花", "劳", "犹", "势", "狂", "狄", "勇", "苌", + "苍", "苏", "苑", "苗", "高", "招", "拜", "苟", "章", "勤", "童", "苦", "独", "竭", + "端", "拱", "英", "竹", "竺", "勾", "茂", "范", "笃", "包", "茅", "茆", "謇", "化", + "北", "次", "匡", "符", "欧", "笪", "第", "嬴", "茹", "区", "荀", "千", "荆", "华", + "魏", "卑", "卓", "答", "孔", "单", "字", "南", "孙", "孛", "卜", "孝", "卞", "孟", + "占", "止", "卢", "荣", "季", "荤", "步", "学", "武", "歧", "卫", "卯", "印", "危", + "却", "卷", "捷", "卿", "简", "宁", "玄", "历", "宇", "守", "安", "玉", "厉", "宋", + "王", "掌", "完", "厍", "宏", "宓", "箕", "宗", "莘", "官", "厚", "定", "宛", "宜", + "宝", "实", "原", "管", "计", "宣", "接", "宦", "让", "莫", "宫", "环", "宰", "莱", + "殳", "段", "家", "殷", "许", "容", "宾", "宿", "菅", "寇", "及", "毋", "友", "富", + "双", "母", "寒", "毓", "叔", "毕", "诗", "受", "毛", "古", "召", "揭", "班", "可", + "台", "史", "说", "叶", "寸", "诸", "司", "诺", "寻", "寿", "封", "理", "将", "谈", + "合", "尉", "吉", "同", "谌", "后", "谏", "少", "向", "尔", "吕", "尚", "谢", "尤", + "营", "琦", "尧", "萧", "萨", "谬", "谭", "谯", "琴", "水", "吴", "谷", "永", "尹", + "吾", "尾", "局", "求", "居", "豆", "屈", "汉", "告", "籍", "展", "汗", "员", "葛", + "汝", "瑞", "江", "屠", "池", "象", "董", "汤", "周", "摩", "汪", "山", "汲", "米", + "类", "鱼", "呼", "鲁", "沃", "针", "沈", "蒉", "钊", "貊", "蒋", "和", "鲍", "咎", + "沐", "岑", "撒", "粘", "沙", "蒙", "鲜", "钞", "钟", "粟", "钦", "璩", "钭", "钮", + "蒯", "钱", "蒲", "岳", "咸", "蒿", "哀", "铁", "哈", "泉", "操", "铎", "法", "糜", + "蓝", "蓟", "波", "泣", "泥", "蓬", "瓮", "泰", "银", "泷", "系", "锁", "甄", "崇", + "洋", "锐", "唐", "崔", "甘", "错", "蔚", "洛", "贝", "生", "素", "贡", "蔡", "索", + "用", "洪", "甫", "紫", "贯", "支", "贰", "田", "由", "贲", "甲", "申", "贵", "贸", + "费", "改", "锺", "贺", "蔺", "贾", "资", "畅", "商", "镇", "嵇", "敏", "赏", "浑", + "敖", "赖", "留", "赛", "敛", "镜", "赤", "浦", "赧", "赫", "敬", "浮", "赵", "海", + "长", "涂", "薄", "善", "文", "越", "斋", "疏", "斐", "薛", "斛", "喜", "綦", "斯", + "方", "喻", "於", "施", "旁", "旅", "藏", "旗", "无", "淡", "巢", "藤", "左", "淦", + "巧", "门", "巨", "藩", "巩", "闪", "巫", "闫", "闭", "问", "路", "己", "闳", "巴", + "闵", "时", "旷", "闻", "闽", "闾", "丁", "市", "昂", "布", "清", "帅", "万", "师", + "嘉", "希", "昌", "不", "阎", "明", "丑", "易", "昔", "帖", "世", "丘", "阙", "丙", + "阚", "业", "帛", "丛", "东", "昝", "星", "渠", "严", "春", "温", "席", "中", "阮", + "是", "丰", "阳", "阴", "常", "游", "丹", "阿", "陀", "晁", "繁", "陆", "蹇", "么", + "陈", "蹉", "义", "晋", "之", "乌", "虎", "晏", "乐", "乔", "乘", "乙", "湛", "乜", + "九", "虞", "习", "虢", "书", "普", "景", "买", "干", "平", "年", "陶", "幸", "智", + "登", "白", "百", "乾", "鹿", "广", "蚁", "庄", "隆", "庆", "皇", "皋", "隋", "于", + "随", "源", "隐", "云", "库", "亓", "应", "五", "井", "隗", "庚", "府", "庞", "红", + "亢", "溥", "亥", "度", "麦", "暨", "纪", "京", "皮", "纳", "暴", "麴", "纵", "康", + "庹", "麻", "隽", "庾", "线", "雀", "仁", "练", "黄", "仆", "集", "仇", "盈", "终", + "廉", "仉", "益", "介", "盍", "绍", "雍", "仍", "从", "黎", "经", "滑", "滕", "盖", + "廖", "盘", "仙", "盛", "仝", "回", "满", "代", "令", "以", "绪", "雪", "仪", "续", + "蛮", "仰", "仲", "曲", "绳", "仵", "延", "零", "雷", "相", "曹", "建", "任", "国", + "曾", "开", "漆", "有", "伊", "朋", "霍", "伍", "伏", "缑", "休", "弓", "弘", "望", + "霜", "伟", "真", "张", "圣", "弥", "伦", "在", "缪", "漫", "本", "圭", "弭", "眭", + "伯", "朱", "朴", "强", "机", "似", "权", "但", "位", "李", "齐", "归", "青", "何", + "罕", "靖", "罗", "潘", "佘", "余", "坚", "佛", "潜", "杜", "杞", "佟", "束", "睢", + "督", "彤", "来", "车", "睦", "杨", "革", "彭", "潭", "杭", "潮", "靳", "佴", "佼", + "载", "松", "板", "澄", "辉", "羊", "律", "融", "侍", "徐", "析", "林", "龙", "枚", + "龚", "辛", "辜", "果", "枝", "依", "辟", "鞠", "御", "侨", "徭", "侯", "德", "边", + "羽", "达", "羿", "瞿", "翁", "过", "城", "俎", "柏", "运", "柔", "进", "保", "俞", + "连", "俟", "迟", "翟", "翠", "信", "查", "韦", "翦", "韩", "矫", "濮", "修", "迮", + "柯", "濯", "柳", "石", "柴", "念", "韶", "忻", + "夏侯", "钟离", "由念", "第五", "闻人", "漆雕", "令狐", "尤念", "段干", "但念", "富察", + "呼延", "乌雅", "巫马", "夹谷", "端木", "司徒", "马佳", "仲孙", "万俟", "宇文", "百里", + "东方", "谷梁", "微生", "南宫", "东门", "澹台", "穰念", "公羊", "妫念", "张廖", "锺离", + "羊舌", "佟佳", "濮阳", "封念", "西门", "宗政", "宰父", "翦念", "仲长", "左丘", "尉迟", + "慕容", "纳喇", "拓跋", "轩辕", "鲜于", "南门", "司马", "申屠", "费莫", "伦念", "司空", + "公西", "长孙", "梁丘", "颛孙", "壤驷", "子车", "东郭", "公冶", "单于", "乌孙", "公良", + "柴念", "那拉", "完颜", "图门", "上官", "司寇", "淳于", "乐正", "范姜", "公孙", "亓官", + "诸葛", "皇甫", "赫连", "闾丘", "太叔", "欧阳", "公叔", "太史", "章佳", "碧鲁", "漆念", + "张简" + }; - static { - initEN_FIRST_LIST(); - initEN_LAST_LIST(); - initCN_LAST_NAME(); - initCN_FIRST_NAME(); - } + /** + * 中文名字 + */ + public static final String[] CN_FIRST_NAME = { + "慕雁", "婉然", "月明", "觅儿", "高翰", "白曼", "怀思", "碧菡", "奇邃", "云岚", "惜文", + "夏青", "俊雄", "俊雅", "馨蓉", "庄丽", "笛韵", "笑天", "舒怀", "梦琪", "清润", "萦心", + "丹蝶", "长旭", "清涵", "方仪", "杰秀", "天瑞", "美丽", "清淑", "忻愉", "隽美", "碧萱", + "淑君", "诗兰", "平灵", "柔淑", "晓山", "乐蓉", "良哲", "永新", "凡阳", "莹洁", "哲圣", + "同化", "玉英", "天和", "萦怀", "伟毅", "凝雁", "炎彬", "伟诚", "长星", "笑妍", "瀚海", + "清一", "景天", "信瑞", "鸿雪", "子凡", "古韵", "志文", "凝雨", "凝雪", "萦思", "阳炎", + "忆枫", "波光", "吉玉", "致萱", "博裕", "秀艾", "问风", "志新", "凡白", "忻慕", "正德", + "芳泽", "吉玟", "秀艳", "芳洁", "白枫", "昆明", "忆柏", "辰骏", "水晶", "芳洲", "代卉", + "菡梅", "正志", "琳溪", "叶嘉", "永昌", "曼衍", "书艺", "冰岚", "永春", "梅风", "柔丽", + "元槐", "安歌", "子爱", "融雪", "涵韵", "香蝶", "倩语", "乐蕊", "康裕", "梓露", "昕葳", + "问夏", "良畴", "毅君", "白柏", "彭勃", "迎真", "恨瑶", "月朗", "雨竹", "曼梅", "凡雁", + "景福", "代玉", "碧蓉", "妙松", "童彤", "浩慨", "黎明", "黎昕", "友安", "驰海", "凝静", + "飞鸣", "正思", "亦竹", "运盛", "易蓉", "芷波", "以南", "志明", "傲安", "蔓菁", "飞鹏", + "春芳", "新烟", "绍晖", "凯唱", "振平", "雅彤", "虹颖", "从阳", "飞鸿", "飞鸾", "胤文", + "帅红", "秀英", "代双", "芳润", "萱彤", "友容", "香柏", "夜雪", "凌香", "寻巧", "昊明", + "莞然", "绮艳", "紫夏", "阳焱", "昊昊", "淑哲", "代珊", "月杉", "宜楠", "凡霜", "向卉", + "今雨", "彦珺", "宵晨", "怀慕", "姝美", "合瑞", "妙柏", "芮丽", "春英", "白桃", "晋鹏", + "锦凡", "香柳", "雨筠", "向南", "洋洋", "静涵", "尔竹", "献仪", "忆梅", "自明", "若枫", + "问香", "雅美", "昭懿", "彦君", "阳煦", "小宸", "新儿", "青亦", "静淑", "娅童", "寄蓉", + "阳兰", "以珊", "寄蓝", "明旭", "盼夏", "含灵", "雅志", "昂杰", "安民", "白梅", "熙怡", + "靖之", "茉莉", "雨安", "伟泽", "琴轩", "倚云", "星菱", "平凡", "丁辰", "辰宇", "白梦", + "清漪", "熠彤", "明明", "映菡", "阳冰", "从雪", "易文", "香桃", "映菱", "巍昂", "驰丽", + "兰蕙", "振强", "锐锋", "红豆", "寒荷", "永望", "湛蓝", "新冬", "飞绿", "霏霏", "宵月", + "春荷", "尔安", "清佳", "从霜", "田然", "同和", "盼香", "静丹", "雪容", "映萱", "宏毅", + "含烟", "香梅", "明智", "醉芙", "昆杰", "妙梦", "痴香", "尔容", "从露", "幻儿", "山灵", + "笑笑", "优乐", "寄蕾", "令璟", "慧雅", "高懿", "皎月", "月桂", "月桃", "和蔼", "芮优", + "冰巧", "韵宁", "古香", "盼秋", "秋芸", "谷枫", "秋芳", "寄文", "瀚漠", "静云", "泰然", + "俊风", "碧春", "灵萱", "恬畅", "英朗", "芝兰", "悦乐", "清俊", "飞龙", "光誉", "鸿飞", + "梓颖", "寻绿", "蔓蔓", "安波", "沛容", "子珍", "燕妮", "巧荷", "鸿风", "朝旭", "听然", + "书萱", "韫素", "孤兰", "高扬", "元武", "秋英", "元正", "舒扬", "飞羽", "英杰", "韶容", + "君博", "芮佳", "同甫", "桂芝", "兴文", "飞翔", "姝惠", "雅惠", "芷云", "美偲", "昕昕", + "令锋", "振翱", "耘志", "初然", "羡丽", "怀芹", "觅双", "觅珍", "芮澜", "文静", "飞翰", + "诗珊", "飞翮", "诗双", "明朗", "高芬", "笑容", "意致", "飞翼", "子琪", "哲妍", "希彤", + "悦人", "华池", "皓月", "蕴秀", "清逸", "芸溪", "语儿", "宁乐", "子琳", "寄春", "驰轩", + "思彤", "笑寒", "秋荣", "初兰", "婉君", "嘉石", "嘉音", "森丽", "鸿祯", "秋荷", "子瑜", + "迎天", "绣文", "兴旺", "宜欣", "梦雨", "迎夏", "兴昌", "翠曼", "山兰", "浩荡", "施然", + "淑雅", "娴雅", "燕婉", "思美", "天真", "问筠", "烨霖", "泰初", "和昶", "鸿福", "乐松", + "雍恬", "明杰", "好洁", "越彬", "锐阵", "碧曼", "沛山", "格菲", "子璇", "平卉", "倩丽", + "琬凝", "文石", "梦露", "天青", "星文", "冰绿", "娟妍", "惜梦", "怜翠", "秋莲", "承嗣", + "濡霈", "奇玮", "之桃", "德水", "建茗", "沛岚", "妍歌", "雪峰", "成荫", "志行", "云心", + "鸿禧", "谷梦", "卿月", "阳华", "和暄", "语冰", "梓馨", "范明", "天睿", "晓彤", "霞雰", + "秀敏", "和暖", "舒荣", "暄妍", "丁兰", "夜天", "娟秀", "娜娜", "凌寒", "茜茜", "兰月", + "悠逸", "语燕", "骊泓", "依美", "昕月", "宏浚", "叶飞", "骊洁", "淑静", "嘉颖", "思怡", + "轩昂", "如波", "迎秋", "思思", "琛瑞", "娴静", "紫安", "恩霈", "问寒", "恨真", "冰彦", + "怀莲", "雅懿", "千亦", "运馨", "依心", "恬雅", "希恩", "俨雅", "驰逸", "雅致", "青烟", + "翠柏", "思恩", "天音", "思聪", "寒蕾", "天韵", "书文", "一凡", "雁芙", "娟娟", "星星", + "俊驰", "静逸", "景山", "春蕾", "夜香", "悦远", "碧螺", "宜民", "健柏", "慧颖", "彤雯", + "亦巧", "文墨", "燕子", "冰心", "翰藻", "星晖", "柔煦", "红云", "兴朝", "念蕾", "国安", + "睿识", "曦之", "德泽", "鸿骞", "雪巧", "寄松", "睿诚", "仙韵", "彤霞", "星晴", "姝艳", + "又绿", "念文", "智宇", "聪睿", "元洲", "巧蕊", "向阳", "梓婷", "宏深", "欢欣", "雪帆", + "泰华", "蔚星", "绮文", "斯琪", "雅艳", "恬静", "书易", "幻玉", "谷槐", "琦珍", "琪华", + "翠桃", "欣欣", "平和", "智宸", "嘉祥", "曼语", "鹏飞", "华清", "佳文", "暄婷", "彦露", + "夏容", "玮艺", "心语", "嘉祯", "令雪", "莹然", "宏义", "孟君", "沈思", "心诺", "寄柔", + "修雅", "茂材", "英楠", "畅然", "听南", "敏思", "幻珊", "夏寒", "晨希", "鹏天", "怡悦", + "涵容", "晴岚", "翠梅", "嘉福", "德海", "运骏", "含玉", "嘉禧", "凯风", "凝竹", "靖儿", + "学博", "梓童", "海荣", "春晓", "希慕", "竹悦", "德润", "雁荷", "幼珊", "永言", "良奥", + "华乐", "新瑶", "初南", "贝丽", "暄嫣", "向雁", "春晖", "心水", "甘雨", "嘉禾", "思慧", + "烨磊", "之槐", "向雪", "凯复", "奇略", "修真", "访风", "端懿", "易梦", "季同", "如之", + "佩杉", "含双", "飞舟", "康泰", "亦绿", "逸丽", "巧春", "芷烟", "彩静", "宇达", "飞航", + "向真", "听双", "鸿宝", "光济", "海莹", "曜灿", "秀曼", "咸英", "慧秀", "安澜", "琨瑜", + "文姝", "兰梦", "贤淑", "琨瑶", "雁菱", "如云", "珺娅", "凝安", "海菡", "雪绿", "逸云", + "德业", "光赫", "夏山", "绮晴", "乃欣", "奕叶", "向露", "博赡", "温书", "涵山", "雁菡", + "承基", "初珍", "访天", "飞扬", "一南", "佳晨", "夏岚", "博超", "瑞渊", "博涉", "恨风", + "燕岚", "邵美", "学名", "雨彤", "天禄", "怀蕾", "广君", "晓慧", "德义", "成文", "宏伟", + "蒙雨", "云臻", "洋然", "芷兰", "琬琰", "博涛", "宏伯", "怀薇", "思懿", "美华", "鹏程", + "泰和", "霞飞", "婷然", "芸儿", "微澜", "浩旷", "如仪", "绿蓉", "玉树", "灵松", "翰林", + "昭昭", "逸仙", "慕山", "溥心", "秋春", "醉易", "小翠", "梦香", "秀杰", "飞英", "元亮", + "慧婕", "旭东", "和裕", "子真", "牧歌", "洮洮", "弘致", "北嘉", "灵枫", "书蝶", "清卓", + "清华", "艳娇", "寒松", "梦秋", "景平", "宛丝", "弘懿", "曜儿", "华辉", "芸熙", "承颜", + "琰琬", "初瑶", "敏慧", "暮雨", "舒方", "雅萍", "辰龙", "瑞云", "巧曼", "君雅", "光临", + "雪羽", "宏达", "良骥", "采绿", "暖姝", "骞泽", "田田", "爰爰", "伟兆", "良骏", "易槐", + "寻芳", "芫华", "寻芹", "献玉", "米琪", "振荣", "觅露", "绣梓", "绿蕊", "阳嘉", "高明", + "宏远", "家欣", "博丽", "春枫", "知慧", "高旻", "诗霜", "安邦", "雪翎", "高昂", "雁蓉", + "婉静", "立果", "春柔", "春柏", "悦爱", "意蕴", "沙羽", "飞荷", "韶美", "海蓝", "飞捷", + "真如", "远骞", "千儿", "从筠", "妍丽", "建明", "弘扬", "宛亦", "棠华", "骏伟", "思若", + "令飒", "盼巧", "馨欣", "丽泽", "霞姝", "天骄", "德佑", "阳阳", "从安", "康乐", "念柏", + "一瑾", "经武", "天空", "香波", "宏逸", "英武", "承天", "琳瑜", "飞莲", "正文", "云英", + "金鹏", "一璇", "光亮", "秋月", "书桃", "淑婉", "宜人", "飞掣", "淑穆", "天媛", "香洁", + "琼华", "娴婉", "绿旋", "洁玉", "莹华", "子石", "代天", "梅红", "茵茵", "春桃", "娅思", + "思茵", "洛灵", "平雅", "嘉宝", "德辉", "嘉实", "孟阳", "瀚玥", "安然", "昆谊", "伶伶", + "秀梅", "曼丽", "宏邈", "敏才", "良策", "乐欣", "嘉容", "琲瓃", "半烟", "笑翠", "莹玉", + "念桃", "英毅", "芳华", "仙媛", "景彰", "志诚", "素怀", "千凝", "怀曼", "文宣", "祺然", + "千凡", "德运", "寒梅", "斯雅", "华灿", "承福", "音悦", "秋蝶", "兴言", "景龙", "骏俊", + "桂月", "春梅", "欣跃", "平露", "曼云", "新雅", "乐正", "梦竹", "寒梦", "醉蝶", "丹丹", + "高朗", "思莹", "旭辉", "新雨", "新雪", "雅蕊", "忆丹", "思莲", "阳霁", "淳雅", "代秋", + "孤阳", "意智", "稷骞", "寻菡", "忆之", "卓逸", "彩妍", "庆生", "伶俐", "子墨", "康伯", + "绮梅", "寻菱", "念梦", "新霁", "苇然", "雁易", "建木", "秋柔", "宏儒", "光辉", "秋柏", + "半兰", "令秋", "凯安", "丹云", "天宇", "绮梦", "慈心", "思菱", "海昌", "建本", "智纯", + "名姝", "莹琇", "明诚", "凯定", "静珊", "思萌", "丹亦", "彭祖", "靖琪", "秋柳", "英豪", + "幼白", "高杰", "冬莲", "格格", "任真", "晴美", "乐语", "丹溪", "元灵", "醉柳", "晓莉", + "骏逸", "若淑", "恨竹", "凌翠", "娟巧", "桂枫", "萧曼", "熙星", "锐立", "博达", "梦安", + "雅旋", "思萱", "觅风", "光远", "白云", "初阳", "致欣", "香之", "文山", "白亦", "微熹", + "博远", "季雅", "淳静", "漾漾", "冬菱", "向秋", "麦冬", "婀娜", "怀柔", "瀚钰", "妙之", + "宜修", "瑞灵", "半凡", "梦容", "梦寒", "芷珊", "骞仕", "芷珍", "永贞", "乐水", "灵槐", + "婷玉", "觅夏", "含雁", "一嘉", "虹彩", "韦茹", "雅昶", "冰莹", "悦可", "虹影", "博瀚", + "令婧", "志泽", "冬萱", "睿达", "伟博", "惜海", "乐池", "幻露", "开朗", "建柏", "方雅", + "雅晗", "奇颖", "康适", "婉奕", "凡巧", "幼霜", "曼辞", "天籁", "华采", "优瑗", "希蓉", + "新知", "皎洁", "依萱", "夏彤", "静和", "景胜", "芷琪", "卓然", "和歌", "怿悦", "冰菱", + "旭炎", "怀桃", "端敏", "鹏鲲", "经赋", "瑜然", "竹萱", "绿蝶", "智美", "鹏鲸", "若云", + "建树", "和正", "如冬", "南烟", "英资", "如冰", "恨寒", "初雪", "德元", "盼翠", "运鹏", + "蕙芸", "学真", "心远", "高格", "谧辰", "飞薇", "山雁", "飞文", "运鸿", "荷紫", "宏爽", + "康健", "梦山", "水丹", "蕴美", "语雪", "听露", "智志", "朋义", "如凡", "咏歌", "骊燕", + "水之", "琪睿", "婉秀", "云蔚", "忆辰", "鹤骞", "清嘉", "冷荷", "悦和", "怀梦", "畅畅", + "辰良", "涵忍", "俊弼", "梦岚", "蕙若", "哲彦", "绿柏", "明洁", "初露", "皓洁", "腾骏", + "修竹", "元冬", "凝绿", "庄雅", "杉月", "菊华", "哲美", "俊彦", "米雪", "叶帆", "忆远", + "雪艳", "绿柳", "乐贤", "思敏", "丽佳", "又莲", "谷之", "一雯", "安南", "晓蓝", "承安", + "阳飇", "新颖", "安卉", "礼骞", "腾骞", "永丰", "飞昂", "婉娜", "海融", "元凯", "承宣", + "俊美", "尔芙", "曜瑞", "宛儿", "冷菱", "骞信", "宜然", "以筠", "流丽", "纳兰", "又菡", + "飞星", "阳飙", "芦雪", "志专", "千叶", "鸿彩", "力行", "向笛", "飞虎", "经业", "濮存", + "冰蓝", "俊德", "志业", "庆雪", "谷云", "湉湉", "阳夏", "骏燕", "修筠", "琴雪", "梓彤", + "代容", "鸿羲", "林帆", "娅芳", "子骞", "良工", "迎彤", "鸿德", "鸿羽", "冷萱", "惠丽", + "悦畅", "熙柔", "和豫", "经义", "梓美", "庄静", "志义", "昊东", "丰熙", "哲思", "忆灵", + "弘文", "慕思", "傲菡", "安双", "夜绿", "安珊", "鸿志", "慧巧", "清雅", "荏苒", "沛芹", + "光熙", "彭魄", "昌淼", "柔雅", "茹薇", "依薇", "嘉平", "嘉年", "寻春", "以寒", "泽雨", + "暄美", "晓蕾", "兰泽", "友菱", "凝心", "涵育", "荌荌", "清霁", "陶然", "弘新", "寄波", + "俏美", "嘉庆", "勇捷", "红叶", "孟夏", "子童", "宏博", "丝琦", "海桃", "丝琪", "经亘", + "沛若", "宛凝", "弘方", "安吉", "之云", "雁桃", "君婷", "锦程", "雅柏", "昊乾", "悦喜", + "浩言", "锐精", "雅柔", "可心", "嘉纳", "才艺", "芮雅", "半双", "青雪", "安琪", "鹏鹍", + "才良", "丹烟", "怜晴", "晓旋", "小萍", "天巧", "天工", "雨莲", "冰薇", "晗蕊", "孤风", + "乐游", "元勋", "洁雅", "阳秋", "凝思", "冬易", "和泰", "莹白", "良平", "雁梅", "涵意", + "和泽", "慕悦", "乐湛", "幻天", "星汉", "柔静", "朗丽", "晗蕾", "奥雅", "雪莲", "文康", + "如南", "又蓝", "俊悟", "佁然", "若灵", "晓星", "长运", "叶彤", "安和", "悠雅", "祺瑞", + "晓昕", "驰皓", "琴音", "翠丝", "子安", "元化", "兴贤", "子宁", "和洽", "曼冬", "忆然", + "平婉", "子实", "启颜", "多思", "才英", "书语", "琴韵", "绍辉", "静白", "昊伟", "齐心", + "立诚", "月灵", "依晨", "天干", "晗日", "乐人", "坚白", "曼凡", "驰雪", "明亮", "曼凝", + "玉泉", "信鸥", "雪萍", "幻香", "飞松", "信鸿", "洁静", "希月", "诗筠", "星河", "罗绮", + "问芙", "俊能", "芮静", "德华", "欣然", "翰池", "晨菲", "向山", "长逸", "忻欢", "晔晔", + "语风", "运恒", "佑运", "初夏", "玉泽", "婉容", "清韵", "静雅", "凯康", "飞柏", "天纵", + "奕奕", "嘉美", "星波", "星泽", "文彦", "颐然", "晗昱", "苑博", "良弼", "曦哲", "梅花", + "含香", "嘉德", "晨萱", "才捷", "德厚", "文彬", "布衣", "炫明", "映波", "力言", "易云", + "作人", "俊慧", "采莲", "沛萍", "嘉志", "燕舞", "葛菲", "星津", "晗晗", "卿云", "英达", + "含秀", "星洲", "梅英", "灵波", "芷雪", "晓曼", "敏智", "白凡", "怡月", "慧美", "思松", + "永逸", "白凝", "浩歌", "玄清", "文心", "小蕊", "盼芙", "笑萍", "惜灵", "明轩", "新立", + "吉帆", "流逸", "文德", "傲薇", "会雯", "竹月", "思枫", "卓君", "雅楠", "怡木", "兴业", + "光华", "慧心", "双文", "嘉怡", "湘云", "星海", "含娇", "明辉", "皓轩", "琼音", "若兰", + "瑛琭", "尔蓉", "尔蓝", "小蕾", "文翰", "新竹", "寄云", "兴为", "楚楚", "秀洁", "傲旋", + "天罡", "文耀", "采萱", "思柔", "南珍", "觅山", "温瑜", "平宁", "晨蓓", "高歌", "莺韵", + "代巧", "明俊", "良翰", "颖然", "瑛瑶", "英逸", "昂然", "文思", "胤运", "明达", "平安", + "溪蓝", "骏琛", "明远", "霞绮", "馨逸", "水儿", "梦影", "翰海", "虹英", "博厚", "雨文", + "晶茹", "访彤", "筠竹", "元瑶", "宏畅", "鹏翼", "友易", "寻桃", "又晴", "傲易", "沛蓝", + "芸静", "天心", "晓枫", "睿博", "一禾", "嘉悦", "南琴", "绮波", "美如", "新筠", "安阳", + "曼卉", "霁芸", "朋兴", "秀越", "浩气", "星渊", "长兴", "俊才", "冰蝶", "问萍", "瑜璟", + "典丽", "梓舒", "千雁", "幻竹", "承平", "昂熙", "依柔", "韦曲", "恬默", "寻梅", "乐逸", + "采蓝", "亦旋", "天翰", "清奇", "俊良", "惜儿", "彦红", "雨旋", "冰枫", "玉书", "水冬", + "嘉胜", "小星", "嘉惠", "小春", "鸿才", "俊艾", "春海", "菱凡", "霞影", "曜坤", "永元", + "傲晴", "谷兰", "韶敏", "光启", "楠楠", "绍元", "安白", "水凡", "高谊", "清妍", "雨星", + "莞尔", "紫菱", "骞北", "小晨", "文惠", "蓉城", "驰颖", "丹南", "清妙", "云梦", "俊拔", + "沛文", "元甲", "柔妙", "紫萍", "清馨", "修平", "骏哲", "理群", "晓桐", "冬梅", "波峻", + "颖初", "凝芙", "忆南", "浦泽", "惠然", "哲茂", "远悦", "乐邦", "曼珍", "昊然", "丝雨", + "白卉", "嘉慕", "曼珠", "英光", "紫萱", "芬馥", "清秋", "天恩", "醉波", "昊焱", "俊英", + "宏阔", "秀丽", "俊茂", "致远", "幼安", "瑞锦", "红雪", "晨旭", "彤彤", "合美", "运良", + "展鹏", "承弼", "雨晨", "浩波", "妍和", "青香", "世韵", "天悦", "芝宇", "泰宁", "雨晴", + "安国", "飞槐", "碧灵", "白玉", "坚壁", "冷松", "恬美", "曼吟", "采薇", "采文", "鸣晨", + "丽华", "夏菡", "悠奕", "晨星", "智菱", "韦柔", "又松", "子帆", "听筠", "涵菡", "香卉", + "安露", "鸿振", "骏喆", "歌云", "音景", "涵菱", "童欣", "笑旋", "锐志", "开诚", "兴运", + "听安", "雪晴", "馨兰", "正诚", "灵溪", "桐欣", "孤容", "曾琪", "书云", "安青", "叶舞", + "丽玉", "乐儿", "沛春", "三姗", "俊捷", "清婉", "半雪", "乐然", "思楠", "兴修", "锐翰", + "朗然", "寒云", "柔婉", "素昕", "安静", "念之", "绮丽", "宛畅", "嘉致", "巍然", "若南", + "悠馨", "和通", "又柔", "傲松", "夏萱", "正谊", "问蕊", "玉轩", "华皓", "湘灵", "丹琴", + "明煦", "承德", "以彤", "若华", "嘉懿", "锐思", "令美", "欣可", "淑惠", "宏盛", "子平", + "修齐", "元嘉", "采春", "浩浩", "凝荷", "浩涆", "瑰玮", "凌文", "成济", "承志", "雅歌", + "念云", "高洁", "寄灵", "立人", "雪曼", "芳馥", "芷天", "半青", "芳馨", "懿轩", "明熙", + "欣合", "丽珠", "月华", "问薇", "书仪", "昌燎", "令羽", "萌运", "天慧", "傲柏", "妙双", + "睿哲", "妙珍", "晓楠", "文成", "傲柔", "依楠", "修美", "正豪", "绮云", "菱华", "晨曦", + "景明", "丽君", "小枫", "叶芳", "迎荷", "向彤", "星辰", "凝莲", "紫蕙", "巧云", "明凝", + "子默", "修德", "杨柳", "布欣", "彬彬", "梓莹", "嘉良", "笑晴", "波鸿", "元白", "夏蓉", + "静秀", "轶丽", "水卉", "翊君", "逸雅", "雅诗", "涵蓄", "晨朗", "如雪", "坚秉", "冷梅", + "悠婉", "彭彭", "奇希", "良才", "梓菱", "紫文", "紫薇", "骊雪", "令怡", "静姝", "恬悦", + "兴邦", "暄莹", "奥婷", "淑慧", "忻乐", "浩淼", "高超", "岚霏", "承恩", "雪松", "骊霞", + "友桃", "凌春", "箫吟", "志勇", "远航", "慧艳", "芸馨", "千风", "问春", "宜嘉", "静娴", + "尔蝶", "贞静", "英勋", "锐意", "颐和", "运莱", "立轩", "长卿", "梓萱", "雨柏", "隽洁", + "饮香", "浩丽", "浩渺", "静婉", "成业", "承悦", "玛丽", "天成", "凌晓", "昆卉", "友梅", + "清宁", "立辉", "雪枫", "嘉茂", "驰婷", "智敏", "阳州", "安顺", "星火", "惜玉", "婷秀", + "凌晴", "谷玉", "泽宇", "运菱", "珠星", "伟祺", "聪慧", "昌勋", "子美", "芸姝", "语山", + "和光", "驰媛", "景曜", "盼旋", "婵娟", "淑懿", "开济", "紫易", "宛白", "偲偲", "和煦", + "尔柳", "绿海", "之卉", "痴旋", "雪柳", "高义", "惜珊", "涵蕾", "元青", "慧英", "正浩", + "建业", "英华", "嘉荣", "中震", "玟丽", "高丽", "秀逸", "建中", "文茵", "建义", "贞韵", + "晴虹", "英卫", "芮安", "雨梅", "欣畅", "琦巧", "英卓", "沛柔", "亦梅", "夏旋", "之玉", + "盼易", "慕蕊", "英博", "丰雅", "博雅", "茂典", "斯年", "曲静", "觅翠", "迎蓉", "梓蓓", + "宏硕", "南霜", "舒云", "艳芳", "南露", "阳平", "悦媛", "子怀", "歆然", "成仁", "倩秀", + "痴春", "蕴藉", "修能", "瑶瑾", "幻巧", "彦慧", "晶晶", "雅洁", "水瑶", "温韦", "光霁", + "青寒", "静竹", "妍雅", "采枫", "虹星", "智明", "从菡", "子怡", "飞语", "甜恬", "千秋", + "海超", "平绿", "之双", "楚洁", "婷婷", "昆琦", "浩漫", "涵易", "丝祺", "敬曦", "盼晴", + "诗翠", "星然", "慧捷", "晴曦", "英叡", "又槐", "长钰", "涵映", "星光", "凝蕊", "铭晨", + "玉兰", "令慧", "星儿", "笑柳", "安祯", "康盛", "正清", "智晖", "英发", "梓敏", "含巧", + "诗怀", "正业", "元基", "采柳", "凌蝶", "韵梅", "祺祥", "夜蓉", "喜儿", "安福", "佩兰", + "自珍", "宏壮", "惠君", "红香", "小楠", "鸿文", "康震", "燕晨", "静安", "泰鸿", "耘豪", + "木兰", "寒烟", "松月", "曼雁", "欣嘉", "蔚然", "安妮", "维运", "祺福", "平彤", "子悦", + "骊颖", "迎蕾", "凯捷", "雁丝", "友槐", "问枫", "紫杉", "宏大", "乐珍", "乐双", "绍钧", + "飞沉", "奇志", "思语", "岚风", "映冬", "霞英", "高轩", "善和", "琇芳", "凝旋", "半香", + "念烟", "如风", "凌柏", "琇芬", "泰平", "俊明", "暄文", "瑾瑜", "丝娜", "铃语", "子惠", + "明珠", "抒怀", "弘毅", "采梦", "从蓉", "景行", "慕晴", "瑾瑶", "安娜", "海之", "悦宜", + "平心", "奇思", "绮烟", "秀兰", "安娴", "书兰", "洛妃", "俊晖", "昆锐", "翰采", "云水", + "吟怀", "碧玉", "琼岚", "俊晤", "新美", "夏月", "问柳", "曼青", "丹雪", "情韵", "浩瀚", + "华奥", "蝶梦", "天菱", "鸿晖", "璇玑", "皓君", "春兰", "忆雪", "齐敏", "灿灿", "娅楠", + "芷容", "高澹", "真茹", "高达", "阳德", "梦菡", "淳美", "阳羽", "俊智", "星爵", "彦芝", + "金枝", "梦菲", "灵凡", "海亦", "白雪", "恨荷", "秋灵", "雅丹", "雅丽", "姝丽", "可昕", + "高远", "寄南", "茂勋", "忆霜", "代芙", "星剑", "丽雅", "振海", "春冬", "英锐", "英哲", + "浩邈", "乐和", "婉慧", "乐咏", "璇珠", "尔槐", "逸贤", "智杰", "代芹", "志用", "书凝", + "建修", "寒凝", "问梅", "永长", "新翰", "绮兰", "微婉", "痴柏", "昕珏", "翠琴", "春燕", + "梓暄", "南风", "香雪", "逸馨", "巧兰", "碧琴", "碧琳", "筠心", "若雁", "如馨", "明钰", + "芃芃", "项禹", "高逸", "和玉", "澎湃", "盼柳", "经略", "从蕾", "曼音", "楚云", "雅云", + "奇胜", "夜春", "海伦", "云泽", "思洁", "紫桐", "骏奇", "悠素", "耘涛", "忻然", "沛槐", + "逸秀", "琇莹", "颐真", "运晟", "意远", "越泽", "高邈", "文敏", "骏祥", "英喆", "朵儿", + "明哲", "香露", "鸿朗", "梅梅", "康顺", "姣丽", "华婉", "飞跃", "运虹", "骊娜", "骊娟", + "乐生", "平惠", "子舒", "天蓉", "俊材", "璎玑", "幻翠", "湘君", "夏柳", "笑槐", "巧凡", + "涵柳", "正信", "兴发", "永嘉", "德馨", "天蓝", "浩然", "叶春", "文斌", "嫔然", "玉华", + "俊杰", "初彤", "依波", "贞婉", "寄琴", "安筠", "迎曼", "斌蔚", "星华", "仪芳", "语彤", + "飞丹", "和同", "昂雄", "骊婧", "安宁", "山彤", "痴梅", "端丽", "涵桃", "艳蕊", "起运", + "冉冉", "安安", "幼怡", "莉莉", "凝蝶", "昊嘉", "明喆", "思涵", "涵衍", "安宜", "寄瑶", + "赫然", "康复", "弘济", "骊婷", "燕桦", "昆皓", "宇寰", "骊媛", "靖巧", "玉环", "佩玉", + "芊芊", "醉冬", "颀秀", "宛妙", "艳蕙", "文昂", "玉珂", "冰洁", "安容", "安寒", "子芸", + "语心", "以莲", "文昌", "梦蕊", "初翠", "仲舒", "长霞", "妙音", "昆雄", "思淼", "文星", + "天薇", "半安", "向荣", "灵卉", "云淡", "司晨", "涵梅", "秀华", "惜雪", "谷雪", "建元", + "千山", "清绮", "奇致", "澄邈", "雅达", "柔绚", "斌斌", "舒兰", "佩珍", "高兴", "和璧", + "雅辰", "宛秋", "元驹", "莎莉", "妍妍", "梓柔", "海逸", "嫚儿", "银柳", "运杰", "娅欣", + "凯旋", "晨欣", "书南", "访文", "文景", "春华", "暮芸", "思义", "玉琲", "冰海", "莎莎", + "睿好", "弘深", "勇毅", "宵雨", "浩初", "慕梅", "驰鸿", "文虹", "彩萱", "梦旋", "慧晨", + "恨蕊", "灵珊", "寻云", "怜云", "白风", "慧智", "经国", "琴心", "雅逸", "布侬", "小谷", + "弘业", "素欣", "斐斐", "源源", "志国", "嘉月", "宏富", "玉瑾", "思源", "思云", "梦易", + "兴生", "思溪", "华容", "奥维", "燕楠", "晓丝", "绮南", "妙颜", "依丝", "阳舒", "弘丽", + "阳成", "书双", "云溪", "媛女", "和畅", "云亭", "嘉木", "文曜", "弘义", "心香", "星瑶", + "霞文", "白夏", "曼妮", "琳怡", "翠阳", "昌盛", "觅荷", "怡乐", "代蓝", "雅健", "清心", + "绮玉", "元魁", "平良", "夜柳", "绿兰", "善静", "歌吹", "天晴", "凝梦", "迎梅", "茹云", + "彤蕊", "吉敏", "良朋", "靓影", "津童", "睿姿", "冬亦", "胤雅", "念珍", "宾白", "高爽", + "书君", "念双", "如容", "书琴", "凡桃", "慧月", "梦晨", "韵诗", "冰之", "子菡", "依云", + "弘亮", "瀚彭", "柔怀", "香天", "春琳", "璞玉", "海儿", "芮美", "清怡", "绿凝", "承教", + "嫣然", "碧白", "丹秋", "德宇", "英睿", "曼婉", "敏丽", "忆秋", "暖暖", "良材", "颖颖", + "乐圣", "俊楚", "俊楠", "元容", "雁兰", "白秋", "夜梅", "德容", "子萱", "秋华", "蓝尹", + "醉卉", "攸然", "天曼", "锐藻", "辰沛", "文林", "思佳", "夜梦", "泽恩", "雨泽", "望雅", + "绮琴", "成化", "访曼", "弘伟", "以蕊", "莘莘", "秋玉", "水风", "正初", "海冬", "浩博", + "梓楠", "嘉树", "德寿", "文柏", "同方", "新苗", "修敏", "翠霜", "月天", "念瑶", "熙熙", + "宛筠", "梦月", "英韶", "香馨", "吉星", "桂华", "琇晶", "博学", "海凡", "静美", "宏峻", + "丽姝", "岚岚", "清悦", "天材", "昆颉", "秋珊", "爰美", "雁凡", "思远", "修文", "梓榆", + "易真", "思迪", "朝雨", "高卓", "文栋", "琼怡", "丽姿", "博简", "彦昌", "秋双", "琼思", + "璞瑜", "锐智", "冷之", "昕雨", "柔惠", "昭君", "阳荣", "怀玉", "昊硕", "泽惠", "博实", + "以旋", "煜祺", "驰翰", "博容", "翔飞", "明知", "向薇", "向文", "建华", "傲丝", "康宁", + "力勤", "芮悦", "乐音", "平莹", "雅凡", "成双", "璠瑜", "和雅", "萌阳", "霞月", "依辰", + "康安", "彭薄", "新荣", "惜天", "颖馨", "玟玉", "含芙", "冷亦", "玲然", "妞妞", "云逸", + "玄雅", "寄真", "娇洁", "悦心", "昕靓", "骞骞", "飞烟", "傲之", "仪文", "又亦", "高原", + "旭尧", "陶宁", "杏儿", "星阑", "湛雨", "芝英", "妙婧", "采波", "修明", "浦和", "素洁", + "陶宜", "俊誉", "峻熙", "颖秀", "婷美", "韵流", "安平", "曼安", "恨蝶", "子蕙", "兴国", + "听芹", "昊磊", "旻骞", "白竹", "吉月", "傲云", "平萱", "小之", "向明", "英飙", "珍丽", + "雅爱", "映阳", "静恬", "令暎", "以晴", "湛霞", "伟彦", "曼容", "惜香", "心宜", "布凡", + "悦怡", "其雨", "飞光", "子薇", "亦丝", "晨涛", "飞兰", "诗蕊", "绍祺", "欣笑", "敏达", + "冬灵", "山芙", "安康", "典雅", "和静", "歌阑", "萍雅", "若骞", "怜烟", "灵阳", "梦桃", + "风华", "萧玉", "昊天", "湛静", "成周", "建同", "曼寒", "永福", "玄静", "谷秋", "梦桐", + "流如", "思烟", "骞魁", "幼荷", "承望", "成和", "小溪", "正卿", "语芹", "向晨", "诗文", + "优悠", "尔丝", "梧桐", "优悦", "忆安", "白筠", "晓灵", "倩美", "伟志", "长娟", "英奕", + "诗蕾", "清懿", "刚捷", "悦恺", "凌波", "清舒", "亦云", "白安", "星雨", "飞燕", "林楠", + "忻畅", "圣杰", "彦杉", "振凯", "映雁", "丹寒", "钰凯", "子明", "子昂", "家馨", "雁卉", + "平蓝", "听荷", "映雪", "晏然", "乐天", "白容", "访梦", "景浩", "恨桃", "熙华", "暖梦", + "书白", "箫笛", "晴波", "馨香", "和韵", "含莲", "琳芳", "安彤", "子晋", "秀隽", "桐华", + "映真", "尔云", "梓欣", "幼菱", "英秀", "季萌", "孤菱", "秀雅", "听莲", "书雁", "曼岚", + "韶丽", "丽容", "寻冬", "嘉言", "灵雨", "孤萍", "巍奕", "寒雁", "流婉", "奇文", "慕诗", + "以松", "锦文", "依然", "丝微", "怡然", "弘光", "静慧", "雯丽", "幼萱", "芙蓉", "和硕", + "音仪", "君昊", "修杰", "水竹", "寻凝", "清芬", "骊红", "星睿", "令枫", "丹山", "雨伯", + "代柔", "润丽", "骞尧", "余妍", "觅晴", "安翔", "颜骏", "念雁", "舒畅", "和顺", "安志", + "余馥", "盼波", "春雪", "俊语", "思凡", "春雨", "晓兰", "诗晗", "和颂", "高畅", "平文", + "寄风", "玉韵", "玉石", "向松", "俊民", "芬芬", "家骏", "景中", "雪漫", "湛颖", "玉堂", + "萍韵", "白山", "山菡", "温纶", "昊穹", "沈然", "阳文", "韶仪", "以柳", "嘉誉", "戈雅", + "安怡", "斯文", "夏波", "弘量", "芳懿", "昊空", "新蕾", "元纬", "念真", "浩阔", "秋阳", + "雅珺", "和风", "代桃", "今歌", "念霜", "念露", "华彩", "海瑶", "言心", "骏年", "雅可", + "英媛", "凌丝", "新文", "晓凡", "冠玉", "梦槐", "叶欣", "晨潍", "依凝", "俊豪", "德庸", + "雨信", "斯斯", "晓燕", "振华", "琼芳", "坚成", "问丝", "友灵", "岚彩", "振博", "惜筠", + "阳旭", "冰冰", "华美", "代梅", "绮露", "痴海", "晨轩", "旭鹏", "翰音", "溪澈", "元绿", + "平春", "运诚", "秋白", "雅琴", "昕妤", "歌韵", "妮娜", "令梓", "令梅", "如彤", "胤骞", + "灵韵", "玮琪", "香岚", "北晶", "琼英", "冰凡", "若山", "翔宇", "晨辰", "永宁", "晴丽", + "顺美", "逸美", "觅松", "高阳", "平晓", "瑞绣", "昆宇", "玲玲", "开畅", "玲珑", "宜年", + "嘉歆", "骊美", "清莹", "永安", "紫丝", "优扬", "浩皛", "志学", "江雪", "华翰", "初蓝", + "语蓉", "银河", "芳芳", "静芙", "含蕊", "晨濡", "璇娟", "密如", "惜寒", "映颖", "又儿", + "涵涤", "伟懋", "柳思", "如心", "元彤", "岚翠", "鸿波", "芳苓", "俊贤", "阳晖", "野云", + "锦曦", "康平", "闲丽", "乐章", "乐童", "涵润", "玲琅", "雨灵", "婉柔", "茗雪", "兰娜", + "涵涵", "怜南", "昊宇", "盼丹", "薇歌", "含文", "成益", "翰墨", "闳丽", "黛娥", "元龙", + "飞双", "飞珍", "觅柔", "向梦", "宏恺", "梓洁", "幼旋", "嘉许", "迎波", "瑞彩", "傲儿", + "思卉", "新晴", "建白", "秋露", "紫云", "永寿", "溶溶", "怀雁", "凝洁", "玲琳", "蕴涵", + "鹤梦", "贞怡", "瑶岑", "博延", "思博", "芬菲", "秀颖", "智渊", "元德", "芳荃", "学文", + "语蕊", "诗柳", "睿广", "芳茵", "靖荷", "逸思", "弘化", "景辉", "元忠", "景澄", "高雅", + "翰飞", "阳曦", "映天", "长岳", "伟才", "桃雨", "芸芸", "才俊", "天欣", "旭彬", "冬卉", + "夏之", "阳曜", "芷若", "雅唱", "歌飞", "晶滢", "运洁", "怜珊", "宏胜", "蕙兰", "志尚", + "湛娟", "嘉谊", "凡波", "语薇", "方方", "乐安", "傲冬", "凝海", "元思", "莹莹", "雅畅", + "凯歌", "国源", "寻双", "新曦", "怜双", "芸若", "正阳", "尔烟", "菁英", "朗宁", "羽彤", + "未央", "弘博", "飞瑶", "玄穆", "芸茗", "莺莺", "阳朔", "新月", "鑫鹏", "诗桃", "乐容", + "平松", "寅骏", "轩秀", "妮子", "夏云", "慧语", "晓博", "乐家", "听春", "幼晴", "好慕", + "迎海", "香巧", "丹红", "哲丽", "丰羽", "依玉", "珠轩", "雪儿", "珠佩", "宇航", "运浩", + "弘厚", "芳菲", "梓涵", "海阳", "寻琴", "世英", "涵亮", "雨兰", "孤晴", "寒天", "元恺", + "思琪", "景逸", "小凝", "昆峰", "映秋", "璇子", "宾实", "含景", "芷荷", "柔蔓", "熙阳", + "隽雅", "思琳", "勇军", "如意", "蕊珠", "依珊", "伟茂", "睿彤", "巧风", "振锐", "正雅", + "添智", "雪兰", "向槐", "溪儿", "光耀", "从波", "晶辉", "学智", "秀妮", "鹏池", "曼彤", + "灵秀", "雨凝", "敏博", "智伟", "凝丝", "海白", "新林", "康德", "博耘", "娟丽", "凝丹", + "灵秋", "初晴", "唱月", "亦凝", "雨燕", "德惠", "巧夏", "娇然", "沛儿", "易容", "语晨", + "寒香", "开霁", "高韵", "菀菀", "正真", "怡君", "春妤", "尔冬", "雪冰", "睿德", "冰双", + "冰珍", "子楠", "顺慈", "嘉泽", "红艳", "迎丝", "鸿云", "晗玥", "秋颖", "晓君", "新柔", + "山晴", "乐山", "贤惠", "吉欣", "菁菁", "俊人", "恬欣", "依琴", "星驰", "丹彤", "正青", + "俏丽", "秀娟", "梓云", "春姝", "忆彤", "森莉", "海雪", "凝云", "青文", "嘉赐", "睿思", + "依瑶", "佳妍", "初曼", "荣轩", "和安", "兴学", "敏叡", "寄容", "弘和", "红英", "凡之", + "怡和", "雁露", "怡璐", "秀婉", "景焕", "雅隽", "春娇", "晓瑶", "孤松", "宏才", "浩壤", + "巧香", "和宜", "琳晨", "幻枫", "兴安", "瀚文", "绢子", "幼枫", "半芹", "文赋", "欣彩", + "青旋", "欣彤", "逸致", "沛凝", "晗琴", "心思", "晶灵", "茂学", "心怡", "翠岚", "宏扬", + "冷玉", "运乾", "睿聪", "欣美", "长平", "诗槐", "茂实", "丹翠", "宇荫", "鹏赋", "浩大", + "秀媛", "友卉", "秀媚", "以欣", "幼柏", "新梅", "清昶", "嘉淑", "凯泽", "雅霜", "韫玉", + "傲南", "叶丰", "初蝶", "听枫", "升荣", "香彤", "欣德", "芳蔼", "学林", "冷珍", "清晖", + "夜云", "天泽", "芳蕤", "问儿", "驰文", "华芝", "安荷", "昆鹏", "飞阳", "叶丹", "白翠", + "盈盈", "康胜", "痴灵", "若彤", "玉宇", "访波", "青易", "成天", "高飞", "芳蕙", "芷蓝", + "鸿轩", "梦泽", "鹏海", "傲玉", "俊侠", "成礼", "美曼", "从丹", "醉香", "幻桃", "瀚昂", + "雅静", "凌兰", "山蝶", "蓉蓉", "永年", "俊迈", "三春", "秀竹", "双玉", "恬谧", "语蝶", + "骊艳", "俊达", "鹏涛", "雅青", "玉宸", "安莲", "星宇", "贞芳", "怡畅", "天赋", "鸿达", + "飞白", "珊珊", "问兰", "震轩", "欣怡", "友珊", "宏茂", "俊远", "书竹", "语林", "初柔", + "晓畅", "嘉丽", "淑贞", "幻梅", "哲瀚", "鸿运", "映安", "又琴", "昆纬", "鸿远", "可佳", + "靖易", "欣怿", "永康", "含桃", "雨华", "春竹", "翰学", "昆纶", "初柳", "雨南", "淑贤", + "华茂", "晴照", "元良", "思嘉", "丽思", "雍雅", "从云", "若翠", "雪卉", "烨赫", "鸿信", + "小珍", "凝远", "语柔", "文丽", "怜阳", "乐巧", "芷文", "振国", "半莲", "嘉云", "俊逸", + "文乐", "修诚", "睿慈", "丝萝", "山柳", "音华", "亦玉", "秀筠", "妙思", "经纬", "骊英", + "语柳", "灵安", "端雅", "慧丽", "夏烟", "问凝", "水彤", "映寒", "西华", "芳春", "雅韵", + "安萱", "友琴", "心愫", "雅韶", "珉瑶", "炳君", "经纶", "欢悦", "旎旎", "霓云", "真洁", + "俊健", "鸣玉", "子欣", "飞雨", "鹏举", "元芹", "飞雪", "华荣", "乃心", "天路", "欣悦", + "心慈", "弘阔", "灵寒", "修谨", "世敏", "瑞芝", "海颖", "温茂", "英纵", "雨双", "雨珍", + "青曼", "盼兰", "梓倩", "力夫", "骊茹", "绿夏", "锐泽", "修永", "友瑶", "怡嘉", "元英", + "玉山", "慧云", "古兰", "翠巧", "韶华", "小琴", "珑玲", "彗云", "玄素", "晶燕", "新觉", + "月怡", "娴淑", "霞赩", "瑜英", "贝莉", "国兴", "恺歌", "素华", "小瑜", "曜文", "浩穰", + "雯华", "碧巧", "河灵", "娅玟", "雪珍", "鹏云", "雪珊", "康成", "易巧", "艳丽", "梦丝", + "静晨", "雁风", "山梅", "珍瑞", "怜雪", "思雅", "寻雪", "端静", "志强", "语梦", "思雁", + "正奇", "夏兰", "宾鸿", "欣愉", "凯乐", "文滨", "昌黎", "俊郎", "苒苒", "骏英", "承泽", + "笑卉", "涵煦", "雨琴", "采南", "嘉佑", "思雨", "痴凝", "梦之", "笑南", "博艺", "愉婉", + "乐康", "正祥", "念寒", "辰君", "自强", "沛珊", "英彦", "依白", "青枫", "高驰", "驰月", + "文漪", "月悦", "家美", "天亦", "谷翠", "妙意", "冬雁", "睿才", "弘雅", "惠美", "梦云", + "云霞", "尔琴", "思真", "嘉澍", "青柏", "锦欣", "司辰", "冬雪", "弘益", "凡灵", "茹雪", + "弘盛", "同济", "子民", "云露", "辰钊", "妍芳", "文轩", "真一", "骊萍", "静曼", "海女", + "修洁", "丰茂", "雪瑶", "娜兰", "永怡", "晏静", "永思", "恨之", "姗姗", "甘泽", "宇文", + "智刚", "弘图", "嘉运", "惠心", "采珊", "凝然", "奇正", "鸿煊", "鸿光", "修贤", "水悦", + "竹雨", "元菱", "翠绿", "善思", "依霜", "珺俐", "春岚", "蓓蕾", "伟晔", "雯君", "恨云", + "勇锐", "慕凝", "晨璐", "晓霜", "鸿熙", "靖柏", "良俊", "靖柔", "辰铭", "建章", "沈雅", + "南莲", "晓露", "悠柔", "仙仪", "海秋", "烨伟", "千易", "可儿", "彭泽", "英耀", "易绿", + "浩宕", "合乐", "天佑", "晨钰", "饮月", "问玉", "姝好", "绮山", "慧俊", "芳林", "玮奇", + "勇男", "品韵", "静枫", "锦诗", "琇云", "凝冬", "冰真", "明德", "雅香", "自怡", "昌翰", + "秋寒", "睿范", "骊蓉", "和平", "从灵", "滢渟", "景同", "鹏运", "悦来", "凡儿", "山槐", + "兴平", "承业", "乐心", "晗雨", "半蕾", "辰锟", "智勇", "滨海", "颖慧", "紫南", "静柏", + "宏放", "红旭", "明志", "曜曦", "青梦", "雅秀", "如蓉", "乐志", "闲华", "云韶", "芷蝶", + "代丝", "言文", "兴庆", "安易", "真仪", "君豪", "彤云", "珠玉", "飞飙", "宛菡", "彭越", + "紫玉", "流惠", "安春", "俊爽", "欣艳", "沈靖", "建安", "奇水", "金玉", "绿竹", "乐怡", + "怀寒", "沈静", "英悟", "冷雁", "高寒", "安晏", "浓绮", "盈秀", "瑜蓓", "以丹", "运凡", + "傲白", "姣妍", "修为", "运凯", "竹韵", "俊力", "冷雪", "醉山", "星鹏", "雅娴", "丽芳", + "虹玉", "力学", "菀柳", "天逸", "囡囡", "妙芙", "骊文", "新语", "知睿", "景铄", "霞辉", + "宏旷", "以云", "才哲", "华藏", "君洁", "滢滢", "曦晨", "冷霜", "香芹", "南蓉", "浩岚", + "乐悦", "星纬", "彭丹", "云飞", "雅媚", "姣姣", "叶农", "菊月", "傲雪", "温文", "怀山", + "瑜敏", "彭湃", "紫琼", "若芳", "又青", "心菱", "英慧", "和美", "开宇", "辰阳", "尔阳", + "寄翠", "从冬", "慕卉", "念巧", "傲霜", "曜栋", "婉淑", "君浩", "思天", "项明", "金鑫", + "高岑", "欣荣", "文光", "童童", "云天", "小雨", "茂彦", "乐意", "嘉熙", "若英", "锐达", + "和志", "华晖", "从凝", "逸明", "鹏煊", "兴德", "燕珺", "小雯", "晶瑶", "承载", "烨烁", + "婉清", "锐进", "曲文", "依风", "白莲", "弘壮", "刚毅", "元旋", "子丹", "尔白", "芊丽", + "茂德", "小霜", "海宁", "鸿卓", "鸿博", "韶阳", "辰皓", "波涛", "修伟", "贝晨", "千柔", + "逸春", "咏德", "觅丹", "高峯", "弘大", "歆美", "兴怀", "水芸", "高峰", "痴瑶", "晟睿", + "南蕾", "烨烨", "雨雪", "晓夏", "访烟", "微月", "丹萱", "千柳", "密思", "恺乐", "阳波", + "婉丽", "和怡", "晏如", "震博", "元明", "咏志", "兴思", "雨真", "香莲", "以轩", "高峻", + "天元", "阳泽", "锐逸", "尔雅", "德明", "承运", "智鑫", "德昌", "玉龙", "博敏", "烨然", + "职君", "飞驰", "俊友", "晴画", "夏瑶", "允晨", "笑阳", "雅宁", "俊发", "沛白", "惜芹", + "诗丹", "夏璇", "冰夏", "红螺", "迎南", "白萱", "子亦", "新洁", "学民", "沙雨", "湛恩", + "妙菡", "宏朗", "咏思", "运升", "博文", "香菱", "英才", "涵瑶", "安柏", "情文", "运华", + "醉巧", "华月", "访儿", "谷芹", "秋巧", "雅安", "春绿", "烨煜", "觅云", "丝柳", "信然", + "梓玥", "尔真", "采白", "经艺", "静槐", "雅容", "梦兰", "君丽", "蕴和", "淑然", "和悌", + "俊名", "琛丽", "和悦", "思娜", "望慕", "鹤轩", "凝珍", "君之", "梓珊", "刚豪", "语诗", + "曼蔓", "暄玲", "修远", "善芳", "夜卉", "香萱", "夜南", "如曼", "淑兰", "馥芬", "玉怡", + "烨熠", "施诗", "沛雯", "若菱", "睿敏", "雅寒", "秀美", "雁山", "依秋", "彦灵", "乐成", + "婉仪", "水荷", "泰河", "飞章", "访冬", "冰香", "睿文", "夜玉", "嘉勋", "可可", "和惬", + "凯凯", "运珊", "冠宇", "光明", "翰翮", "笑雯", "巧绿", "博易", "梓琬", "南晴", "梦凡", + "代灵", "姮娥", "凝琴", "博明", "娅静", "凡双", "宜春", "运珧", "曼文", "长莹", "桂帆", + "德曜", "昊苍", "运发", "子轩", "康时", "雨石", "毅然", "英范", "芮欢", "芮欣", "辰韦", + "明艳", "昊英", "理全", "刚洁", "长菁", "振宇", "平乐", "安梦", "立群", "如松", "运珹", + "绮彤", "浩广", "涵畅", "忆敏", "恬然", "又夏", "梓瑶", "菲菲", "梓璐", "银瑶", "春翠", + "望舒", "德本", "思嫒", "乐芸", "睿明", "俊哲", "腾逸", "子辰", "绮美", "妍晨", "音韵", + "半梅", "佳美", "昌茂", "飞宇", "鸿哲", "兴腾", "喜悦", "问雁", "暄和", "如柏", "斯乔", + "忆文", "谷菱", "赞怡", "凌雪", "子濯", "新之", "元蝶", "泽语", "白薇", "含海", "晓骞", + "馨荣", "乐英", "嘉玉", "念念", "文华", "阳云", "樱花", "承允", "苑杰", "奇伟", "从珊", + "翠芙", "同光", "泽民", "惜萍", "元枫", "宛曼", "彬炳", "野雪", "隽巧", "彬郁", "叶吉", + "惜萱", "柔谨", "凌霜", "学海", "孟乐", "又香", "绮怀", "绮思", "依童", "丽文", "今瑶", + "三诗", "飞尘", "雅素", "小夏", "嘉珍", "怀绿", "侠骞", "智阳", "俊喆", "鸿畅", "秋彤", + "晴雪", "修然", "佳思", "成弘", "珠雨", "鸿畴", "梅雪", "幻丝", "锐利", "凌青", "紫雪", + "涵阳", "琼诗", "若蕊", "怜容", "水蓉", "泰清", "赞悦", "元柳", "香薇", "松雪", "水蓝", + "艳卉", "晴霞", "兰芝", "松雨", "幼丝", "运锋", "乐荷", "思宸", "悦欣", "尔风", "星腾", + "雪风", "白易", "语海", "会欣", "香旋", "筠溪", "兰芳", "盼雁", "阳伯", "天华", "若薇", + "荷珠", "妙旋", "翠茵", "孤丹", "书意", "梅青", "晓筠", "珺琦", "莺语", "晶霞", "梦华", + "晨风", "良吉", "奇迈", "烨华", "忻忻", "斯伯", "以冬", "北辰", "文君", "令燕", "秋翠", + "芸欣", "正平", "珺琪", "兰若", "嘉瑞", "闵雨", "骏桀", "成龙", "韵磬", "建弼", "含之", + "怡宁", "兰英", "天玉", "淼淼", "盼盼", "淑华", "竹筱", "谷蓝", "慧君", "翠荷", "佳悦", + "茂才", "水蕊", "虹雨", "灵慧", "柔洁", "泽洋", "阳辉", "孤云", "妙春", "秀慧", "学义", + "玉成", "梦玉", "夏雪", "湛芳", "闲静", "文瑞", "香春", "语丝", "文瑶", "初之", "佳惠", + "华楚", "书慧", "若星", "坚诚", "含云", "半槐", "信厚", "冰安", "愉心", "浩思", "奇逸", + "宣朗", "惜蕊", "谷蕊", "芮波", "幼仪", "听云", "妙晴", "可嘉", "力强", "建德", "长文", + "湛英", "夏真", "敏学", "凝阳", "忆曼", "碧莹", "思山" + }; - public static String getEnName() { - String head = EN_FIRST_LIST.get((int) (Math.random() * EN_FIRST_LIST.size())); - String tail = EN_LAST_LIST.get((int) (Math.random() * EN_LAST_LIST.size())); - return head + tail; - } + /** + * 中文名词 + */ + public static final String[] CN_NOUN = { + "凉面", "便当", "毛豆", "花生", "可乐", "灯泡", "野狼", "背包", "眼神", "缘分", "雪碧", + "人生", "牛排", "蚂蚁", "飞鸟", "灰狼", "斑马", "汉堡", "悟空", "巨人", "绿茶", "大碗", + "墨镜", "魔镜", "煎饼", "月饼", "月亮", "星星", "芝麻", "啤酒", "玫瑰", "大叔", "小伙", + "太阳", "树叶", "芹菜", "黄蜂", "蜜粉", "蜜蜂", "信封", "西装", "外套", "裙子", "大象", + "猫咪", "母鸡", "路灯", "蓝天", "白云", "星月", "彩虹", "微笑", "摩托", "板栗", "高山", + "大地", "大树", "砖头", "楼房", "水池", "鸡翅", "蜻蜓", "红牛", "咖啡", "枕头", "大船", + "诺言", "钢笔", "刺猬", "天空", "飞机", "大炮", "冬天", "洋葱", "春天", "夏天", "秋天", + "冬日", "航空", "毛衣", "豌豆", "黑米", "玉米", "眼睛", "老鼠", "白羊", "帅哥", "美女", + "季节", "鲜花", "服饰", "裙子", "秀发", "大山", "火车", "汽车", "歌曲", "舞蹈", "老师", + "导师", "方盒", "大米", "麦片", "水杯", "水壶", "手套", "鞋子", "鼠标", "手机", "电脑", + "书本", "奇迹", "身影", "香烟", "夕阳", "台灯", "宝贝", "未来", "皮带", "钥匙", "心锁", + "故事", "花瓣", "滑板", "画笔", "画板", "学姐", "店员", "电源", "饼干", "宝马", "过客", + "大白", "时光", "石头", "钻石", "河马", "犀牛", "西牛", "绿草", "抽屉", "柜子", "往事", + "寒风", "路人", "橘子", "耳机", "鸵鸟", "朋友", "苗条", "铅笔", "钢笔", "硬币", "热狗", + "大侠", "御姐", "萝莉", "毛巾", "期待", "盼望", "白昼", "黑夜", "大门", "黑裤", "哑铃", + "板凳", "枫叶", "荷花", "乌龟", "衬衫", "大神", "草丛", "早晨", "心情", "茉莉", "流沙", + "蜗牛", "猎豹", "棒球", "篮球", "乐曲", "电话", "网络", "世界", "中心", "老虎", "鸭子", + "羽毛", "翅膀", "外套", "丝袜", "书包", "钢笔", "冷风", "烤鸡", "大雁", "音响", "招牌", + "冰棍", "帽子", "菠萝", "蛋挞", "香水", "吐司", "溪流", "黄豆", "樱桃", "花卷", "荔枝", + "镜子", "曲奇", "酒窝", "紫菜", "金鱼", "柚子", "果汁", "项链", "煎蛋", "唇彩", "戒指", + "雪糕", "睫毛", "铃铛", "手链", "香氛", "红酒", "月光", "酸奶", "蜡烛", "糖豆", "薯片", + "口红", "豆芽", "发箍", "发卡", "发夹", "发带", "铃铛", "冬瓜", "香菇", "短靴", "草莓", + "柠檬", "月饼", "百合", "纸鹤", "云朵", "芒果", "面包", "海燕", "龙猫", "唇膏", "鞋垫", + "黑猫", "白猫", "金毛", "山水", "音响", "香蕉", "苹果", "鲤鱼", "鳗鱼", "鹦鹉", "袋鼠", + "鲸鱼", "落日", "东风", "屋子", "创意", "报道", "下巴", "面子", "迷宫", "雪山", "沙子", + "自行车", "保温杯", "数据线", "机器猫", "电灯胆", "白开水", "自行车", "钢铁侠", "仙人掌", + "战斗机", "冥王星", "八宝粥", "胡萝卜", "小鸽子", "小蝴蝶", "爆米花", "泥猴桃", "小鸭子", + "小海豚", "日记本", "小熊猫", "小懒猪", "小懒虫", "百褶裙", "帆布鞋", "火龙果", "奇异果", + "金针菇", "小松鼠", "小虾米", "小土豆", "高跟鞋", "银耳汤", "咖啡豆", "小蜜蜂", "小蚂蚁", + "棉花糖", "向日葵", "水蜜桃", "小蝴蝶", "小刺猬", "小丸子", "指甲油", "康乃馨", "超短裙", + "乌冬面", "冰淇淋", "棒棒糖", "长颈鹿", "小馒头", "小笼包", "小甜瓜", "小兔子", "含羞草", + "睫毛膏", "小蘑菇", "跳跳糖", "小白菜", "小天鹅", "小猫咪", "万宝路", "哈密瓜", "梅花鹿" - public static String getCnName() { - String head = CN_LAST_NAME.get((int) (Math.random() * CN_LAST_NAME.size())); - String tail = CN_FIRST_NAME.get((int) (Math.random() * CN_FIRST_NAME.size())); - return head + tail; - } + }; - public static void initEN_FIRST_LIST() { - EN_FIRST_LIST.add("Ter"); - EN_FIRST_LIST.add("Wind"); - EN_FIRST_LIST.add("Buck"); - EN_FIRST_LIST.add("Glo"); - EN_FIRST_LIST.add("Ray"); - EN_FIRST_LIST.add("Black"); - EN_FIRST_LIST.add("Bright"); - EN_FIRST_LIST.add("Claire"); - EN_FIRST_LIST.add("Blithe"); - EN_FIRST_LIST.add("O'Ca"); - EN_FIRST_LIST.add("Rams"); - EN_FIRST_LIST.add("Dawn"); - EN_FIRST_LIST.add("Kirk"); - EN_FIRST_LIST.add("Beck"); - EN_FIRST_LIST.add("Mill"); - EN_FIRST_LIST.add("Hob"); - EN_FIRST_LIST.add("Hod"); - EN_FIRST_LIST.add("Fitch"); - EN_FIRST_LIST.add("Wins"); - EN_FIRST_LIST.add("Gals"); - EN_FIRST_LIST.add("Boyd"); - EN_FIRST_LIST.add("Myr"); - EN_FIRST_LIST.add("Tours"); - EN_FIRST_LIST.add("Hoo"); - EN_FIRST_LIST.add("Dave"); - EN_FIRST_LIST.add("Steele"); - EN_FIRST_LIST.add("Ruth"); - EN_FIRST_LIST.add("Brian"); - EN_FIRST_LIST.add("Dier"); - EN_FIRST_LIST.add("Mike"); - EN_FIRST_LIST.add("Hoy"); - EN_FIRST_LIST.add("Piers"); - EN_FIRST_LIST.add("Lind"); - EN_FIRST_LIST.add("Bill"); - EN_FIRST_LIST.add("Booth"); - EN_FIRST_LIST.add("A"); - EN_FIRST_LIST.add("Ab"); - EN_FIRST_LIST.add("Ser"); - EN_FIRST_LIST.add("June"); - EN_FIRST_LIST.add("Ac"); - EN_FIRST_LIST.add("B"); - EN_FIRST_LIST.add("Ad"); - EN_FIRST_LIST.add("E"); - EN_FIRST_LIST.add("F"); - EN_FIRST_LIST.add("Brews"); - EN_FIRST_LIST.add("Ag"); - EN_FIRST_LIST.add("Chil"); - EN_FIRST_LIST.add("Flo"); - EN_FIRST_LIST.add("I"); - EN_FIRST_LIST.add("Elroy"); - EN_FIRST_LIST.add("Al"); - EN_FIRST_LIST.add("L"); - EN_FIRST_LIST.add("Tha"); - EN_FIRST_LIST.add("An"); - EN_FIRST_LIST.add("Paul"); - EN_FIRST_LIST.add("O"); - EN_FIRST_LIST.add("Beer"); - EN_FIRST_LIST.add("Hutt"); - EN_FIRST_LIST.add("The"); - EN_FIRST_LIST.add("Ar"); - EN_FIRST_LIST.add("Leif"); - EN_FIRST_LIST.add("As"); - EN_FIRST_LIST.add("Baird"); - EN_FIRST_LIST.add("S"); - EN_FIRST_LIST.add("At"); - EN_FIRST_LIST.add("Au"); - EN_FIRST_LIST.add("U"); - EN_FIRST_LIST.add("Stra"); - EN_FIRST_LIST.add("Jud"); - EN_FIRST_LIST.add("Tho"); - EN_FIRST_LIST.add("Dia"); - EN_FIRST_LIST.add("Doug"); - EN_FIRST_LIST.add("God"); - EN_FIRST_LIST.add("Fast"); - EN_FIRST_LIST.add("Ba"); - EN_FIRST_LIST.add("Bea"); - EN_FIRST_LIST.add("Lyn"); - EN_FIRST_LIST.add("Walsh"); - EN_FIRST_LIST.add("Be"); - EN_FIRST_LIST.add("Dil"); - EN_FIRST_LIST.add("Lyt"); - EN_FIRST_LIST.add("Bi"); - EN_FIRST_LIST.add("Bel"); - EN_FIRST_LIST.add("Scrip"); - EN_FIRST_LIST.add("Jus"); - EN_FIRST_LIST.add("Ben"); - EN_FIRST_LIST.add("Gos"); - EN_FIRST_LIST.add("Gor"); - EN_FIRST_LIST.add("Bo"); - EN_FIRST_LIST.add("Hicks"); - EN_FIRST_LIST.add("Ber"); - EN_FIRST_LIST.add("Tris"); - EN_FIRST_LIST.add("Bet"); - EN_FIRST_LIST.add("Tif"); - EN_FIRST_LIST.add("Hale"); - EN_FIRST_LIST.add("Bes"); - EN_FIRST_LIST.add("Joan"); - EN_FIRST_LIST.add("Pad"); - EN_FIRST_LIST.add("Bu"); - EN_FIRST_LIST.add("Hearst"); - EN_FIRST_LIST.add("Wol"); - EN_FIRST_LIST.add("Reg"); - EN_FIRST_LIST.add("Woo"); - EN_FIRST_LIST.add("By"); - EN_FIRST_LIST.add("Pag"); - EN_FIRST_LIST.add("Tim"); - EN_FIRST_LIST.add("Pal"); - EN_FIRST_LIST.add("Crich"); - EN_FIRST_LIST.add("Todd"); - EN_FIRST_LIST.add("Pan"); - EN_FIRST_LIST.add("Cha"); - EN_FIRST_LIST.add("Sibyl"); - EN_FIRST_LIST.add("Ca"); - EN_FIRST_LIST.add("Bing"); - EN_FIRST_LIST.add("Par"); - EN_FIRST_LIST.add("Yves"); - EN_FIRST_LIST.add("Bran"); - EN_FIRST_LIST.add("Ce"); - EN_FIRST_LIST.add("Ade"); - EN_FIRST_LIST.add("Rex"); - EN_FIRST_LIST.add("Pau"); - EN_FIRST_LIST.add("Rey"); - EN_FIRST_LIST.add("Pay"); - EN_FIRST_LIST.add("Co"); - EN_FIRST_LIST.add("Brad"); - EN_FIRST_LIST.add("Sha"); - EN_FIRST_LIST.add("Stone"); - EN_FIRST_LIST.add("She"); - EN_FIRST_LIST.add("Need"); - EN_FIRST_LIST.add("Cu"); - EN_FIRST_LIST.add("Cy"); - EN_FIRST_LIST.add("Tess"); - EN_FIRST_LIST.add("North"); - EN_FIRST_LIST.add("Da"); - EN_FIRST_LIST.add("Christ"); - EN_FIRST_LIST.add("Frances"); - EN_FIRST_LIST.add("De"); - EN_FIRST_LIST.add("Gold"); - EN_FIRST_LIST.add("Di"); - EN_FIRST_LIST.add("Oisen"); - EN_FIRST_LIST.add("Do"); - EN_FIRST_LIST.add("Cis"); - EN_FIRST_LIST.add("Fox"); - EN_FIRST_LIST.add("Dean"); - EN_FIRST_LIST.add("Fow"); - EN_FIRST_LIST.add("Sid"); - EN_FIRST_LIST.add("Sig"); - EN_FIRST_LIST.add("Brooke"); - EN_FIRST_LIST.add("Du"); - EN_FIRST_LIST.add("Dy"); - EN_FIRST_LIST.add("Samp"); - EN_FIRST_LIST.add("Gra"); - EN_FIRST_LIST.add("Sin"); - EN_FIRST_LIST.add("Gre"); - EN_FIRST_LIST.add("Smed"); - EN_FIRST_LIST.add("Ed"); - EN_FIRST_LIST.add("Gri"); - EN_FIRST_LIST.add("Ef"); - EN_FIRST_LIST.add("Eg"); - EN_FIRST_LIST.add("Ei"); - EN_FIRST_LIST.add("Gro"); - EN_FIRST_LIST.add("O'Con"); - EN_FIRST_LIST.add("Bird"); - EN_FIRST_LIST.add("El"); - EN_FIRST_LIST.add("Em"); - EN_FIRST_LIST.add("Fors"); - EN_FIRST_LIST.add("Er"); - EN_FIRST_LIST.add("Holt"); - EN_FIRST_LIST.add("Es"); - EN_FIRST_LIST.add("Woolf"); - EN_FIRST_LIST.add("Eu"); - EN_FIRST_LIST.add("Field"); - EN_FIRST_LIST.add("Kris"); - EN_FIRST_LIST.add("Hub"); - EN_FIRST_LIST.add("Hud"); - EN_FIRST_LIST.add("Crai"); - EN_FIRST_LIST.add("Rho"); - EN_FIRST_LIST.add("Boyce"); - EN_FIRST_LIST.add("Fa"); - EN_FIRST_LIST.add("Hug"); - EN_FIRST_LIST.add("Hul"); - EN_FIRST_LIST.add("Fe"); - EN_FIRST_LIST.add("Hun"); - EN_FIRST_LIST.add("Lynch"); - EN_FIRST_LIST.add("Grant"); - EN_FIRST_LIST.add("Hum"); - EN_FIRST_LIST.add("Young"); - EN_FIRST_LIST.add("Kent"); - EN_FIRST_LIST.add("Bil"); - EN_FIRST_LIST.add("Fo"); - EN_FIRST_LIST.add("Bir"); - EN_FIRST_LIST.add("Hux"); - EN_FIRST_LIST.add("Pea"); - EN_FIRST_LIST.add("Joel"); - EN_FIRST_LIST.add("Peg"); - EN_FIRST_LIST.add("White"); - EN_FIRST_LIST.add("Fre"); - EN_FIRST_LIST.add("Pen"); - EN_FIRST_LIST.add("Cla"); - EN_FIRST_LIST.add("Ga"); - EN_FIRST_LIST.add("Ford"); - EN_FIRST_LIST.add("Nan"); - EN_FIRST_LIST.add("Per"); - EN_FIRST_LIST.add("Cle"); - EN_FIRST_LIST.add("Ge"); - EN_FIRST_LIST.add("Pet"); - EN_FIRST_LIST.add("Nat"); - EN_FIRST_LIST.add("John"); - EN_FIRST_LIST.add("Crane"); - EN_FIRST_LIST.add("Cly"); - EN_FIRST_LIST.add("Ode"); - EN_FIRST_LIST.add("Browne"); - EN_FIRST_LIST.add("Dob"); - EN_FIRST_LIST.add("Back"); - EN_FIRST_LIST.add("Kerr"); - EN_FIRST_LIST.add("Ha"); - EN_FIRST_LIST.add("Bach"); - EN_FIRST_LIST.add("He"); - EN_FIRST_LIST.add("Phil"); - EN_FIRST_LIST.add("Hood"); - EN_FIRST_LIST.add("Neil"); - EN_FIRST_LIST.add("Ever"); - EN_FIRST_LIST.add("Dol"); - EN_FIRST_LIST.add("Hi"); - EN_FIRST_LIST.add("Gun"); - EN_FIRST_LIST.add("Don"); - EN_FIRST_LIST.add("Pear"); - EN_FIRST_LIST.add("Gus"); - EN_FIRST_LIST.add("Ho"); - EN_FIRST_LIST.add("Guy"); - EN_FIRST_LIST.add("Dou"); - EN_FIRST_LIST.add("Hu"); - EN_FIRST_LIST.add("Mac"); - EN_FIRST_LIST.add("Troy"); - EN_FIRST_LIST.add("Mab"); - EN_FIRST_LIST.add("Doy"); - EN_FIRST_LIST.add("Hy"); - EN_FIRST_LIST.add("Mag"); - EN_FIRST_LIST.add("Tom"); - EN_FIRST_LIST.add("Morse"); - EN_FIRST_LIST.add("Bla"); - EN_FIRST_LIST.add("Mal"); - EN_FIRST_LIST.add("Hart"); - EN_FIRST_LIST.add("Swift"); - EN_FIRST_LIST.add("Man"); - EN_FIRST_LIST.add("Bell"); - EN_FIRST_LIST.add("Mar"); - EN_FIRST_LIST.add("Mau"); - EN_FIRST_LIST.add("Wilde"); - EN_FIRST_LIST.add("Mat"); - EN_FIRST_LIST.add("May"); - EN_FIRST_LIST.add("In"); - EN_FIRST_LIST.add("Max"); - EN_FIRST_LIST.add("Ir"); - EN_FIRST_LIST.add("Shaw"); - EN_FIRST_LIST.add("Beard"); - EN_FIRST_LIST.add("Bly"); - EN_FIRST_LIST.add("Phi"); - EN_FIRST_LIST.add("Ja"); - EN_FIRST_LIST.add("Je"); - EN_FIRST_LIST.add("Cof"); - EN_FIRST_LIST.add("Wyatt"); - EN_FIRST_LIST.add("Com"); - EN_FIRST_LIST.add("Col"); - EN_FIRST_LIST.add("Coo"); - EN_FIRST_LIST.add("Con"); - EN_FIRST_LIST.add("James"); - EN_FIRST_LIST.add("Jo"); - EN_FIRST_LIST.add("Cop"); - EN_FIRST_LIST.add("Cor"); - EN_FIRST_LIST.add("Cot"); - EN_FIRST_LIST.add("Cow"); - EN_FIRST_LIST.add("Ju"); - EN_FIRST_LIST.add("Croft"); - EN_FIRST_LIST.add("Jane"); - EN_FIRST_LIST.add("Son"); - EN_FIRST_LIST.add("Nel"); - EN_FIRST_LIST.add("Ka"); - EN_FIRST_LIST.add("Lan"); - EN_FIRST_LIST.add("Sou"); - EN_FIRST_LIST.add("Lam"); - EN_FIRST_LIST.add("Pit"); - EN_FIRST_LIST.add("Ke"); - EN_FIRST_LIST.add("Lar"); - EN_FIRST_LIST.add("Frank"); - EN_FIRST_LIST.add("Lat"); - EN_FIRST_LIST.add("New"); - EN_FIRST_LIST.add("Lau"); - EN_FIRST_LIST.add("Horn"); - EN_FIRST_LIST.add("Tra"); - EN_FIRST_LIST.add("Law"); - EN_FIRST_LIST.add("Snow"); - EN_FIRST_LIST.add("Tre"); - EN_FIRST_LIST.add("Als"); - EN_FIRST_LIST.add("Dry"); - EN_FIRST_LIST.add("Bob"); - EN_FIRST_LIST.add("Stowe"); - EN_FIRST_LIST.add("Brid"); - EN_FIRST_LIST.add("Chris"); - EN_FIRST_LIST.add("Tru"); - EN_FIRST_LIST.add("Thodore"); - EN_FIRST_LIST.add("Tate"); - EN_FIRST_LIST.add("Le"); - EN_FIRST_LIST.add("Gwen"); - EN_FIRST_LIST.add("Li"); - EN_FIRST_LIST.add("Yule"); - EN_FIRST_LIST.add("Bon"); - EN_FIRST_LIST.add("Alick"); - EN_FIRST_LIST.add("Saul"); - EN_FIRST_LIST.add("Lo"); - EN_FIRST_LIST.add("Rob"); - EN_FIRST_LIST.add("Rod"); - EN_FIRST_LIST.add("Bos"); - EN_FIRST_LIST.add("Lu"); - EN_FIRST_LIST.add("Deir"); - EN_FIRST_LIST.add("Bow"); - EN_FIRST_LIST.add("Ly"); - EN_FIRST_LIST.add("Meg"); - EN_FIRST_LIST.add("Vogt"); - EN_FIRST_LIST.add("Ron"); - EN_FIRST_LIST.add("Browning"); - EN_FIRST_LIST.add("Nell"); - EN_FIRST_LIST.add("Roo"); - EN_FIRST_LIST.add("Ma"); - EN_FIRST_LIST.add("Mel"); - EN_FIRST_LIST.add("Broad"); - EN_FIRST_LIST.add("Price"); - EN_FIRST_LIST.add("Eve"); - EN_FIRST_LIST.add("Jeames"); - EN_FIRST_LIST.add("Mc"); - EN_FIRST_LIST.add("Ros"); - EN_FIRST_LIST.add("Me"); - EN_FIRST_LIST.add("Mer"); - EN_FIRST_LIST.add("Mi"); - EN_FIRST_LIST.add("Wells"); - EN_FIRST_LIST.add("Roy"); - EN_FIRST_LIST.add("Kat"); - EN_FIRST_LIST.add("Ann"); - EN_FIRST_LIST.add("Drew"); - EN_FIRST_LIST.add("Walk"); - EN_FIRST_LIST.add("Giles"); - EN_FIRST_LIST.add("Cro"); - EN_FIRST_LIST.add("Mo"); - EN_FIRST_LIST.add("Finn"); - EN_FIRST_LIST.add("Quee"); - EN_FIRST_LIST.add("Chur"); - EN_FIRST_LIST.add("Kay"); - EN_FIRST_LIST.add("Sher"); - EN_FIRST_LIST.add("Berg"); - EN_FIRST_LIST.add("Mu"); - EN_FIRST_LIST.add("Cry"); - EN_FIRST_LIST.add("Phoe"); - EN_FIRST_LIST.add("Quen"); - EN_FIRST_LIST.add("My"); - EN_FIRST_LIST.add("Lamb"); - EN_FIRST_LIST.add("Na"); - EN_FIRST_LIST.add("Maltz"); - EN_FIRST_LIST.add("Ne"); - EN_FIRST_LIST.add("Dul"); - EN_FIRST_LIST.add("Ni"); - EN_FIRST_LIST.add("Glenn"); - EN_FIRST_LIST.add("Dun"); - EN_FIRST_LIST.add("Reade"); - EN_FIRST_LIST.add("No"); - EN_FIRST_LIST.add("Eips"); - EN_FIRST_LIST.add("Lea"); - EN_FIRST_LIST.add("Ny"); - EN_FIRST_LIST.add("Duke"); - EN_FIRST_LIST.add("Noah"); - EN_FIRST_LIST.add("Lee"); - EN_FIRST_LIST.add("Jac"); - EN_FIRST_LIST.add("Bra"); - EN_FIRST_LIST.add("Tur"); - EN_FIRST_LIST.add("Faulk"); - EN_FIRST_LIST.add("Lei"); - EN_FIRST_LIST.add("Tut"); - EN_FIRST_LIST.add("Len"); - EN_FIRST_LIST.add("Oc"); - EN_FIRST_LIST.add("Yvon"); - EN_FIRST_LIST.add("Jan"); - EN_FIRST_LIST.add("Leo"); - EN_FIRST_LIST.add("Og"); - EN_FIRST_LIST.add("Bert"); - EN_FIRST_LIST.add("Les"); - EN_FIRST_LIST.add("Shel"); - EN_FIRST_LIST.add("Ol"); - EN_FIRST_LIST.add("Shei"); - EN_FIRST_LIST.add("Bro"); - EN_FIRST_LIST.add("Lew"); - EN_FIRST_LIST.add("Sta"); - EN_FIRST_LIST.add("Jay"); - EN_FIRST_LIST.add("Or"); - EN_FIRST_LIST.add("Troll"); - EN_FIRST_LIST.add("Os"); - EN_FIRST_LIST.add("Bru"); - EN_FIRST_LIST.add("Ralph"); - EN_FIRST_LIST.add("Ste"); - EN_FIRST_LIST.add("Ot"); - EN_FIRST_LIST.add("Bald"); - EN_FIRST_LIST.add("Blan"); - EN_FIRST_LIST.add("Bry"); - EN_FIRST_LIST.add("Pa"); - EN_FIRST_LIST.add("Dunn"); - EN_FIRST_LIST.add("Reed"); - EN_FIRST_LIST.add("Pe"); - EN_FIRST_LIST.add("Bush"); - EN_FIRST_LIST.add("Theo"); - EN_FIRST_LIST.add("Sweet"); - EN_FIRST_LIST.add("Cooke"); - EN_FIRST_LIST.add("Pi"); - EN_FIRST_LIST.add("Cum"); - EN_FIRST_LIST.add("Bess"); - EN_FIRST_LIST.add("Po"); - EN_FIRST_LIST.add("Cur"); - EN_FIRST_LIST.add("Keith"); - EN_FIRST_LIST.add("Cliff"); - EN_FIRST_LIST.add("Gill"); - EN_FIRST_LIST.add("Demp"); - EN_FIRST_LIST.add("Pu"); - EN_FIRST_LIST.add("Hous"); - EN_FIRST_LIST.add("Poe"); - EN_FIRST_LIST.add("Mid"); - EN_FIRST_LIST.add("Mig"); - EN_FIRST_LIST.add("Grote"); - EN_FIRST_LIST.add("Spring"); - EN_FIRST_LIST.add("Pol"); - EN_FIRST_LIST.add("Abra"); - EN_FIRST_LIST.add("Pop"); - EN_FIRST_LIST.add("Mil"); - EN_FIRST_LIST.add("Ara"); - EN_FIRST_LIST.add("Sur"); - EN_FIRST_LIST.add("Por"); - EN_FIRST_LIST.add("Kel"); - EN_FIRST_LIST.add("Min"); - EN_FIRST_LIST.add("Ken"); - EN_FIRST_LIST.add("Kep"); - EN_FIRST_LIST.add("Bloom"); - EN_FIRST_LIST.add("Ian"); - EN_FIRST_LIST.add("Faithe"); - EN_FIRST_LIST.add("Sean"); - EN_FIRST_LIST.add("Fran"); - EN_FIRST_LIST.add("Ker"); - EN_FIRST_LIST.add("Bloor"); - EN_FIRST_LIST.add("Sails"); - EN_FIRST_LIST.add("Wheat"); - EN_FIRST_LIST.add("Arm"); - EN_FIRST_LIST.add("Key"); - EN_FIRST_LIST.add("Quil"); - EN_FIRST_LIST.add("Pull"); - EN_FIRST_LIST.add("Hill"); - EN_FIRST_LIST.add("Stan"); - EN_FIRST_LIST.add("Kath"); - EN_FIRST_LIST.add("Dodd"); - EN_FIRST_LIST.add("Ra"); - EN_FIRST_LIST.add("Quin"); - EN_FIRST_LIST.add("Lionel"); - EN_FIRST_LIST.add("Bron"); - EN_FIRST_LIST.add("Jones"); - EN_FIRST_LIST.add("Re"); - EN_FIRST_LIST.add("Ri"); - EN_FIRST_LIST.add("Bul"); - EN_FIRST_LIST.add("Josh"); - EN_FIRST_LIST.add("Clar"); - EN_FIRST_LIST.add("Bun"); - EN_FIRST_LIST.add("Wolf"); - EN_FIRST_LIST.add("Ro"); - EN_FIRST_LIST.add("Mans"); - EN_FIRST_LIST.add("Tout"); - EN_FIRST_LIST.add("Bur"); - EN_FIRST_LIST.add("But"); - EN_FIRST_LIST.add("Ru"); - EN_FIRST_LIST.add("Ry"); - EN_FIRST_LIST.add("Jef"); - EN_FIRST_LIST.add("Noel"); - EN_FIRST_LIST.add("Sa"); - EN_FIRST_LIST.add("Lil"); - EN_FIRST_LIST.add("Hag"); - EN_FIRST_LIST.add("Lin"); - EN_FIRST_LIST.add("Rus"); - EN_FIRST_LIST.add("Se"); - EN_FIRST_LIST.add("Hal"); - EN_FIRST_LIST.add("Jen"); - EN_FIRST_LIST.add("Han"); - EN_FIRST_LIST.add("Ham"); - EN_FIRST_LIST.add("Si"); - EN_FIRST_LIST.add("Jer"); - EN_FIRST_LIST.add("Har"); - EN_FIRST_LIST.add("Shir"); - EN_FIRST_LIST.add("Jes"); - EN_FIRST_LIST.add("So"); - EN_FIRST_LIST.add("Liz"); - EN_FIRST_LIST.add("Scott"); - EN_FIRST_LIST.add("Sains"); - EN_FIRST_LIST.add("Haw"); - EN_FIRST_LIST.add("Att"); - EN_FIRST_LIST.add("Haz"); - EN_FIRST_LIST.add("Hay"); - EN_FIRST_LIST.add("Su"); - EN_FIRST_LIST.add("Xan"); - EN_FIRST_LIST.add("Sy"); - EN_FIRST_LIST.add("Pri"); - EN_FIRST_LIST.add("Yale"); - EN_FIRST_LIST.add("Fitz"); - EN_FIRST_LIST.add("Crom"); - EN_FIRST_LIST.add("Strong"); - EN_FIRST_LIST.add("Ta"); - EN_FIRST_LIST.add("Harte"); - EN_FIRST_LIST.add("Swin"); - EN_FIRST_LIST.add("Leigh"); - EN_FIRST_LIST.add("Yvette"); - EN_FIRST_LIST.add("Te"); - EN_FIRST_LIST.add("Pru"); - EN_FIRST_LIST.add("Ti"); - EN_FIRST_LIST.add("Ives"); - EN_FIRST_LIST.add("Cyn"); - EN_FIRST_LIST.add("To"); - EN_FIRST_LIST.add("Aus"); - EN_FIRST_LIST.add("Gray"); - EN_FIRST_LIST.add("Ty"); - EN_FIRST_LIST.add("Syl"); - EN_FIRST_LIST.add("Wylde"); - EN_FIRST_LIST.add("Fred"); - EN_FIRST_LIST.add("Yonng"); - EN_FIRST_LIST.add("Free"); - EN_FIRST_LIST.add("Kim"); - EN_FIRST_LIST.add("Nor"); - EN_FIRST_LIST.add("Miles"); - EN_FIRST_LIST.add("Penn"); - EN_FIRST_LIST.add("Gal"); - EN_FIRST_LIST.add("Kip"); - EN_FIRST_LIST.add("Yea"); - EN_FIRST_LIST.add("Ward"); - EN_FIRST_LIST.add("Vaug"); - EN_FIRST_LIST.add("Keats"); - EN_FIRST_LIST.add("Kit"); - EN_FIRST_LIST.add("Long"); - EN_FIRST_LIST.add("Gas"); - EN_FIRST_LIST.add("Gar"); - EN_FIRST_LIST.add("Yed"); - EN_FIRST_LIST.add("Up"); - EN_FIRST_LIST.add("Wag"); - EN_FIRST_LIST.add("Holmes"); - EN_FIRST_LIST.add("Ur"); - EN_FIRST_LIST.add("Camp"); - EN_FIRST_LIST.add("Simp"); - EN_FIRST_LIST.add("Brown"); - EN_FIRST_LIST.add("Wal"); - EN_FIRST_LIST.add("Watt"); - EN_FIRST_LIST.add("Wan"); - EN_FIRST_LIST.add("Yer"); - EN_FIRST_LIST.add("Wright"); - EN_FIRST_LIST.add("Yet"); - EN_FIRST_LIST.add("Mark"); - EN_FIRST_LIST.add("Clare"); - EN_FIRST_LIST.add("War"); - EN_FIRST_LIST.add("Va"); - EN_FIRST_LIST.add("Wat"); - EN_FIRST_LIST.add("Greg"); - EN_FIRST_LIST.add("Funk"); - EN_FIRST_LIST.add("Bard"); - EN_FIRST_LIST.add("Way"); - EN_FIRST_LIST.add("Stel"); - EN_FIRST_LIST.add("Camil"); - EN_FIRST_LIST.add("Ve"); - EN_FIRST_LIST.add("Dutt"); - EN_FIRST_LIST.add("Clark"); - EN_FIRST_LIST.add("Vi"); - EN_FIRST_LIST.add("Toyn"); - EN_FIRST_LIST.add("Mond"); - EN_FIRST_LIST.add("Grey"); - EN_FIRST_LIST.add("Wood"); - EN_FIRST_LIST.add("Moi"); - EN_FIRST_LIST.add("Hed"); - EN_FIRST_LIST.add("Pul"); - EN_FIRST_LIST.add("Moll"); - EN_FIRST_LIST.add("Wa"); - EN_FIRST_LIST.add("Jean"); - EN_FIRST_LIST.add("Mol"); - EN_FIRST_LIST.add("Moo"); - EN_FIRST_LIST.add("Hugh"); - EN_FIRST_LIST.add("Mon"); - EN_FIRST_LIST.add("Stein"); - EN_FIRST_LIST.add("Jim"); - EN_FIRST_LIST.add("Hen"); - EN_FIRST_LIST.add("Bruce"); - EN_FIRST_LIST.add("Mor"); - EN_FIRST_LIST.add("Wh"); - EN_FIRST_LIST.add("Fan"); - EN_FIRST_LIST.add("Wi"); - EN_FIRST_LIST.add("Mot"); - EN_FIRST_LIST.add("Her"); - EN_FIRST_LIST.add("Pound"); - EN_FIRST_LIST.add("Wo"); - EN_FIRST_LIST.add("Hew"); - EN_FIRST_LIST.add("Wool"); - EN_FIRST_LIST.add("Green"); - EN_FIRST_LIST.add("Bart"); - EN_FIRST_LIST.add("Fay"); - EN_FIRST_LIST.add("Zim"); - EN_FIRST_LIST.add("Mick"); - EN_FIRST_LIST.add("Wy"); - EN_FIRST_LIST.add("Van"); - EN_FIRST_LIST.add("Word"); - EN_FIRST_LIST.add("Thorn"); - EN_FIRST_LIST.add("Sharp"); - EN_FIRST_LIST.add("Judd"); - EN_FIRST_LIST.add("Xa"); - EN_FIRST_LIST.add("Xe"); - EN_FIRST_LIST.add("Phyl"); - EN_FIRST_LIST.add("Matt"); - EN_FIRST_LIST.add("Twain"); - EN_FIRST_LIST.add("Gene"); - EN_FIRST_LIST.add("Dwight"); - EN_FIRST_LIST.add("Child"); - EN_FIRST_LIST.add("Carr"); - EN_FIRST_LIST.add("Carl"); - EN_FIRST_LIST.add("Smith"); - EN_FIRST_LIST.add("House"); - EN_FIRST_LIST.add("Lon"); - EN_FIRST_LIST.add("Ye"); - EN_FIRST_LIST.add("Mont"); - EN_FIRST_LIST.add("Gem"); - EN_FIRST_LIST.add("Lor"); - EN_FIRST_LIST.add("Lou"); - EN_FIRST_LIST.add("Ear"); - EN_FIRST_LIST.add("Jill"); - EN_FIRST_LIST.add("Geor"); - EN_FIRST_LIST.add("Wen"); - EN_FIRST_LIST.add("Stil"); - EN_FIRST_LIST.add("Wes"); - EN_FIRST_LIST.add("Wer"); - EN_FIRST_LIST.add("Za"); - EN_FIRST_LIST.add("Cook"); - EN_FIRST_LIST.add("Chad"); - EN_FIRST_LIST.add("Cleve"); - EN_FIRST_LIST.add("Grif"); - EN_FIRST_LIST.add("Ze"); - EN_FIRST_LIST.add("Cash"); - EN_FIRST_LIST.add("Cham"); - EN_FIRST_LIST.add("Joyce"); - EN_FIRST_LIST.add("More"); - EN_FIRST_LIST.add("Chan"); - EN_FIRST_LIST.add("Loui"); - EN_FIRST_LIST.add("Chap"); - EN_FIRST_LIST.add("Thom"); - EN_FIRST_LIST.add("Zo"); - EN_FIRST_LIST.add("Char"); - EN_FIRST_LIST.add("Chau"); - EN_FIRST_LIST.add("Maug"); - EN_FIRST_LIST.add("Priest"); - EN_FIRST_LIST.add("Maud"); - EN_FIRST_LIST.add("Zang"); - EN_FIRST_LIST.add("Crofts"); - EN_FIRST_LIST.add("Hil"); - EN_FIRST_LIST.add("Fel"); - EN_FIRST_LIST.add("Dai"); - EN_FIRST_LIST.add("Dal"); - EN_FIRST_LIST.add("Dan"); - EN_FIRST_LIST.add("Cons"); - EN_FIRST_LIST.add("Veb"); - EN_FIRST_LIST.add("Fer"); - EN_FIRST_LIST.add("Dar"); - EN_FIRST_LIST.add("Geof"); - EN_FIRST_LIST.add("Blair"); - EN_FIRST_LIST.add("Tab"); - EN_FIRST_LIST.add("Jeff"); - EN_FIRST_LIST.add("Whee"); - EN_FIRST_LIST.add("Wilhel"); - EN_FIRST_LIST.add("Chloe"); - EN_FIRST_LIST.add("Borg"); - EN_FIRST_LIST.add("Tam"); - EN_FIRST_LIST.add("Ver"); - EN_FIRST_LIST.add("Grace"); - EN_FIRST_LIST.add("Webb"); - EN_FIRST_LIST.add("Quinn"); - EN_FIRST_LIST.add("Tay"); - EN_FIRST_LIST.add("Burne"); - EN_FIRST_LIST.add("King"); - EN_FIRST_LIST.add("Webs"); - EN_FIRST_LIST.add("Job"); - EN_FIRST_LIST.add("Roxan"); - EN_FIRST_LIST.add("Joe"); - EN_FIRST_LIST.add("Gib"); - EN_FIRST_LIST.add("Kyle"); - EN_FIRST_LIST.add("Cae"); - EN_FIRST_LIST.add("Nick"); - EN_FIRST_LIST.add("Hume"); - EN_FIRST_LIST.add("Jon"); - EN_FIRST_LIST.add("Mur"); - EN_FIRST_LIST.add("Gil"); - EN_FIRST_LIST.add("Jor"); - EN_FIRST_LIST.add("Louie"); - EN_FIRST_LIST.add("Cal"); - EN_FIRST_LIST.add("Gis"); - EN_FIRST_LIST.add("Jou"); - EN_FIRST_LIST.add("Can"); - EN_FIRST_LIST.add("Zoe"); - EN_FIRST_LIST.add("Car"); - EN_FIRST_LIST.add("Joy"); - EN_FIRST_LIST.add("Wil"); - EN_FIRST_LIST.add("Burns"); - EN_FIRST_LIST.add("Gail"); - EN_FIRST_LIST.add("Win"); - EN_FIRST_LIST.add("Sam"); - EN_FIRST_LIST.add("Sal"); - EN_FIRST_LIST.add("Louis"); - EN_FIRST_LIST.add("Spen"); - EN_FIRST_LIST.add("San"); - EN_FIRST_LIST.add("Wild"); - EN_FIRST_LIST.add("Sas"); - EN_FIRST_LIST.add("York"); - EN_FIRST_LIST.add("Lance"); - EN_FIRST_LIST.add("Beau"); - EN_FIRST_LIST.add("Saw"); - EN_FIRST_LIST.add("Hodg"); - EN_FIRST_LIST.add("Glad"); - EN_FIRST_LIST.add("Claude"); - EN_FIRST_LIST.add("Sax"); - EN_FIRST_LIST.add("Brook"); - EN_FIRST_LIST.add("Kings"); - EN_FIRST_LIST.add("Cher"); - EN_FIRST_LIST.add("Gale"); - EN_FIRST_LIST.add("Ches"); - EN_FIRST_LIST.add("Rhys"); - EN_FIRST_LIST.add("Earl"); - EN_FIRST_LIST.add("Will"); - EN_FIRST_LIST.add("Pritt"); - EN_FIRST_LIST.add("Rusk"); - EN_FIRST_LIST.add("Jack"); - EN_FIRST_LIST.add("Deb"); - EN_FIRST_LIST.add("Bab"); - EN_FIRST_LIST.add("Flower"); - EN_FIRST_LIST.add("Fin"); - EN_FIRST_LIST.add("O'Neil"); - EN_FIRST_LIST.add("Den"); - EN_FIRST_LIST.add("Dick"); - EN_FIRST_LIST.add("Thomp"); - EN_FIRST_LIST.add("Der"); - EN_FIRST_LIST.add("Vic"); - EN_FIRST_LIST.add("Bar"); - EN_FIRST_LIST.add("Ted"); - EN_FIRST_LIST.add("Boyle"); - EN_FIRST_LIST.add("Stuart"); - EN_FIRST_LIST.add("Whit"); - EN_FIRST_LIST.add("Bau"); - EN_FIRST_LIST.add("Rae"); - EN_FIRST_LIST.add("Blume"); - EN_FIRST_LIST.add("Vin"); - EN_FIRST_LIST.add("Bryce"); - EN_FIRST_LIST.add("Ten"); - EN_FIRST_LIST.add("Gla"); - EN_FIRST_LIST.add("Vio"); - EN_FIRST_LIST.add("Moul"); - EN_FIRST_LIST.add("Tem"); - EN_FIRST_LIST.add("Vir"); - EN_FIRST_LIST.add("Ran"); - } + /** + * 中文形容词 + */ + public static final String[] CN_ADJECTIVE = { + "冷静的", "醉熏的", "潇洒的", "糊涂的", "积极的", "冷酷的", "深情的", "粗暴的", "温柔的", + "可爱的", "愉快的", "义气的", "认真的", "威武的", "帅气的", "传统的", "潇洒的", "漂亮的", + "自然的", "专一的", "听话的", "昏睡的", "狂野的", "等待的", "搞怪的", "幽默的", "魁梧的", + "活泼的", "开心的", "高兴的", "超帅的", "坦率的", "直率的", "轻松的", "痴情的", "完美的", + "精明的", "无聊的", "丰富的", "繁荣的", "饱满的", "炙热的", "暴躁的", "碧蓝的", "俊逸的", + "英勇的", "健忘的", "故意的", "无心的", "土豪的", "朴实的", "兴奋的", "幸福的", "淡定的", + "不安的", "阔达的", "孤独的", "独特的", "疯狂的", "时尚的", "落后的", "风趣的", "忧伤的", + "大胆的", "爱笑的", "矮小的", "健康的", "合适的", "玩命的", "沉默的", "斯文的", "任性的", + "细心的", "粗心的", "大意的", "甜甜的", "酷酷的", "健壮的", "英俊的", "霸气的", "阳光的", + "默默的", "大力的", "孝顺的", "忧虑的", "着急的", "紧张的", "善良的", "凶狠的", "害怕的", + "重要的", "危机的", "欢喜的", "欣慰的", "满意的", "跳跃的", "诚心的", "称心的", "如意的", + "怡然的", "娇气的", "无奈的", "无语的", "激动的", "愤怒的", "美好的", "感动的", "激情的", + "激昂的", "震动的", "虚拟的", "超级的", "寒冷的", "明理的", "犹豫的", "忧郁的", "寂寞的", + "奋斗的", "勤奋的", "现代的", "过时的", "稳重的", "热情的", "含蓄的", "无辜的", "多情的", + "纯真的", "拉长的", "热心的", "从容的", "体贴的", "风中的", "曾经的", "追寻的", "儒雅的", + "优雅的", "开朗的", "外向的", "内向的", "清爽的", "文艺的", "长情的", "平常的", "单身的", + "伶俐的", "高大的", "懦弱的", "柔弱的", "爱笑的", "乐观的", "耍酷的", "酷炫的", "神勇的", + "年轻的", "唠叨的", "瘦瘦的", "无情的", "包容的", "顺心的", "畅快的", "舒适的", "靓丽的", + "负责的", "背后的", "简单的", "谦让的", "彩色的", "缥缈的", "欢呼的", "生动的", "复杂的", + "慈祥的", "仁爱的", "魔幻的", "虚幻的", "淡然的", "受伤的", "雪白的", "高高的", "糟糕的", + "顺利的", "闪闪的", "羞涩的", "缓慢的", "迅速的", "优秀的", "聪明的", "含糊的", "俏皮的", + "淡淡的", "坚强的", "平淡的", "欣喜的", "能干的", "灵巧的", "友好的", "机智的", "机灵的", + "正直的", "谨慎的", "俭朴的", "殷勤的", "虚心的", "辛勤的", "自觉的", "无私的", "无限的", + "踏实的", "老实的", "现实的", "可靠的", "务实的", "拼搏的", "个性的", "粗犷的", "活力的", + "成就的", "勤劳的", "单纯的", "落寞的", "朴素的", "悲凉的", "忧心的", "洁净的", "清秀的", + "自由的", "小巧的", "单薄的", "贪玩的", "刻苦的", "干净的", "壮观的", "和谐的", "文静的", + "调皮的", "害羞的", "安详的", "自信的", "端庄的", "坚定的", "美满的", "舒心的", "温暖的", + "专注的", "勤恳的", "美丽的", "腼腆的", "优美的", "甜美的", "甜蜜的", "整齐的", "动人的", + "典雅的", "尊敬的", "舒服的", "妩媚的", "秀丽的", "喜悦的", "甜美的", "彪壮的", "强健的", + "大方的", "俊秀的", "聪慧的", "迷人的", "陶醉的", "悦耳的", "动听的", "明亮的", "结实的", + "魁梧的", "标致的", "清脆的", "敏感的", "光亮的", "大气的", "知性的", "冷傲的", "呆萌的", + "野性的", "隐形的", "微笑的", "笨笨的", "难过的", "沉静的", "失眠的", "安静的", "纯情的", + "迷路的", "烂漫的", "哭泣的", "贤惠的", "苗条的", "温婉的", "发嗲的", "贪玩的", "执着的", + "花痴的", "高贵的", "傲娇的", "细腻的", "天真的", "怕黑的", "感性的", "飘逸的", "忐忑的", + "高挑的", "傻傻的", "冷艳的", "懵懂的", "特别的", "未来的", "亲切的", "鲜艳的", "拥挤的", + "爱听歌的", "还单身的", "怕孤单的", "留胡子的", "有魅力的", "老迟到的", "笑点低的", + "火星上的", "要减肥的", "会撒娇的", "眯眯眼的", "心灵美的", "爱撒娇的", "想人陪的", + "眼睛大的", "怕孤独的" + }; + + /** + * 英文姓 + */ + public static final String[] EN_LAST_LIST = { + "nings", "hale", "lvis", "hall", "todd", "via", "vid", "liot", "vic", "ted", "rad", + "rae", "rah", "vin", "ral", "ten", "ram", "ter", "vis", "tes", "thus", "thur", "ray", + "lins", "pont", "dawn", "glenn", "kuk", "rold", "cliff", "roll", "gold", "cer", "xon", + "cey", "browne", "scott", "a", "rwood", "leif", "h", "tha", "n", "o", "the", "fast", + "frances", "y", "clife", "sweet", "muel", "rone", "lith", "thy", "ning", "chill", "gou", + "tia", "litt", "red", "thorne", "tie", "rian", "reg", "riam", "pag", "tin", "rel", "tim", + "ren", "tio", "rias", "swift", "tis", "ret", "che", "res", "rex", "chi", "lace", "rey", + "riah", "holmes", "phine", "yves", "cia", "cie", "child", "young", "cil", "hart", "cis", + "miles", "ridge", "bruce", "live", "lius", "rick", "tle", "nior", "crofts", "well", "cke", + "sworth", "ria", "rid", "ric", "wylde", "rie", "cky", "ries", "peg", "riet", "nah", "ril", + "keats", "pel", "rin", "nal", "nan", "per", "ris", "jane", "nat", "nas", "raine", "neil", + "quinn", "riel", "faithe", "gue", "braith", "gus", "nell", "guy", "saul", "vogt", "ton", + "tom", "tance", "tian", "tor", "lain", "mund", "sharp", "sham", "cob", "twain", "shaw", + "nise", "phy", "col", "con", "duke", "cent", "phael", "lett", "cox", "nee", "reau", "nel", + "lan", "pir", "ner", "lap", "ale", "net", "nes", "las", "tra", "law", "ney", "lay", "shall", + "phens", "cius", "snow", "rob", "rod", "bush", "roe", "trick", "rol", "ron", "bryce", "gill", + "tier", "blume", "trice", "land", "roy", "ann", "tta", "ple", "phrey", "wald", "lamb", + "nence", "nia", "nid", "nic", "nie", "lee", "jah", "nin", "tus", "len", "nio", "vian", + "gins", "elroy", "ler", "nis", "bois", "let", "les", "rine", "nix", "lew", "ley", "jay", + "tosh", "reed", "reen", "baird", "bohm", "dunn", "brooke", "cus", "penn", "nett", "poe", + "ward", "worth", "pkins", "gray", "lard", "grace", "nald", "vice", "rion", "dodd", "peare", + "gram", "yan", "black", "nest", "tout", "chard", "smith", "lia", "lie", "lynch", "lin", + "pril", "moll", "hal", "lip", "han", "ham", "piers", "lis", "bias", "vier", "bian", "lix", + "nand", "liz", "hugh", "lass", "ives", "vien", "camp", "kiel", "boyce", "yale", "shop", + "pert", "rell", "non", "house", "nor", "mons", "tine", "rite", "green", "race", "yes", "yer", + "war", "yet", "wat", "mond", "way", "grey", "miah", "drich", "funk", "watt", "greg", "dutt", + "ryl", "croft", "jim", "alick", "nard", "broad", "fax", "tram", "cash", "rene", "fay", "tion", + "gene", "harte", "carr", "niell", "mick", "judd", "loc", "diah", "bright", "lon", "dolph", + "lop", "gail", "lor", "lot", "lou", "hume", "low", "tein", "wen", "wer", "more", "chad", + "born", "dolf", "wey", "borg", "grid", "dick", "chell", "dad", "dice", "pys", "whit", "nus", + "gess", "dan", "dam", "mott", "kins", "fer", "shua", "beau", "dict", "ving", "fey", "day", + "bloor", "bott", "king", "grote", "job", "joe", "beck", "mike", "rett", "dore", "rald", "joy", + "win", "sam", "wis", "chael", "san", "glan", "chel", "gale", "sar", "glas", "say", "maltz", + "lyle", "chey", "earl", "cher", "fie", "joan", "lup", "del", "lus", "den", "der", "pham", + "bar", "des", "ac", "giles", "kirk", "ah", "bill", "leste", "an", "trid", "mill", "boyd", + "bby", "jones", "lynn", "frank", "velt", "dean", "strong", "dge", "be", "ters", "rence", + "sea", "xine", "laine", "by", "sel", "sen", "ca", "ses", "ser", "ce", "bins", "ch", "sey", + "ck", "kell", "co", "bing", "june", "cy", "paul", "hutt", "da", "dia", "lyn", "die", "de", + "bee", "di", "bel", "dn", "ben", "ford", "do", "pher", "bes", "claude", "kent", "dy", "phen", + "bey", "bird", "joel", "nuel", "ed", "ralph", "el", "tess", "brown", "er", "dike", "chards", + "foe", "fe", "back", "bach", "sia", "sie", "fox", "sid", "leigh", "pound", "dine", "fy", + "leign", "sil", "ga", "ge", "troy", "dwight", "nions", "go", "soll", "greve", "clare", + "vieve", "gy", "clark", "hue", "fort", "bia", "grant", "he", "holt", "hum", "bin", "yonng", + "soon", "hy", "fra", "chloe", "briel", "burns", "phia", "kerr", "bitt", "tience", "brey", + "hood", "bell", "phil", "field", "steele", "pritt", "john", "je", "joyce", "don", "jo", + "jy", "mag", "blair", "ke", "man", "mas", "mar", "may", "max", "sopp", "ment", "mens", "ky", + "o'neil", "la", "le", "stuart", "li", "ghes", "hicks", "dred", "lo", "drea", "vans", "ly", + "wright", "som", "logg", "dra", "son", "ma", "tham", "berg", "dith", "dre", "than", "sor", + "me", "noah", "phne", "brian", "brook", "mo", "harine", "lance", "tate", "my", "yule", "na", + "bob", "nd", "ne", "bon", "no", "louie", "sean", "ny", "bess", "meg", "tiane", "head", "hous", + "meo", "men", "beth", "bald", "louis", "mer", "boyle", "mew", "ville", "kay", "clair", "tave", + "bert", "finn", "drey", "burne", "drew", "dell", "pe", "fitch", "ps", "dric", "beard", "py", + "walsh", "thew", "qe", "chols", "brow", "ther", "noel", "they", "clough", "thea", "ckens", "qy", + "thel", "ra", "booth", "re", "trine", "rl", "loise", "ro", "rist", "mia", "ry", "mie", "dair", + "sa", "se", "min", "ken", "sh", "belle", "ian", "lian", "fith", "kes", "ker", "sibyl", "fred", + "liam", "wolf", "sy", "mann", "lome", "josh", "ta", "flower", "te", "hill", "stan", "mand", + "stal", "to", "bur", "dys", "ty", "ice", "woolf", "jean", "wood", "bard", "zel", "crane", "zer", + "va", "lice", "ve", "frey", "vi", "wyatt", "thia", "sing", "coln", "vy", "colm", "nold", "cole", + "dams", "we", "jill", "gai", "kim", "kin", "ien", "gan", "kit", "nolds", "drow", "gar", "liet", + "wy", "xe", "bart", "stone", "thodore", "ster", "mark", "xy", "jeff", "laide", "jeames", "ye", + "mon", "mos", "maud", "niah", "price", "zie", "yy", "van", "matt", "keith", "ze", "ckey", "cker", + "zy", "gee", "north", "james", "claire", "gel", "nick", "gen", "ges", "ger", "kyle", "morse", + "get", "tricia", "wilde", "cook", "sell", "thune", "nice", "pold", "nore", "pole", "tours", "xia", + "niel", "tab", "ven", "ver", "lotte", "vey", "niei", "webb", "cooke", "gia", "lind", "gie", "dave", + "ruth", "cott", "ling", "line", "cah", "gil", "cam", "ckle", "leen", "can", "zoe", "cas", "car", + "buck", "wells", "ine", "ing", "will", "rhys", "rusk", "jack", "ledk", "stowe", "york", "hearst", + "reade", "loyd", "wild", "seph", "gust", "sper" + }; - public static void initEN_LAST_LIST() { - EN_LAST_LIST.add("nings"); - EN_LAST_LIST.add("hale"); - EN_LAST_LIST.add("lvis"); - EN_LAST_LIST.add("hall"); - EN_LAST_LIST.add("todd"); - EN_LAST_LIST.add("via"); - EN_LAST_LIST.add("vid"); - EN_LAST_LIST.add("liot"); - EN_LAST_LIST.add("vic"); - EN_LAST_LIST.add("ted"); - EN_LAST_LIST.add("rad"); - EN_LAST_LIST.add("rae"); - EN_LAST_LIST.add("rah"); - EN_LAST_LIST.add("vin"); - EN_LAST_LIST.add("ral"); - EN_LAST_LIST.add("ten"); - EN_LAST_LIST.add("ram"); - EN_LAST_LIST.add("ter"); - EN_LAST_LIST.add("vis"); - EN_LAST_LIST.add("tes"); - EN_LAST_LIST.add("thus"); - EN_LAST_LIST.add("thur"); - EN_LAST_LIST.add("ray"); - EN_LAST_LIST.add("lins"); - EN_LAST_LIST.add("pont"); - EN_LAST_LIST.add("dawn"); - EN_LAST_LIST.add("glenn"); - EN_LAST_LIST.add("kuk"); - EN_LAST_LIST.add("rold"); - EN_LAST_LIST.add("cliff"); - EN_LAST_LIST.add("roll"); - EN_LAST_LIST.add("gold"); - EN_LAST_LIST.add("cer"); - EN_LAST_LIST.add("xon"); - EN_LAST_LIST.add("cey"); - EN_LAST_LIST.add("browne"); - EN_LAST_LIST.add("scott"); - EN_LAST_LIST.add("a"); - EN_LAST_LIST.add("rwood"); - EN_LAST_LIST.add("leif"); - EN_LAST_LIST.add("h"); - EN_LAST_LIST.add("tha"); - EN_LAST_LIST.add("n"); - EN_LAST_LIST.add("o"); - EN_LAST_LIST.add("the"); - EN_LAST_LIST.add("fast"); - EN_LAST_LIST.add("frances"); - EN_LAST_LIST.add("y"); - EN_LAST_LIST.add("clife"); - EN_LAST_LIST.add("sweet"); - EN_LAST_LIST.add("muel"); - EN_LAST_LIST.add("rone"); - EN_LAST_LIST.add("lith"); - EN_LAST_LIST.add("thy"); - EN_LAST_LIST.add("ning"); - EN_LAST_LIST.add("chill"); - EN_LAST_LIST.add("gou"); - EN_LAST_LIST.add("tia"); - EN_LAST_LIST.add("litt"); - EN_LAST_LIST.add("red"); - EN_LAST_LIST.add("thorne"); - EN_LAST_LIST.add("tie"); - EN_LAST_LIST.add("rian"); - EN_LAST_LIST.add("reg"); - EN_LAST_LIST.add("riam"); - EN_LAST_LIST.add("pag"); - EN_LAST_LIST.add("tin"); - EN_LAST_LIST.add("rel"); - EN_LAST_LIST.add("tim"); - EN_LAST_LIST.add("ren"); - EN_LAST_LIST.add("tio"); - EN_LAST_LIST.add("rias"); - EN_LAST_LIST.add("swift"); - EN_LAST_LIST.add("tis"); - EN_LAST_LIST.add("ret"); - EN_LAST_LIST.add("che"); - EN_LAST_LIST.add("res"); - EN_LAST_LIST.add("rex"); - EN_LAST_LIST.add("chi"); - EN_LAST_LIST.add("lace"); - EN_LAST_LIST.add("rey"); - EN_LAST_LIST.add("riah"); - EN_LAST_LIST.add("holmes"); - EN_LAST_LIST.add("phine"); - EN_LAST_LIST.add("yves"); - EN_LAST_LIST.add("cia"); - EN_LAST_LIST.add("cie"); - EN_LAST_LIST.add("child"); - EN_LAST_LIST.add("young"); - EN_LAST_LIST.add("cil"); - EN_LAST_LIST.add("hart"); - EN_LAST_LIST.add("cis"); - EN_LAST_LIST.add("miles"); - EN_LAST_LIST.add("ridge"); - EN_LAST_LIST.add("bruce"); - EN_LAST_LIST.add("live"); - EN_LAST_LIST.add("lius"); - EN_LAST_LIST.add("rick"); - EN_LAST_LIST.add("tle"); - EN_LAST_LIST.add("nior"); - EN_LAST_LIST.add("crofts"); - EN_LAST_LIST.add("well"); - EN_LAST_LIST.add("cke"); - EN_LAST_LIST.add("sworth"); - EN_LAST_LIST.add("ria"); - EN_LAST_LIST.add("rid"); - EN_LAST_LIST.add("ric"); - EN_LAST_LIST.add("wylde"); - EN_LAST_LIST.add("rie"); - EN_LAST_LIST.add("cky"); - EN_LAST_LIST.add("ries"); - EN_LAST_LIST.add("peg"); - EN_LAST_LIST.add("riet"); - EN_LAST_LIST.add("nah"); - EN_LAST_LIST.add("ril"); - EN_LAST_LIST.add("keats"); - EN_LAST_LIST.add("pel"); - EN_LAST_LIST.add("rin"); - EN_LAST_LIST.add("nal"); - EN_LAST_LIST.add("nan"); - EN_LAST_LIST.add("per"); - EN_LAST_LIST.add("ris"); - EN_LAST_LIST.add("jane"); - EN_LAST_LIST.add("nat"); - EN_LAST_LIST.add("nas"); - EN_LAST_LIST.add("raine"); - EN_LAST_LIST.add("neil"); - EN_LAST_LIST.add("quinn"); - EN_LAST_LIST.add("riel"); - EN_LAST_LIST.add("faithe"); - EN_LAST_LIST.add("gue"); - EN_LAST_LIST.add("braith"); - EN_LAST_LIST.add("gus"); - EN_LAST_LIST.add("nell"); - EN_LAST_LIST.add("guy"); - EN_LAST_LIST.add("saul"); - EN_LAST_LIST.add("vogt"); - EN_LAST_LIST.add("ton"); - EN_LAST_LIST.add("tom"); - EN_LAST_LIST.add("tance"); - EN_LAST_LIST.add("tian"); - EN_LAST_LIST.add("tor"); - EN_LAST_LIST.add("lain"); - EN_LAST_LIST.add("mund"); - EN_LAST_LIST.add("sharp"); - EN_LAST_LIST.add("sham"); - EN_LAST_LIST.add("cob"); - EN_LAST_LIST.add("twain"); - EN_LAST_LIST.add("shaw"); - EN_LAST_LIST.add("nise"); - EN_LAST_LIST.add("phy"); - EN_LAST_LIST.add("col"); - EN_LAST_LIST.add("con"); - EN_LAST_LIST.add("duke"); - EN_LAST_LIST.add("cent"); - EN_LAST_LIST.add("phael"); - EN_LAST_LIST.add("lett"); - EN_LAST_LIST.add("cox"); - EN_LAST_LIST.add("nee"); - EN_LAST_LIST.add("reau"); - EN_LAST_LIST.add("nel"); - EN_LAST_LIST.add("lan"); - EN_LAST_LIST.add("pir"); - EN_LAST_LIST.add("ner"); - EN_LAST_LIST.add("lap"); - EN_LAST_LIST.add("ale"); - EN_LAST_LIST.add("net"); - EN_LAST_LIST.add("nes"); - EN_LAST_LIST.add("las"); - EN_LAST_LIST.add("tra"); - EN_LAST_LIST.add("law"); - EN_LAST_LIST.add("ney"); - EN_LAST_LIST.add("lay"); - EN_LAST_LIST.add("shall"); - EN_LAST_LIST.add("phens"); - EN_LAST_LIST.add("cius"); - EN_LAST_LIST.add("snow"); - EN_LAST_LIST.add("rob"); - EN_LAST_LIST.add("rod"); - EN_LAST_LIST.add("bush"); - EN_LAST_LIST.add("roe"); - EN_LAST_LIST.add("trick"); - EN_LAST_LIST.add("rol"); - EN_LAST_LIST.add("ron"); - EN_LAST_LIST.add("bryce"); - EN_LAST_LIST.add("gill"); - EN_LAST_LIST.add("tier"); - EN_LAST_LIST.add("blume"); - EN_LAST_LIST.add("trice"); - EN_LAST_LIST.add("land"); - EN_LAST_LIST.add("roy"); - EN_LAST_LIST.add("ann"); - EN_LAST_LIST.add("tta"); - EN_LAST_LIST.add("ple"); - EN_LAST_LIST.add("phrey"); - EN_LAST_LIST.add("wald"); - EN_LAST_LIST.add("lamb"); - EN_LAST_LIST.add("nence"); - EN_LAST_LIST.add("nia"); - EN_LAST_LIST.add("nid"); - EN_LAST_LIST.add("nic"); - EN_LAST_LIST.add("nie"); - EN_LAST_LIST.add("lee"); - EN_LAST_LIST.add("jah"); - EN_LAST_LIST.add("nin"); - EN_LAST_LIST.add("tus"); - EN_LAST_LIST.add("len"); - EN_LAST_LIST.add("nio"); - EN_LAST_LIST.add("vian"); - EN_LAST_LIST.add("gins"); - EN_LAST_LIST.add("elroy"); - EN_LAST_LIST.add("ler"); - EN_LAST_LIST.add("nis"); - EN_LAST_LIST.add("bois"); - EN_LAST_LIST.add("let"); - EN_LAST_LIST.add("les"); - EN_LAST_LIST.add("rine"); - EN_LAST_LIST.add("nix"); - EN_LAST_LIST.add("lew"); - EN_LAST_LIST.add("ley"); - EN_LAST_LIST.add("jay"); - EN_LAST_LIST.add("tosh"); - EN_LAST_LIST.add("reed"); - EN_LAST_LIST.add("reen"); - EN_LAST_LIST.add("baird"); - EN_LAST_LIST.add("bohm"); - EN_LAST_LIST.add("dunn"); - EN_LAST_LIST.add("brooke"); - EN_LAST_LIST.add("cus"); - EN_LAST_LIST.add("penn"); - EN_LAST_LIST.add("nett"); - EN_LAST_LIST.add("poe"); - EN_LAST_LIST.add("ward"); - EN_LAST_LIST.add("worth"); - EN_LAST_LIST.add("pkins"); - EN_LAST_LIST.add("gray"); - EN_LAST_LIST.add("lard"); - EN_LAST_LIST.add("grace"); - EN_LAST_LIST.add("nald"); - EN_LAST_LIST.add("vice"); - EN_LAST_LIST.add("rion"); - EN_LAST_LIST.add("dodd"); - EN_LAST_LIST.add("peare"); - EN_LAST_LIST.add("gram"); - EN_LAST_LIST.add("yan"); - EN_LAST_LIST.add("black"); - EN_LAST_LIST.add("nest"); - EN_LAST_LIST.add("tout"); - EN_LAST_LIST.add("chard"); - EN_LAST_LIST.add("smith"); - EN_LAST_LIST.add("lia"); - EN_LAST_LIST.add("lie"); - EN_LAST_LIST.add("lynch"); - EN_LAST_LIST.add("lin"); - EN_LAST_LIST.add("pril"); - EN_LAST_LIST.add("moll"); - EN_LAST_LIST.add("hal"); - EN_LAST_LIST.add("lip"); - EN_LAST_LIST.add("han"); - EN_LAST_LIST.add("ham"); - EN_LAST_LIST.add("piers"); - EN_LAST_LIST.add("lis"); - EN_LAST_LIST.add("bias"); - EN_LAST_LIST.add("vier"); - EN_LAST_LIST.add("bian"); - EN_LAST_LIST.add("lix"); - EN_LAST_LIST.add("nand"); - EN_LAST_LIST.add("liz"); - EN_LAST_LIST.add("hugh"); - EN_LAST_LIST.add("lass"); - EN_LAST_LIST.add("ives"); - EN_LAST_LIST.add("vien"); - EN_LAST_LIST.add("camp"); - EN_LAST_LIST.add("kiel"); - EN_LAST_LIST.add("boyce"); - EN_LAST_LIST.add("yale"); - EN_LAST_LIST.add("shop"); - EN_LAST_LIST.add("pert"); - EN_LAST_LIST.add("rell"); - EN_LAST_LIST.add("non"); - EN_LAST_LIST.add("house"); - EN_LAST_LIST.add("nor"); - EN_LAST_LIST.add("mons"); - EN_LAST_LIST.add("tine"); - EN_LAST_LIST.add("rite"); - EN_LAST_LIST.add("green"); - EN_LAST_LIST.add("race"); - EN_LAST_LIST.add("yes"); - EN_LAST_LIST.add("yer"); - EN_LAST_LIST.add("war"); - EN_LAST_LIST.add("yet"); - EN_LAST_LIST.add("wat"); - EN_LAST_LIST.add("mond"); - EN_LAST_LIST.add("way"); - EN_LAST_LIST.add("grey"); - EN_LAST_LIST.add("miah"); - EN_LAST_LIST.add("drich"); - EN_LAST_LIST.add("funk"); - EN_LAST_LIST.add("watt"); - EN_LAST_LIST.add("greg"); - EN_LAST_LIST.add("dutt"); - EN_LAST_LIST.add("ryl"); - EN_LAST_LIST.add("croft"); - EN_LAST_LIST.add("jim"); - EN_LAST_LIST.add("alick"); - EN_LAST_LIST.add("nard"); - EN_LAST_LIST.add("broad"); - EN_LAST_LIST.add("fax"); - EN_LAST_LIST.add("tram"); - EN_LAST_LIST.add("cash"); - EN_LAST_LIST.add("rene"); - EN_LAST_LIST.add("fay"); - EN_LAST_LIST.add("tion"); - EN_LAST_LIST.add("gene"); - EN_LAST_LIST.add("harte"); - EN_LAST_LIST.add("carr"); - EN_LAST_LIST.add("niell"); - EN_LAST_LIST.add("mick"); - EN_LAST_LIST.add("judd"); - EN_LAST_LIST.add("loc"); - EN_LAST_LIST.add("diah"); - EN_LAST_LIST.add("bright"); - EN_LAST_LIST.add("lon"); - EN_LAST_LIST.add("dolph"); - EN_LAST_LIST.add("lop"); - EN_LAST_LIST.add("gail"); - EN_LAST_LIST.add("lor"); - EN_LAST_LIST.add("lot"); - EN_LAST_LIST.add("lou"); - EN_LAST_LIST.add("hume"); - EN_LAST_LIST.add("low"); - EN_LAST_LIST.add("tein"); - EN_LAST_LIST.add("wen"); - EN_LAST_LIST.add("wer"); - EN_LAST_LIST.add("more"); - EN_LAST_LIST.add("chad"); - EN_LAST_LIST.add("born"); - EN_LAST_LIST.add("dolf"); - EN_LAST_LIST.add("wey"); - EN_LAST_LIST.add("borg"); - EN_LAST_LIST.add("grid"); - EN_LAST_LIST.add("dick"); - EN_LAST_LIST.add("chell"); - EN_LAST_LIST.add("dad"); - EN_LAST_LIST.add("dice"); - EN_LAST_LIST.add("pys"); - EN_LAST_LIST.add("whit"); - EN_LAST_LIST.add("nus"); - EN_LAST_LIST.add("gess"); - EN_LAST_LIST.add("dan"); - EN_LAST_LIST.add("dam"); - EN_LAST_LIST.add("mott"); - EN_LAST_LIST.add("kins"); - EN_LAST_LIST.add("fer"); - EN_LAST_LIST.add("shua"); - EN_LAST_LIST.add("beau"); - EN_LAST_LIST.add("dict"); - EN_LAST_LIST.add("ving"); - EN_LAST_LIST.add("fey"); - EN_LAST_LIST.add("day"); - EN_LAST_LIST.add("bloor"); - EN_LAST_LIST.add("bott"); - EN_LAST_LIST.add("king"); - EN_LAST_LIST.add("grote"); - EN_LAST_LIST.add("job"); - EN_LAST_LIST.add("joe"); - EN_LAST_LIST.add("beck"); - EN_LAST_LIST.add("mike"); - EN_LAST_LIST.add("rett"); - EN_LAST_LIST.add("dore"); - EN_LAST_LIST.add("rald"); - EN_LAST_LIST.add("joy"); - EN_LAST_LIST.add("win"); - EN_LAST_LIST.add("sam"); - EN_LAST_LIST.add("wis"); - EN_LAST_LIST.add("chael"); - EN_LAST_LIST.add("san"); - EN_LAST_LIST.add("glan"); - EN_LAST_LIST.add("chel"); - EN_LAST_LIST.add("gale"); - EN_LAST_LIST.add("sar"); - EN_LAST_LIST.add("glas"); - EN_LAST_LIST.add("say"); - EN_LAST_LIST.add("maltz"); - EN_LAST_LIST.add("lyle"); - EN_LAST_LIST.add("chey"); - EN_LAST_LIST.add("earl"); - EN_LAST_LIST.add("cher"); - EN_LAST_LIST.add("fie"); - EN_LAST_LIST.add("joan"); - EN_LAST_LIST.add("lup"); - EN_LAST_LIST.add("del"); - EN_LAST_LIST.add("lus"); - EN_LAST_LIST.add("den"); - EN_LAST_LIST.add("der"); - EN_LAST_LIST.add("pham"); - EN_LAST_LIST.add("bar"); - EN_LAST_LIST.add("des"); - EN_LAST_LIST.add("ac"); - EN_LAST_LIST.add("giles"); - EN_LAST_LIST.add("kirk"); - EN_LAST_LIST.add("ah"); - EN_LAST_LIST.add("bill"); - EN_LAST_LIST.add("leste"); - EN_LAST_LIST.add("an"); - EN_LAST_LIST.add("trid"); - EN_LAST_LIST.add("mill"); - EN_LAST_LIST.add("boyd"); - EN_LAST_LIST.add("bby"); - EN_LAST_LIST.add("jones"); - EN_LAST_LIST.add("lynn"); - EN_LAST_LIST.add("frank"); - EN_LAST_LIST.add("velt"); - EN_LAST_LIST.add("dean"); - EN_LAST_LIST.add("strong"); - EN_LAST_LIST.add("dge"); - EN_LAST_LIST.add("be"); - EN_LAST_LIST.add("ters"); - EN_LAST_LIST.add("rence"); - EN_LAST_LIST.add("sea"); - EN_LAST_LIST.add("xine"); - EN_LAST_LIST.add("laine"); - EN_LAST_LIST.add("by"); - EN_LAST_LIST.add("sel"); - EN_LAST_LIST.add("sen"); - EN_LAST_LIST.add("ca"); - EN_LAST_LIST.add("ses"); - EN_LAST_LIST.add("ser"); - EN_LAST_LIST.add("ce"); - EN_LAST_LIST.add("bins"); - EN_LAST_LIST.add("ch"); - EN_LAST_LIST.add("sey"); - EN_LAST_LIST.add("ck"); - EN_LAST_LIST.add("kell"); - EN_LAST_LIST.add("co"); - EN_LAST_LIST.add("bing"); - EN_LAST_LIST.add("june"); - EN_LAST_LIST.add("cy"); - EN_LAST_LIST.add("paul"); - EN_LAST_LIST.add("hutt"); - EN_LAST_LIST.add("da"); - EN_LAST_LIST.add("dia"); - EN_LAST_LIST.add("lyn"); - EN_LAST_LIST.add("die"); - EN_LAST_LIST.add("de"); - EN_LAST_LIST.add("bee"); - EN_LAST_LIST.add("di"); - EN_LAST_LIST.add("bel"); - EN_LAST_LIST.add("dn"); - EN_LAST_LIST.add("ben"); - EN_LAST_LIST.add("ford"); - EN_LAST_LIST.add("do"); - EN_LAST_LIST.add("pher"); - EN_LAST_LIST.add("bes"); - EN_LAST_LIST.add("claude"); - EN_LAST_LIST.add("kent"); - EN_LAST_LIST.add("dy"); - EN_LAST_LIST.add("phen"); - EN_LAST_LIST.add("bey"); - EN_LAST_LIST.add("bird"); - EN_LAST_LIST.add("joel"); - EN_LAST_LIST.add("nuel"); - EN_LAST_LIST.add("ed"); - EN_LAST_LIST.add("ralph"); - EN_LAST_LIST.add("el"); - EN_LAST_LIST.add("tess"); - EN_LAST_LIST.add("brown"); - EN_LAST_LIST.add("er"); - EN_LAST_LIST.add("dike"); - EN_LAST_LIST.add("chards"); - EN_LAST_LIST.add("foe"); - EN_LAST_LIST.add("fe"); - EN_LAST_LIST.add("back"); - EN_LAST_LIST.add("bach"); - EN_LAST_LIST.add("sia"); - EN_LAST_LIST.add("sie"); - EN_LAST_LIST.add("fox"); - EN_LAST_LIST.add("sid"); - EN_LAST_LIST.add("leigh"); - EN_LAST_LIST.add("pound"); - EN_LAST_LIST.add("dine"); - EN_LAST_LIST.add("fy"); - EN_LAST_LIST.add("leign"); - EN_LAST_LIST.add("sil"); - EN_LAST_LIST.add("ga"); - EN_LAST_LIST.add("ge"); - EN_LAST_LIST.add("troy"); - EN_LAST_LIST.add("dwight"); - EN_LAST_LIST.add("nions"); - EN_LAST_LIST.add("go"); - EN_LAST_LIST.add("soll"); - EN_LAST_LIST.add("greve"); - EN_LAST_LIST.add("clare"); - EN_LAST_LIST.add("vieve"); - EN_LAST_LIST.add("gy"); - EN_LAST_LIST.add("clark"); - EN_LAST_LIST.add("hue"); - EN_LAST_LIST.add("fort"); - EN_LAST_LIST.add("bia"); - EN_LAST_LIST.add("grant"); - EN_LAST_LIST.add("he"); - EN_LAST_LIST.add("holt"); - EN_LAST_LIST.add("hum"); - EN_LAST_LIST.add("bin"); - EN_LAST_LIST.add("yonng"); - EN_LAST_LIST.add("soon"); - EN_LAST_LIST.add("hy"); - EN_LAST_LIST.add("fra"); - EN_LAST_LIST.add("chloe"); - EN_LAST_LIST.add("briel"); - EN_LAST_LIST.add("burns"); - EN_LAST_LIST.add("phia"); - EN_LAST_LIST.add("kerr"); - EN_LAST_LIST.add("bitt"); - EN_LAST_LIST.add("tience"); - EN_LAST_LIST.add("brey"); - EN_LAST_LIST.add("hood"); - EN_LAST_LIST.add("bell"); - EN_LAST_LIST.add("phil"); - EN_LAST_LIST.add("field"); - EN_LAST_LIST.add("steele"); - EN_LAST_LIST.add("pritt"); - EN_LAST_LIST.add("john"); - EN_LAST_LIST.add("je"); - EN_LAST_LIST.add("joyce"); - EN_LAST_LIST.add("don"); - EN_LAST_LIST.add("jo"); - EN_LAST_LIST.add("jy"); - EN_LAST_LIST.add("mag"); - EN_LAST_LIST.add("blair"); - EN_LAST_LIST.add("ke"); - EN_LAST_LIST.add("man"); - EN_LAST_LIST.add("mas"); - EN_LAST_LIST.add("mar"); - EN_LAST_LIST.add("may"); - EN_LAST_LIST.add("max"); - EN_LAST_LIST.add("sopp"); - EN_LAST_LIST.add("ment"); - EN_LAST_LIST.add("mens"); - EN_LAST_LIST.add("ky"); - EN_LAST_LIST.add("o'neil"); - EN_LAST_LIST.add("la"); - EN_LAST_LIST.add("le"); - EN_LAST_LIST.add("stuart"); - EN_LAST_LIST.add("li"); - EN_LAST_LIST.add("ghes"); - EN_LAST_LIST.add("hicks"); - EN_LAST_LIST.add("dred"); - EN_LAST_LIST.add("lo"); - EN_LAST_LIST.add("drea"); - EN_LAST_LIST.add("vans"); - EN_LAST_LIST.add("ly"); - EN_LAST_LIST.add("wright"); - EN_LAST_LIST.add("som"); - EN_LAST_LIST.add("logg"); - EN_LAST_LIST.add("dra"); - EN_LAST_LIST.add("son"); - EN_LAST_LIST.add("ma"); - EN_LAST_LIST.add("tham"); - EN_LAST_LIST.add("berg"); - EN_LAST_LIST.add("dith"); - EN_LAST_LIST.add("dre"); - EN_LAST_LIST.add("than"); - EN_LAST_LIST.add("sor"); - EN_LAST_LIST.add("me"); - EN_LAST_LIST.add("noah"); - EN_LAST_LIST.add("phne"); - EN_LAST_LIST.add("brian"); - EN_LAST_LIST.add("brook"); - EN_LAST_LIST.add("mo"); - EN_LAST_LIST.add("harine"); - EN_LAST_LIST.add("lance"); - EN_LAST_LIST.add("tate"); - EN_LAST_LIST.add("my"); - EN_LAST_LIST.add("yule"); - EN_LAST_LIST.add("na"); - EN_LAST_LIST.add("bob"); - EN_LAST_LIST.add("nd"); - EN_LAST_LIST.add("ne"); - EN_LAST_LIST.add("bon"); - EN_LAST_LIST.add("no"); - EN_LAST_LIST.add("louie"); - EN_LAST_LIST.add("sean"); - EN_LAST_LIST.add("ny"); - EN_LAST_LIST.add("bess"); - EN_LAST_LIST.add("meg"); - EN_LAST_LIST.add("tiane"); - EN_LAST_LIST.add("head"); - EN_LAST_LIST.add("hous"); - EN_LAST_LIST.add("meo"); - EN_LAST_LIST.add("men"); - EN_LAST_LIST.add("beth"); - EN_LAST_LIST.add("bald"); - EN_LAST_LIST.add("louis"); - EN_LAST_LIST.add("mer"); - EN_LAST_LIST.add("boyle"); - EN_LAST_LIST.add("mew"); - EN_LAST_LIST.add("ville"); - EN_LAST_LIST.add("kay"); - EN_LAST_LIST.add("clair"); - EN_LAST_LIST.add("tave"); - EN_LAST_LIST.add("bert"); - EN_LAST_LIST.add("finn"); - EN_LAST_LIST.add("drey"); - EN_LAST_LIST.add("burne"); - EN_LAST_LIST.add("drew"); - EN_LAST_LIST.add("dell"); - EN_LAST_LIST.add("pe"); - EN_LAST_LIST.add("fitch"); - EN_LAST_LIST.add("ps"); - EN_LAST_LIST.add("dric"); - EN_LAST_LIST.add("beard"); - EN_LAST_LIST.add("py"); - EN_LAST_LIST.add("walsh"); - EN_LAST_LIST.add("thew"); - EN_LAST_LIST.add("qe"); - EN_LAST_LIST.add("chols"); - EN_LAST_LIST.add("brow"); - EN_LAST_LIST.add("ther"); - EN_LAST_LIST.add("noel"); - EN_LAST_LIST.add("they"); - EN_LAST_LIST.add("clough"); - EN_LAST_LIST.add("thea"); - EN_LAST_LIST.add("ckens"); - EN_LAST_LIST.add("qy"); - EN_LAST_LIST.add("thel"); - EN_LAST_LIST.add("ra"); - EN_LAST_LIST.add("booth"); - EN_LAST_LIST.add("re"); - EN_LAST_LIST.add("trine"); - EN_LAST_LIST.add("rl"); - EN_LAST_LIST.add("loise"); - EN_LAST_LIST.add("ro"); - EN_LAST_LIST.add("rist"); - EN_LAST_LIST.add("mia"); - EN_LAST_LIST.add("ry"); - EN_LAST_LIST.add("mie"); - EN_LAST_LIST.add("dair"); - EN_LAST_LIST.add("sa"); - EN_LAST_LIST.add("se"); - EN_LAST_LIST.add("min"); - EN_LAST_LIST.add("ken"); - EN_LAST_LIST.add("sh"); - EN_LAST_LIST.add("belle"); - EN_LAST_LIST.add("ian"); - EN_LAST_LIST.add("lian"); - EN_LAST_LIST.add("fith"); - EN_LAST_LIST.add("kes"); - EN_LAST_LIST.add("ker"); - EN_LAST_LIST.add("sibyl"); - EN_LAST_LIST.add("fred"); - EN_LAST_LIST.add("liam"); - EN_LAST_LIST.add("wolf"); - EN_LAST_LIST.add("sy"); - EN_LAST_LIST.add("mann"); - EN_LAST_LIST.add("lome"); - EN_LAST_LIST.add("josh"); - EN_LAST_LIST.add("ta"); - EN_LAST_LIST.add("flower"); - EN_LAST_LIST.add("te"); - EN_LAST_LIST.add("hill"); - EN_LAST_LIST.add("stan"); - EN_LAST_LIST.add("mand"); - EN_LAST_LIST.add("stal"); - EN_LAST_LIST.add("to"); - EN_LAST_LIST.add("bur"); - EN_LAST_LIST.add("dys"); - EN_LAST_LIST.add("ty"); - EN_LAST_LIST.add("ice"); - EN_LAST_LIST.add("woolf"); - EN_LAST_LIST.add("jean"); - EN_LAST_LIST.add("wood"); - EN_LAST_LIST.add("bard"); - EN_LAST_LIST.add("zel"); - EN_LAST_LIST.add("crane"); - EN_LAST_LIST.add("zer"); - EN_LAST_LIST.add("va"); - EN_LAST_LIST.add("lice"); - EN_LAST_LIST.add("ve"); - EN_LAST_LIST.add("frey"); - EN_LAST_LIST.add("vi"); - EN_LAST_LIST.add("wyatt"); - EN_LAST_LIST.add("thia"); - EN_LAST_LIST.add("sing"); - EN_LAST_LIST.add("coln"); - EN_LAST_LIST.add("vy"); - EN_LAST_LIST.add("colm"); - EN_LAST_LIST.add("nold"); - EN_LAST_LIST.add("cole"); - EN_LAST_LIST.add("dams"); - EN_LAST_LIST.add("we"); - EN_LAST_LIST.add("jill"); - EN_LAST_LIST.add("gai"); - EN_LAST_LIST.add("kim"); - EN_LAST_LIST.add("kin"); - EN_LAST_LIST.add("ien"); - EN_LAST_LIST.add("gan"); - EN_LAST_LIST.add("kit"); - EN_LAST_LIST.add("nolds"); - EN_LAST_LIST.add("drow"); - EN_LAST_LIST.add("gar"); - EN_LAST_LIST.add("liet"); - EN_LAST_LIST.add("wy"); - EN_LAST_LIST.add("xe"); - EN_LAST_LIST.add("bart"); - EN_LAST_LIST.add("stone"); - EN_LAST_LIST.add("thodore"); - EN_LAST_LIST.add("ster"); - EN_LAST_LIST.add("mark"); - EN_LAST_LIST.add("xy"); - EN_LAST_LIST.add("jeff"); - EN_LAST_LIST.add("laide"); - EN_LAST_LIST.add("jeames"); - EN_LAST_LIST.add("ye"); - EN_LAST_LIST.add("mon"); - EN_LAST_LIST.add("mos"); - EN_LAST_LIST.add("maud"); - EN_LAST_LIST.add("niah"); - EN_LAST_LIST.add("price"); - EN_LAST_LIST.add("zie"); - EN_LAST_LIST.add("yy"); - EN_LAST_LIST.add("van"); - EN_LAST_LIST.add("matt"); - EN_LAST_LIST.add("keith"); - EN_LAST_LIST.add("ze"); - EN_LAST_LIST.add("ckey"); - EN_LAST_LIST.add("cker"); - EN_LAST_LIST.add("zy"); - EN_LAST_LIST.add("gee"); - EN_LAST_LIST.add("north"); - EN_LAST_LIST.add("james"); - EN_LAST_LIST.add("claire"); - EN_LAST_LIST.add("gel"); - EN_LAST_LIST.add("nick"); - EN_LAST_LIST.add("gen"); - EN_LAST_LIST.add("ges"); - EN_LAST_LIST.add("ger"); - EN_LAST_LIST.add("kyle"); - EN_LAST_LIST.add("morse"); - EN_LAST_LIST.add("get"); - EN_LAST_LIST.add("tricia"); - EN_LAST_LIST.add("wilde"); - EN_LAST_LIST.add("cook"); - EN_LAST_LIST.add("sell"); - EN_LAST_LIST.add("thune"); - EN_LAST_LIST.add("nice"); - EN_LAST_LIST.add("pold"); - EN_LAST_LIST.add("nore"); - EN_LAST_LIST.add("pole"); - EN_LAST_LIST.add("tours"); - EN_LAST_LIST.add("xia"); - EN_LAST_LIST.add("niel"); - EN_LAST_LIST.add("tab"); - EN_LAST_LIST.add("ven"); - EN_LAST_LIST.add("ver"); - EN_LAST_LIST.add("lotte"); - EN_LAST_LIST.add("vey"); - EN_LAST_LIST.add("niei"); - EN_LAST_LIST.add("webb"); - EN_LAST_LIST.add("cooke"); - EN_LAST_LIST.add("gia"); - EN_LAST_LIST.add("lind"); - EN_LAST_LIST.add("gie"); - EN_LAST_LIST.add("dave"); - EN_LAST_LIST.add("ruth"); - EN_LAST_LIST.add("cott"); - EN_LAST_LIST.add("ling"); - EN_LAST_LIST.add("line"); - EN_LAST_LIST.add("cah"); - EN_LAST_LIST.add("gil"); - EN_LAST_LIST.add("cam"); - EN_LAST_LIST.add("ckle"); - EN_LAST_LIST.add("leen"); - EN_LAST_LIST.add("can"); - EN_LAST_LIST.add("zoe"); - EN_LAST_LIST.add("cas"); - EN_LAST_LIST.add("car"); - EN_LAST_LIST.add("buck"); - EN_LAST_LIST.add("wells"); - EN_LAST_LIST.add("ine"); - EN_LAST_LIST.add("ing"); - EN_LAST_LIST.add("will"); - EN_LAST_LIST.add("rhys"); - EN_LAST_LIST.add("rusk"); - EN_LAST_LIST.add("jack"); - EN_LAST_LIST.add("ledk"); - EN_LAST_LIST.add("stowe"); - EN_LAST_LIST.add("york"); - EN_LAST_LIST.add("hearst"); - EN_LAST_LIST.add("reade"); - EN_LAST_LIST.add("loyd"); - EN_LAST_LIST.add("wild"); - EN_LAST_LIST.add("seph"); - EN_LAST_LIST.add("gust"); - EN_LAST_LIST.add("sper"); + /** + * 英文名称 + */ + public static final String[] EN_FIRST_LIST = { + "Ter", "Wind", "Buck", "Glo", "Ray", "Black", "Bright", "Claire", "Blithe", "Vir", + "O'Ca", "Rams", "Dawn", "Kirk", "Beck", "Mill", "Hob", "Hod", "Fitch", "Wins", + "Gals", "Boyd", "Myr", "Tours", "Hoo", "Dave", "Steele", "Ruth", "Brian", "Dier", + "Mike", "Hoy", "Piers", "Lind", "Bill", "Booth", "A", "Ab", "Ser", "June", "Ac", + "B", "Ad", "E", "F", "Brews", "Ag", "Chil", "Flo", "I", "Elroy", "Al", "L", "Tha", + "An", "Paul", "O", "Beer", "Hutt", "The", "Ar", "Leif", "As", "Baird", "S", "At", + "Au", "U", "Stra", "Jud", "Tho", "Dia", "Doug", "God", "Fast", "Ba", "Bea", "Lyn", + "Walsh", "Be", "Dil", "Lyt", "Bi", "Bel", "Scrip", "Jus", "Ben", "Gos", "Gor", "Bo", + "Hicks", "Ber", "Tris", "Bet", "Tif", "Hale", "Bes", "Joan", "Pad", "Bu", "Hearst", + "Wol", "Reg", "Woo", "By", "Pag", "Tim", "Pal", "Crich", "Todd", "Pan", "Cha", "Sibyl", + "Ca", "Bing", "Par", "Yves", "Bran", "Ce", "Ade", "Rex", "Pau", "Rey", "Pay", "Co", + "Brad", "Sha", "Stone", "She", "Need", "Cu", "Cy", "Tess", "North", "Da", "Christ", + "Frances", "De", "Gold", "Di", "Oisen", "Do", "Cis", "Fox", "Dean", "Fow", "Sid", + "Sig", "Brooke", "Du", "Dy", "Samp", "Gra", "Sin", "Gre", "Smed", "Ed", "Gri", "Ef", + "Eg", "Ei", "Gro", "O'Con", "Bird", "El", "Em", "Fors", "Er", "Holt", "Es", "Woolf", + "Eu", "Field", "Kris", "Hub", "Hud", "Crai", "Rho", "Boyce", "Fa", "Hug", "Hul", "Fe", + "Hun", "Lynch", "Grant", "Hum", "Young", "Kent", "Bil", "Fo", "Bir", "Hux", "Pea", + "Joel", "Peg", "White", "Fre", "Pen", "Cla", "Ga", "Ford", "Nan", "Per", "Cle", "Ge", + "Pet", "Nat", "John", "Crane", "Cly", "Ode", "Browne", "Dob", "Back", "Kerr", "Ha", + "Bach", "He", "Phil", "Hood", "Neil", "Ever", "Dol", "Hi", "Gun", "Don", "Pear", "Gus", + "Ho", "Guy", "Dou", "Hu", "Mac", "Troy", "Mab", "Doy", "Hy", "Mag", "Tom", "Morse", + "Bla", "Mal", "Hart", "Swift", "Man", "Bell", "Mar", "Mau", "Wilde", "Mat", "May", + "In", "Max", "Ir", "Shaw", "Beard", "Bly", "Phi", "Ja", "Je", "Cof", "Wyatt", "Com", + "Col", "Coo", "Con", "James", "Jo", "Cop", "Cor", "Cot", "Cow", "Ju", "Croft", "Jane", + "Son", "Nel", "Ka", "Lan", "Sou", "Lam", "Pit", "Ke", "Lar", "Frank", "Lat", "New", + "Lau", "Horn", "Tra", "Law", "Snow", "Tre", "Als", "Dry", "Bob", "Stowe", "Brid", + "Chris", "Tru", "Thodore", "Tate", "Le", "Gwen", "Li", "Yule", "Bon", "Alick", "Saul", + "Lo", "Rob", "Rod", "Bos", "Lu", "Deir", "Bow", "Ly", "Meg", "Vogt", "Ron", "Browning", + "Nell", "Roo", "Ma", "Mel", "Broad", "Price", "Eve", "Jeames", "Mc", "Ros", "Me", "Mer", + "Mi", "Wells", "Roy", "Kat", "Ann", "Drew", "Walk", "Giles", "Cro", "Mo", "Finn", "Quee", + "Chur", "Kay", "Sher", "Berg", "Mu", "Cry", "Phoe", "Quen", "My", "Lamb", "Na", "Maltz", + "Ne", "Dul", "Ni", "Glenn", "Dun", "Reade", "No", "Eips", "Lea", "Ny", "Duke", "Noah", + "Lee", "Jac", "Bra", "Tur", "Faulk", "Lei", "Tut", "Len", "Oc", "Yvon", "Jan", "Leo", + "Og", "Bert", "Les", "Shel", "Ol", "Shei", "Bro", "Lew", "Sta", "Jay", "Or", "Troll", + "Os", "Bru", "Ralph", "Ste", "Ot", "Bald", "Blan", "Bry", "Pa", "Dunn", "Reed", "Pe", + "Bush", "Theo", "Sweet", "Cooke", "Pi", "Cum", "Bess", "Po", "Cur", "Keith", "Cliff", + "Gill", "Demp", "Pu", "Hous", "Poe", "Mid", "Mig", "Grote", "Spring", "Pol", "Abra", + "Pop", "Mil", "Ara", "Sur", "Por", "Kel", "Min", "Ken", "Kep", "Bloom", "Ian", "Faithe", + "Sean", "Fran", "Ker", "Bloor", "Sails", "Wheat", "Arm", "Key", "Quil", "Pull", "Hill", + "Stan", "Kath", "Dodd", "Ra", "Quin", "Lionel", "Bron", "Jones", "Re", "Ri", "Bul", + "Josh", "Clar", "Bun", "Wolf", "Ro", "Mans", "Tout", "Bur", "But", "Ru", "Ry", "Jef", + "Noel", "Sa", "Lil", "Hag", "Lin", "Rus", "Se", "Hal", "Jen", "Han", "Ham", "Si", "Jer", + "Har", "Shir", "Jes", "So", "Liz", "Scott", "Sains", "Haw", "Att", "Haz", "Hay", "Su", + "Xan", "Sy", "Pri", "Yale", "Fitz", "Crom", "Strong", "Ta", "Harte", "Swin", "Leigh", + "Yvette", "Te", "Pru", "Ti", "Ives", "Cyn", "To", "Aus", "Gray", "Ty", "Syl", "Wylde", + "Fred", "Yonng", "Free", "Kim", "Nor", "Miles", "Penn", "Gal", "Kip", "Yea", "Ward", + "Vaug", "Keats", "Kit", "Long", "Gas", "Gar", "Yed", "Up", "Wag", "Holmes", "Ur", "Camp", + "Simp", "Brown", "Wal", "Watt", "Wan", "Yer", "Wright", "Yet", "Mark", "Clare", "War", + "Va", "Wat", "Greg", "Funk", "Bard", "Way", "Stel", "Camil", "Ve", "Dutt", "Clark", "Vi", + "Toyn", "Mond", "Grey", "Wood", "Moi", "Hed", "Pul", "Moll", "Wa", "Jean", "Mol", "Moo", + "Hugh", "Mon", "Stein", "Jim", "Hen", "Bruce", "Mor", "Wh", "Fan", "Wi", "Mot", "Her", + "Pound", "Wo", "Hew", "Wool", "Green", "Bart", "Fay", "Zim", "Mick", "Wy", "Van", "Word", + "Thorn", "Sharp", "Judd", "Xa", "Xe", "Phyl", "Matt", "Twain", "Gene", "Dwight", "Child", + "Carr", "Carl", "Smith", "House", "Lon", "Ye", "Mont", "Gem", "Lor", "Lou", "Ear", "Jill", + "Geor", "Wen", "Stil", "Wes", "Wer", "Za", "Cook", "Chad", "Cleve", "Grif", "Ze", "Cash", + "Cham", "Joyce", "More", "Chan", "Loui", "Chap", "Thom", "Zo", "Char", "Chau", "Maug", + "Priest", "Maud", "Zang", "Crofts", "Hil", "Fel", "Dai", "Dal", "Dan", "Cons", "Veb", + "Fer", "Dar", "Geof", "Blair", "Tab", "Jeff", "Whee", "Wilhel", "Chloe", "Borg", "Tam", + "Ver", "Grace", "Webb", "Quinn", "Tay", "Burne", "King", "Webs", "Job", "Roxan", "Joe", + "Gib", "Kyle", "Cae", "Nick", "Hume", "Jon", "Mur", "Gil", "Jor", "Louie", "Cal", "Gis", + "Jou", "Can", "Zoe", "Car", "Joy", "Wil", "Burns", "Gail", "Win", "Sam", "Sal", "Louis", + "Spen", "San", "Wild", "Sas", "York", "Lance", "Beau", "Saw", "Hodg", "Glad", "Claude", + "Sax", "Brook", "Kings", "Cher", "Gale", "Ches", "Rhys", "Earl", "Will", "Pritt", "Rusk", + "Jack", "Deb", "Bab", "Flower", "Fin", "O'Neil", "Den", "Dick", "Thomp", "Der", "Vic", + "Bar", "Ted", "Boyle", "Stuart", "Whit", "Bau", "Rae", "Blume", "Vin", "Bryce", "Ten", + "Gla", "Vio", "Moul", "Tem", "Ran" + }; + + /** + * 生成随机中文名 + * + * @return 中文名 + */ + public static String getCnName() { + String head = CN_LAST_NAME[(int) (Math.random() * CN_LAST_NAME.length)]; + String tail = CN_FIRST_NAME[(int) (Math.random() * CN_FIRST_NAME.length)]; + return head + tail; } - public static void initCN_LAST_NAME() { - CN_LAST_NAME.add("怀"); - CN_LAST_NAME.add("老"); - CN_LAST_NAME.add("堂"); - CN_LAST_NAME.add("考"); - CN_LAST_NAME.add("太史"); - CN_LAST_NAME.add("逄"); - CN_LAST_NAME.add("栋"); - CN_LAST_NAME.add("闻人"); - CN_LAST_NAME.add("树"); - CN_LAST_NAME.add("栗"); - CN_LAST_NAME.add("候"); - CN_LAST_NAME.add("通"); - CN_LAST_NAME.add("速"); - CN_LAST_NAME.add("校"); - CN_LAST_NAME.add("逢"); - CN_LAST_NAME.add("性"); - CN_LAST_NAME.add("倪"); - CN_LAST_NAME.add("逮"); - CN_LAST_NAME.add("逯"); - CN_LAST_NAME.add("堵"); - CN_LAST_NAME.add("栾"); - CN_LAST_NAME.add("耿"); - CN_LAST_NAME.add("桂"); - CN_LAST_NAME.add("聂"); - CN_LAST_NAME.add("衅"); - CN_LAST_NAME.add("遇"); - CN_LAST_NAME.add("聊"); - CN_LAST_NAME.add("行"); - CN_LAST_NAME.add("桐"); - CN_LAST_NAME.add("桑"); - CN_LAST_NAME.add("道"); - CN_LAST_NAME.add("桓"); - CN_LAST_NAME.add("塔"); - CN_LAST_NAME.add("硕"); - CN_LAST_NAME.add("尤念"); - CN_LAST_NAME.add("塞"); - CN_LAST_NAME.add("衡"); - CN_LAST_NAME.add("衣"); - CN_LAST_NAME.add("桥"); - CN_LAST_NAME.add("令狐"); - CN_LAST_NAME.add("表"); - CN_LAST_NAME.add("张简"); - CN_LAST_NAME.add("恭"); - CN_LAST_NAME.add("偶"); - CN_LAST_NAME.add("衷"); - CN_LAST_NAME.add("项"); - CN_LAST_NAME.add("须"); - CN_LAST_NAME.add("恽"); - CN_LAST_NAME.add("顾"); - CN_LAST_NAME.add("顿"); - CN_LAST_NAME.add("梁"); - CN_LAST_NAME.add("袁"); - CN_LAST_NAME.add("漆雕"); - CN_LAST_NAME.add("梅"); - CN_LAST_NAME.add("傅"); - CN_LAST_NAME.add("肇"); - CN_LAST_NAME.add("悉"); - CN_LAST_NAME.add("夏侯"); - CN_LAST_NAME.add("频"); - CN_LAST_NAME.add("邓"); - CN_LAST_NAME.add("肖"); - CN_LAST_NAME.add("邗"); - CN_LAST_NAME.add("邛"); - CN_LAST_NAME.add("章佳"); - CN_LAST_NAME.add("颜"); - CN_LAST_NAME.add("邝"); - CN_LAST_NAME.add("悟"); - CN_LAST_NAME.add("邢"); - CN_LAST_NAME.add("那"); - CN_LAST_NAME.add("肥"); - CN_LAST_NAME.add("碧"); - CN_LAST_NAME.add("储"); - CN_LAST_NAME.add("墨"); - CN_LAST_NAME.add("邬"); - CN_LAST_NAME.add("袭"); - CN_LAST_NAME.add("邰"); - CN_LAST_NAME.add("邱"); - CN_LAST_NAME.add("邴"); - CN_LAST_NAME.add("邵"); - CN_LAST_NAME.add("碧鲁"); - CN_LAST_NAME.add("邶"); - CN_LAST_NAME.add("邸"); - CN_LAST_NAME.add("邹"); - CN_LAST_NAME.add("检"); - CN_LAST_NAME.add("郁"); - CN_LAST_NAME.add("郎"); - CN_LAST_NAME.add("风"); - CN_LAST_NAME.add("郏"); - CN_LAST_NAME.add("郑"); - CN_LAST_NAME.add("裔"); - CN_LAST_NAME.add("郗"); - CN_LAST_NAME.add("裘"); - CN_LAST_NAME.add("郜"); - CN_LAST_NAME.add("郝"); - CN_LAST_NAME.add("飞"); - CN_LAST_NAME.add("烟"); - CN_LAST_NAME.add("惠"); - CN_LAST_NAME.add("胡"); - CN_LAST_NAME.add("胥"); - CN_LAST_NAME.add("郦"); - CN_LAST_NAME.add("僧"); - CN_LAST_NAME.add("第五"); - CN_LAST_NAME.add("磨"); - CN_LAST_NAME.add("僪"); - CN_LAST_NAME.add("由念"); - CN_LAST_NAME.add("士"); - CN_LAST_NAME.add("壬"); - CN_LAST_NAME.add("郭"); - CN_LAST_NAME.add("钟离"); - CN_LAST_NAME.add("森"); - CN_LAST_NAME.add("郯"); - CN_LAST_NAME.add("声"); - CN_LAST_NAME.add("裴"); - CN_LAST_NAME.add("郸"); - CN_LAST_NAME.add("都"); - CN_LAST_NAME.add("能"); - CN_LAST_NAME.add("鄂"); - CN_LAST_NAME.add("愈"); - CN_LAST_NAME.add("焉"); - CN_LAST_NAME.add("植"); - CN_LAST_NAME.add("夏"); - CN_LAST_NAME.add("褒"); - CN_LAST_NAME.add("夔"); - CN_LAST_NAME.add("夕"); - CN_LAST_NAME.add("夙"); - CN_LAST_NAME.add("多"); - CN_LAST_NAME.add("褚"); - CN_LAST_NAME.add("愚"); - CN_LAST_NAME.add("鄞"); - CN_LAST_NAME.add("鄢"); - CN_LAST_NAME.add("焦"); - CN_LAST_NAME.add("大"); - CN_LAST_NAME.add("天"); - CN_LAST_NAME.add("夫"); - CN_LAST_NAME.add("脱"); - CN_LAST_NAME.add("夷"); - CN_LAST_NAME.add("示"); - CN_LAST_NAME.add("礼"); - CN_LAST_NAME.add("祁"); - CN_LAST_NAME.add("允"); - CN_LAST_NAME.add("元"); - CN_LAST_NAME.add("充"); - CN_LAST_NAME.add("兆"); - CN_LAST_NAME.add("酆"); - CN_LAST_NAME.add("奇"); - CN_LAST_NAME.add("祈"); - CN_LAST_NAME.add("慈"); - CN_LAST_NAME.add("奈"); - CN_LAST_NAME.add("奉"); - CN_LAST_NAME.add("光"); - CN_LAST_NAME.add("慎"); - CN_LAST_NAME.add("段干"); - CN_LAST_NAME.add("酒"); - CN_LAST_NAME.add("慕"); - CN_LAST_NAME.add("奕"); - CN_LAST_NAME.add("祖"); - CN_LAST_NAME.add("党"); - CN_LAST_NAME.add("楚"); - CN_LAST_NAME.add("奚"); - CN_LAST_NAME.add("祝"); - CN_LAST_NAME.add("祢"); - CN_LAST_NAME.add("但念"); - CN_LAST_NAME.add("全"); - CN_LAST_NAME.add("公"); - CN_LAST_NAME.add("六"); - CN_LAST_NAME.add("祭"); - CN_LAST_NAME.add("兰"); - CN_LAST_NAME.add("关"); - CN_LAST_NAME.add("兴"); - CN_LAST_NAME.add("其"); - CN_LAST_NAME.add("饶"); - CN_LAST_NAME.add("典"); - CN_LAST_NAME.add("养"); - CN_LAST_NAME.add("楼"); - CN_LAST_NAME.add("腾"); - CN_LAST_NAME.add("冀"); - CN_LAST_NAME.add("覃"); - CN_LAST_NAME.add("禄"); - CN_LAST_NAME.add("冉"); - CN_LAST_NAME.add("熊"); - CN_LAST_NAME.add("福"); - CN_LAST_NAME.add("冒"); - CN_LAST_NAME.add("首"); - CN_LAST_NAME.add("富察"); - CN_LAST_NAME.add("香"); - CN_LAST_NAME.add("禚"); - CN_LAST_NAME.add("军"); - CN_LAST_NAME.add("农"); - CN_LAST_NAME.add("冠"); - CN_LAST_NAME.add("漆念"); - CN_LAST_NAME.add("妫"); - CN_LAST_NAME.add("冯"); - CN_LAST_NAME.add("况"); - CN_LAST_NAME.add("冷"); - CN_LAST_NAME.add("禹"); - CN_LAST_NAME.add("冼"); - CN_LAST_NAME.add("禽"); - CN_LAST_NAME.add("禾"); - CN_LAST_NAME.add("释"); - CN_LAST_NAME.add("秋"); - CN_LAST_NAME.add("始"); - CN_LAST_NAME.add("凌"); - CN_LAST_NAME.add("种"); - CN_LAST_NAME.add("野"); - CN_LAST_NAME.add("金"); - CN_LAST_NAME.add("姒"); - CN_LAST_NAME.add("姓"); - CN_LAST_NAME.add("委"); - CN_LAST_NAME.add("燕"); - CN_LAST_NAME.add("秘"); - CN_LAST_NAME.add("姚"); - CN_LAST_NAME.add("姜"); - CN_LAST_NAME.add("解"); - CN_LAST_NAME.add("凤"); - CN_LAST_NAME.add("秦"); - CN_LAST_NAME.add("臧"); - CN_LAST_NAME.add("巫马"); - CN_LAST_NAME.add("姬"); - CN_LAST_NAME.add("凭"); - CN_LAST_NAME.add("称"); - CN_LAST_NAME.add("呼延"); - CN_LAST_NAME.add("乌雅"); - CN_LAST_NAME.add("出"); - CN_LAST_NAME.add("函"); - CN_LAST_NAME.add("言"); - CN_LAST_NAME.add("刀"); - CN_LAST_NAME.add("刁"); - CN_LAST_NAME.add("威"); - CN_LAST_NAME.add("娄"); - CN_LAST_NAME.add("戈"); - CN_LAST_NAME.add("樊"); - CN_LAST_NAME.add("戊"); - CN_LAST_NAME.add("程"); - CN_LAST_NAME.add("戎"); - CN_LAST_NAME.add("税"); - CN_LAST_NAME.add("戏"); - CN_LAST_NAME.add("成"); - CN_LAST_NAME.add("刑"); - CN_LAST_NAME.add("舒"); - CN_LAST_NAME.add("夹谷"); - CN_LAST_NAME.add("端木"); - CN_LAST_NAME.add("刘"); - CN_LAST_NAME.add("战"); - CN_LAST_NAME.add("戚"); - CN_LAST_NAME.add("刚"); - CN_LAST_NAME.add("舜"); - CN_LAST_NAME.add("初"); - CN_LAST_NAME.add("戢"); - CN_LAST_NAME.add("利"); - CN_LAST_NAME.add("别"); - CN_LAST_NAME.add("爱"); - CN_LAST_NAME.add("戴"); - CN_LAST_NAME.add("户"); - CN_LAST_NAME.add("稽"); - CN_LAST_NAME.add("訾"); - CN_LAST_NAME.add("房"); - CN_LAST_NAME.add("所"); - CN_LAST_NAME.add("穆"); - CN_LAST_NAME.add("扈"); - CN_LAST_NAME.add("前"); - CN_LAST_NAME.add("才"); - CN_LAST_NAME.add("剑"); - CN_LAST_NAME.add("牛"); - CN_LAST_NAME.add("牟"); - CN_LAST_NAME.add("牢"); - CN_LAST_NAME.add("剧"); - CN_LAST_NAME.add("牧"); - CN_LAST_NAME.add("马"); - CN_LAST_NAME.add("扬"); - CN_LAST_NAME.add("良"); - CN_LAST_NAME.add("穰"); - CN_LAST_NAME.add("牵"); - CN_LAST_NAME.add("扶"); - CN_LAST_NAME.add("驹"); - CN_LAST_NAME.add("詹"); - CN_LAST_NAME.add("空"); - CN_LAST_NAME.add("艾"); - CN_LAST_NAME.add("承"); - CN_LAST_NAME.add("檀"); - CN_LAST_NAME.add("犁"); - CN_LAST_NAME.add("节"); - CN_LAST_NAME.add("抄"); - CN_LAST_NAME.add("骆"); - CN_LAST_NAME.add("司徒"); - CN_LAST_NAME.add("骑"); - CN_LAST_NAME.add("芒"); - CN_LAST_NAME.add("马佳"); - CN_LAST_NAME.add("抗"); - CN_LAST_NAME.add("折"); - CN_LAST_NAME.add("力"); - CN_LAST_NAME.add("功"); - CN_LAST_NAME.add("务"); - CN_LAST_NAME.add("窦"); - CN_LAST_NAME.add("芮"); - CN_LAST_NAME.add("仲孙"); - CN_LAST_NAME.add("励"); - CN_LAST_NAME.add("花"); - CN_LAST_NAME.add("万俟"); - CN_LAST_NAME.add("劳"); - CN_LAST_NAME.add("犹"); - CN_LAST_NAME.add("势"); - CN_LAST_NAME.add("狂"); - CN_LAST_NAME.add("狄"); - CN_LAST_NAME.add("勇"); - CN_LAST_NAME.add("苌"); - CN_LAST_NAME.add("苍"); - CN_LAST_NAME.add("苏"); - CN_LAST_NAME.add("苑"); - CN_LAST_NAME.add("苗"); - CN_LAST_NAME.add("高"); - CN_LAST_NAME.add("招"); - CN_LAST_NAME.add("拜"); - CN_LAST_NAME.add("苟"); - CN_LAST_NAME.add("章"); - CN_LAST_NAME.add("勤"); - CN_LAST_NAME.add("童"); - CN_LAST_NAME.add("苦"); - CN_LAST_NAME.add("宇文"); - CN_LAST_NAME.add("独"); - CN_LAST_NAME.add("竭"); - CN_LAST_NAME.add("端"); - CN_LAST_NAME.add("拱"); - CN_LAST_NAME.add("英"); - CN_LAST_NAME.add("竹"); - CN_LAST_NAME.add("竺"); - CN_LAST_NAME.add("勾"); - CN_LAST_NAME.add("百里"); - CN_LAST_NAME.add("茂"); - CN_LAST_NAME.add("范"); - CN_LAST_NAME.add("笃"); - CN_LAST_NAME.add("包"); - CN_LAST_NAME.add("茅"); - CN_LAST_NAME.add("茆"); - CN_LAST_NAME.add("謇"); - CN_LAST_NAME.add("东方"); - CN_LAST_NAME.add("化"); - CN_LAST_NAME.add("北"); - CN_LAST_NAME.add("次"); - CN_LAST_NAME.add("匡"); - CN_LAST_NAME.add("符"); - CN_LAST_NAME.add("欧"); - CN_LAST_NAME.add("笪"); - CN_LAST_NAME.add("第"); - CN_LAST_NAME.add("嬴"); - CN_LAST_NAME.add("茹"); - CN_LAST_NAME.add("区"); - CN_LAST_NAME.add("谷梁"); - CN_LAST_NAME.add("微生"); - CN_LAST_NAME.add("南宫"); - CN_LAST_NAME.add("荀"); - CN_LAST_NAME.add("千"); - CN_LAST_NAME.add("东门"); - CN_LAST_NAME.add("荆"); - CN_LAST_NAME.add("华"); - CN_LAST_NAME.add("魏"); - CN_LAST_NAME.add("卑"); - CN_LAST_NAME.add("卓"); - CN_LAST_NAME.add("答"); - CN_LAST_NAME.add("孔"); - CN_LAST_NAME.add("单"); - CN_LAST_NAME.add("字"); - CN_LAST_NAME.add("南"); - CN_LAST_NAME.add("孙"); - CN_LAST_NAME.add("澹台"); - CN_LAST_NAME.add("孛"); - CN_LAST_NAME.add("卜"); - CN_LAST_NAME.add("孝"); - CN_LAST_NAME.add("卞"); - CN_LAST_NAME.add("孟"); - CN_LAST_NAME.add("占"); - CN_LAST_NAME.add("止"); - CN_LAST_NAME.add("卢"); - CN_LAST_NAME.add("荣"); - CN_LAST_NAME.add("季"); - CN_LAST_NAME.add("荤"); - CN_LAST_NAME.add("步"); - CN_LAST_NAME.add("学"); - CN_LAST_NAME.add("武"); - CN_LAST_NAME.add("歧"); - CN_LAST_NAME.add("卫"); - CN_LAST_NAME.add("卯"); - CN_LAST_NAME.add("印"); - CN_LAST_NAME.add("危"); - CN_LAST_NAME.add("却"); - CN_LAST_NAME.add("卷"); - CN_LAST_NAME.add("捷"); - CN_LAST_NAME.add("卿"); - CN_LAST_NAME.add("简"); - CN_LAST_NAME.add("宁"); - CN_LAST_NAME.add("玄"); - CN_LAST_NAME.add("历"); - CN_LAST_NAME.add("宇"); - CN_LAST_NAME.add("守"); - CN_LAST_NAME.add("安"); - CN_LAST_NAME.add("玉"); - CN_LAST_NAME.add("厉"); - CN_LAST_NAME.add("穰念"); - CN_LAST_NAME.add("宋"); - CN_LAST_NAME.add("王"); - CN_LAST_NAME.add("掌"); - CN_LAST_NAME.add("完"); - CN_LAST_NAME.add("厍"); - CN_LAST_NAME.add("宏"); - CN_LAST_NAME.add("宓"); - CN_LAST_NAME.add("公羊"); - CN_LAST_NAME.add("箕"); - CN_LAST_NAME.add("宗"); - CN_LAST_NAME.add("莘"); - CN_LAST_NAME.add("官"); - CN_LAST_NAME.add("厚"); - CN_LAST_NAME.add("定"); - CN_LAST_NAME.add("宛"); - CN_LAST_NAME.add("宜"); - CN_LAST_NAME.add("宝"); - CN_LAST_NAME.add("实"); - CN_LAST_NAME.add("原"); - CN_LAST_NAME.add("管"); - CN_LAST_NAME.add("计"); - CN_LAST_NAME.add("妫念"); - CN_LAST_NAME.add("宣"); - CN_LAST_NAME.add("接"); - CN_LAST_NAME.add("宦"); - CN_LAST_NAME.add("让"); - CN_LAST_NAME.add("莫"); - CN_LAST_NAME.add("宫"); - CN_LAST_NAME.add("环"); - CN_LAST_NAME.add("宰"); - CN_LAST_NAME.add("莱"); - CN_LAST_NAME.add("殳"); - CN_LAST_NAME.add("段"); - CN_LAST_NAME.add("家"); - CN_LAST_NAME.add("殷"); - CN_LAST_NAME.add("许"); - CN_LAST_NAME.add("容"); - CN_LAST_NAME.add("张廖"); - CN_LAST_NAME.add("宾"); - CN_LAST_NAME.add("宿"); - CN_LAST_NAME.add("菅"); - CN_LAST_NAME.add("寇"); - CN_LAST_NAME.add("及"); - CN_LAST_NAME.add("毋"); - CN_LAST_NAME.add("友"); - CN_LAST_NAME.add("富"); - CN_LAST_NAME.add("双"); - CN_LAST_NAME.add("羊舌"); - CN_LAST_NAME.add("母"); - CN_LAST_NAME.add("寒"); - CN_LAST_NAME.add("锺离"); - CN_LAST_NAME.add("毓"); - CN_LAST_NAME.add("叔"); - CN_LAST_NAME.add("毕"); - CN_LAST_NAME.add("诗"); - CN_LAST_NAME.add("受"); - CN_LAST_NAME.add("毛"); - CN_LAST_NAME.add("古"); - CN_LAST_NAME.add("召"); - CN_LAST_NAME.add("揭"); - CN_LAST_NAME.add("班"); - CN_LAST_NAME.add("可"); - CN_LAST_NAME.add("台"); - CN_LAST_NAME.add("史"); - CN_LAST_NAME.add("说"); - CN_LAST_NAME.add("叶"); - CN_LAST_NAME.add("寸"); - CN_LAST_NAME.add("诸"); - CN_LAST_NAME.add("司"); - CN_LAST_NAME.add("诺"); - CN_LAST_NAME.add("寻"); - CN_LAST_NAME.add("佟佳"); - CN_LAST_NAME.add("寿"); - CN_LAST_NAME.add("封"); - CN_LAST_NAME.add("理"); - CN_LAST_NAME.add("将"); - CN_LAST_NAME.add("谈"); - CN_LAST_NAME.add("合"); - CN_LAST_NAME.add("尉"); - CN_LAST_NAME.add("吉"); - CN_LAST_NAME.add("濮阳"); - CN_LAST_NAME.add("同"); - CN_LAST_NAME.add("谌"); - CN_LAST_NAME.add("后"); - CN_LAST_NAME.add("谏"); - CN_LAST_NAME.add("少"); - CN_LAST_NAME.add("向"); - CN_LAST_NAME.add("尔"); - CN_LAST_NAME.add("吕"); - CN_LAST_NAME.add("尚"); - CN_LAST_NAME.add("封念"); - CN_LAST_NAME.add("谢"); - CN_LAST_NAME.add("尤"); - CN_LAST_NAME.add("营"); - CN_LAST_NAME.add("琦"); - CN_LAST_NAME.add("尧"); - CN_LAST_NAME.add("萧"); - CN_LAST_NAME.add("萨"); - CN_LAST_NAME.add("谬"); - CN_LAST_NAME.add("谭"); - CN_LAST_NAME.add("谯"); - CN_LAST_NAME.add("琴"); - CN_LAST_NAME.add("水"); - CN_LAST_NAME.add("吴"); - CN_LAST_NAME.add("谷"); - CN_LAST_NAME.add("永"); - CN_LAST_NAME.add("尹"); - CN_LAST_NAME.add("吾"); - CN_LAST_NAME.add("尾"); - CN_LAST_NAME.add("局"); - CN_LAST_NAME.add("求"); - CN_LAST_NAME.add("居"); - CN_LAST_NAME.add("豆"); - CN_LAST_NAME.add("屈"); - CN_LAST_NAME.add("汉"); - CN_LAST_NAME.add("告"); - CN_LAST_NAME.add("籍"); - CN_LAST_NAME.add("展"); - CN_LAST_NAME.add("汗"); - CN_LAST_NAME.add("西门"); - CN_LAST_NAME.add("员"); - CN_LAST_NAME.add("葛"); - CN_LAST_NAME.add("汝"); - CN_LAST_NAME.add("瑞"); - CN_LAST_NAME.add("江"); - CN_LAST_NAME.add("屠"); - CN_LAST_NAME.add("池"); - CN_LAST_NAME.add("象"); - CN_LAST_NAME.add("董"); - CN_LAST_NAME.add("汤"); - CN_LAST_NAME.add("周"); - CN_LAST_NAME.add("摩"); - CN_LAST_NAME.add("汪"); - CN_LAST_NAME.add("山"); - CN_LAST_NAME.add("汲"); - CN_LAST_NAME.add("米"); - CN_LAST_NAME.add("类"); - CN_LAST_NAME.add("鱼"); - CN_LAST_NAME.add("呼"); - CN_LAST_NAME.add("鲁"); - CN_LAST_NAME.add("宗政"); - CN_LAST_NAME.add("沃"); - CN_LAST_NAME.add("针"); - CN_LAST_NAME.add("沈"); - CN_LAST_NAME.add("蒉"); - CN_LAST_NAME.add("钊"); - CN_LAST_NAME.add("貊"); - CN_LAST_NAME.add("蒋"); - CN_LAST_NAME.add("和"); - CN_LAST_NAME.add("鲍"); - CN_LAST_NAME.add("宰父"); - CN_LAST_NAME.add("咎"); - CN_LAST_NAME.add("沐"); - CN_LAST_NAME.add("岑"); - CN_LAST_NAME.add("撒"); - CN_LAST_NAME.add("粘"); - CN_LAST_NAME.add("沙"); - CN_LAST_NAME.add("蒙"); - CN_LAST_NAME.add("鲜"); - CN_LAST_NAME.add("钞"); - CN_LAST_NAME.add("钟"); - CN_LAST_NAME.add("粟"); - CN_LAST_NAME.add("钦"); - CN_LAST_NAME.add("璩"); - CN_LAST_NAME.add("钭"); - CN_LAST_NAME.add("钮"); - CN_LAST_NAME.add("蒯"); - CN_LAST_NAME.add("钱"); - CN_LAST_NAME.add("蒲"); - CN_LAST_NAME.add("岳"); - CN_LAST_NAME.add("咸"); - CN_LAST_NAME.add("蒿"); - CN_LAST_NAME.add("哀"); - CN_LAST_NAME.add("翦念"); - CN_LAST_NAME.add("铁"); - CN_LAST_NAME.add("仲长"); - CN_LAST_NAME.add("哈"); - CN_LAST_NAME.add("泉"); - CN_LAST_NAME.add("操"); - CN_LAST_NAME.add("铎"); - CN_LAST_NAME.add("法"); - CN_LAST_NAME.add("糜"); - CN_LAST_NAME.add("蓝"); - CN_LAST_NAME.add("蓟"); - CN_LAST_NAME.add("波"); - CN_LAST_NAME.add("泣"); - CN_LAST_NAME.add("泥"); - CN_LAST_NAME.add("蓬"); - CN_LAST_NAME.add("瓮"); - CN_LAST_NAME.add("泰"); - CN_LAST_NAME.add("银"); - CN_LAST_NAME.add("泷"); - CN_LAST_NAME.add("左丘"); - CN_LAST_NAME.add("系"); - CN_LAST_NAME.add("尉迟"); - CN_LAST_NAME.add("锁"); - CN_LAST_NAME.add("甄"); - CN_LAST_NAME.add("崇"); - CN_LAST_NAME.add("慕容"); - CN_LAST_NAME.add("洋"); - CN_LAST_NAME.add("锐"); - CN_LAST_NAME.add("唐"); - CN_LAST_NAME.add("崔"); - CN_LAST_NAME.add("甘"); - CN_LAST_NAME.add("错"); - CN_LAST_NAME.add("蔚"); - CN_LAST_NAME.add("洛"); - CN_LAST_NAME.add("贝"); - CN_LAST_NAME.add("生"); - CN_LAST_NAME.add("素"); - CN_LAST_NAME.add("贡"); - CN_LAST_NAME.add("蔡"); - CN_LAST_NAME.add("索"); - CN_LAST_NAME.add("用"); - CN_LAST_NAME.add("洪"); - CN_LAST_NAME.add("甫"); - CN_LAST_NAME.add("紫"); - CN_LAST_NAME.add("贯"); - CN_LAST_NAME.add("支"); - CN_LAST_NAME.add("贰"); - CN_LAST_NAME.add("田"); - CN_LAST_NAME.add("由"); - CN_LAST_NAME.add("贲"); - CN_LAST_NAME.add("甲"); - CN_LAST_NAME.add("申"); - CN_LAST_NAME.add("贵"); - CN_LAST_NAME.add("贸"); - CN_LAST_NAME.add("费"); - CN_LAST_NAME.add("改"); - CN_LAST_NAME.add("锺"); - CN_LAST_NAME.add("贺"); - CN_LAST_NAME.add("蔺"); - CN_LAST_NAME.add("纳喇"); - CN_LAST_NAME.add("贾"); - CN_LAST_NAME.add("资"); - CN_LAST_NAME.add("畅"); - CN_LAST_NAME.add("商"); - CN_LAST_NAME.add("镇"); - CN_LAST_NAME.add("嵇"); - CN_LAST_NAME.add("敏"); - CN_LAST_NAME.add("赏"); - CN_LAST_NAME.add("浑"); - CN_LAST_NAME.add("拓跋"); - CN_LAST_NAME.add("敖"); - CN_LAST_NAME.add("赖"); - CN_LAST_NAME.add("留"); - CN_LAST_NAME.add("赛"); - CN_LAST_NAME.add("敛"); - CN_LAST_NAME.add("镜"); - CN_LAST_NAME.add("轩辕"); - CN_LAST_NAME.add("鲜于"); - CN_LAST_NAME.add("赤"); - CN_LAST_NAME.add("浦"); - CN_LAST_NAME.add("赧"); - CN_LAST_NAME.add("赫"); - CN_LAST_NAME.add("敬"); - CN_LAST_NAME.add("浮"); - CN_LAST_NAME.add("赵"); - CN_LAST_NAME.add("海"); - CN_LAST_NAME.add("南门"); - CN_LAST_NAME.add("司马"); - CN_LAST_NAME.add("长"); - CN_LAST_NAME.add("涂"); - CN_LAST_NAME.add("申屠"); - CN_LAST_NAME.add("费莫"); - CN_LAST_NAME.add("薄"); - CN_LAST_NAME.add("善"); - CN_LAST_NAME.add("伦念"); - CN_LAST_NAME.add("文"); - CN_LAST_NAME.add("司空"); - CN_LAST_NAME.add("越"); - CN_LAST_NAME.add("斋"); - CN_LAST_NAME.add("疏"); - CN_LAST_NAME.add("斐"); - CN_LAST_NAME.add("公西"); - CN_LAST_NAME.add("薛"); - CN_LAST_NAME.add("斛"); - CN_LAST_NAME.add("喜"); - CN_LAST_NAME.add("綦"); - CN_LAST_NAME.add("长孙"); - CN_LAST_NAME.add("斯"); - CN_LAST_NAME.add("方"); - CN_LAST_NAME.add("喻"); - CN_LAST_NAME.add("梁丘"); - CN_LAST_NAME.add("於"); - CN_LAST_NAME.add("施"); - CN_LAST_NAME.add("公冶"); - CN_LAST_NAME.add("旁"); - CN_LAST_NAME.add("旅"); - CN_LAST_NAME.add("藏"); - CN_LAST_NAME.add("单于"); - CN_LAST_NAME.add("旗"); - CN_LAST_NAME.add("无"); - CN_LAST_NAME.add("淡"); - CN_LAST_NAME.add("巢"); - CN_LAST_NAME.add("藤"); - CN_LAST_NAME.add("左"); - CN_LAST_NAME.add("淦"); - CN_LAST_NAME.add("巧"); - CN_LAST_NAME.add("门"); - CN_LAST_NAME.add("巨"); - CN_LAST_NAME.add("藩"); - CN_LAST_NAME.add("巩"); - CN_LAST_NAME.add("闪"); - CN_LAST_NAME.add("巫"); - CN_LAST_NAME.add("闫"); - CN_LAST_NAME.add("闭"); - CN_LAST_NAME.add("问"); - CN_LAST_NAME.add("路"); - CN_LAST_NAME.add("己"); - CN_LAST_NAME.add("闳"); - CN_LAST_NAME.add("巴"); - CN_LAST_NAME.add("闵"); - CN_LAST_NAME.add("时"); - CN_LAST_NAME.add("旷"); - CN_LAST_NAME.add("闻"); - CN_LAST_NAME.add("闽"); - CN_LAST_NAME.add("闾"); - CN_LAST_NAME.add("丁"); - CN_LAST_NAME.add("市"); - CN_LAST_NAME.add("昂"); - CN_LAST_NAME.add("布"); - CN_LAST_NAME.add("清"); - CN_LAST_NAME.add("帅"); - CN_LAST_NAME.add("万"); - CN_LAST_NAME.add("师"); - CN_LAST_NAME.add("嘉"); - CN_LAST_NAME.add("希"); - CN_LAST_NAME.add("昌"); - CN_LAST_NAME.add("颛孙"); - CN_LAST_NAME.add("不"); - CN_LAST_NAME.add("阎"); - CN_LAST_NAME.add("明"); - CN_LAST_NAME.add("丑"); - CN_LAST_NAME.add("易"); - CN_LAST_NAME.add("昔"); - CN_LAST_NAME.add("帖"); - CN_LAST_NAME.add("世"); - CN_LAST_NAME.add("丘"); - CN_LAST_NAME.add("壤驷"); - CN_LAST_NAME.add("阙"); - CN_LAST_NAME.add("丙"); - CN_LAST_NAME.add("阚"); - CN_LAST_NAME.add("业"); - CN_LAST_NAME.add("帛"); - CN_LAST_NAME.add("丛"); - CN_LAST_NAME.add("东"); - CN_LAST_NAME.add("子车"); - CN_LAST_NAME.add("昝"); - CN_LAST_NAME.add("星"); - CN_LAST_NAME.add("渠"); - CN_LAST_NAME.add("严"); - CN_LAST_NAME.add("春"); - CN_LAST_NAME.add("温"); - CN_LAST_NAME.add("席"); - CN_LAST_NAME.add("中"); - CN_LAST_NAME.add("阮"); - CN_LAST_NAME.add("是"); - CN_LAST_NAME.add("丰"); - CN_LAST_NAME.add("阳"); - CN_LAST_NAME.add("阴"); - CN_LAST_NAME.add("常"); - CN_LAST_NAME.add("游"); - CN_LAST_NAME.add("丹"); - CN_LAST_NAME.add("阿"); - CN_LAST_NAME.add("陀"); - CN_LAST_NAME.add("晁"); - CN_LAST_NAME.add("繁"); - CN_LAST_NAME.add("陆"); - CN_LAST_NAME.add("蹇"); - CN_LAST_NAME.add("么"); - CN_LAST_NAME.add("陈"); - CN_LAST_NAME.add("蹉"); - CN_LAST_NAME.add("义"); - CN_LAST_NAME.add("晋"); - CN_LAST_NAME.add("之"); - CN_LAST_NAME.add("乌"); - CN_LAST_NAME.add("虎"); - CN_LAST_NAME.add("晏"); - CN_LAST_NAME.add("乐"); - CN_LAST_NAME.add("乔"); - CN_LAST_NAME.add("乘"); - CN_LAST_NAME.add("乙"); - CN_LAST_NAME.add("东郭"); - CN_LAST_NAME.add("湛"); - CN_LAST_NAME.add("乜"); - CN_LAST_NAME.add("九"); - CN_LAST_NAME.add("虞"); - CN_LAST_NAME.add("习"); - CN_LAST_NAME.add("虢"); - CN_LAST_NAME.add("书"); - CN_LAST_NAME.add("普"); - CN_LAST_NAME.add("景"); - CN_LAST_NAME.add("买"); - CN_LAST_NAME.add("干"); - CN_LAST_NAME.add("平"); - CN_LAST_NAME.add("年"); - CN_LAST_NAME.add("陶"); - CN_LAST_NAME.add("幸"); - CN_LAST_NAME.add("智"); - CN_LAST_NAME.add("登"); - CN_LAST_NAME.add("白"); - CN_LAST_NAME.add("百"); - CN_LAST_NAME.add("乾"); - CN_LAST_NAME.add("鹿"); - CN_LAST_NAME.add("广"); - CN_LAST_NAME.add("蚁"); - CN_LAST_NAME.add("乌孙"); - CN_LAST_NAME.add("庄"); - CN_LAST_NAME.add("隆"); - CN_LAST_NAME.add("庆"); - CN_LAST_NAME.add("皇"); - CN_LAST_NAME.add("公良"); - CN_LAST_NAME.add("皋"); - CN_LAST_NAME.add("隋"); - CN_LAST_NAME.add("柴念"); - CN_LAST_NAME.add("于"); - CN_LAST_NAME.add("随"); - CN_LAST_NAME.add("源"); - CN_LAST_NAME.add("隐"); - CN_LAST_NAME.add("云"); - CN_LAST_NAME.add("库"); - CN_LAST_NAME.add("亓"); - CN_LAST_NAME.add("应"); - CN_LAST_NAME.add("五"); - CN_LAST_NAME.add("井"); - CN_LAST_NAME.add("隗"); - CN_LAST_NAME.add("那拉"); - CN_LAST_NAME.add("庚"); - CN_LAST_NAME.add("完颜"); - CN_LAST_NAME.add("府"); - CN_LAST_NAME.add("庞"); - CN_LAST_NAME.add("图门"); - CN_LAST_NAME.add("红"); - CN_LAST_NAME.add("亢"); - CN_LAST_NAME.add("溥"); - CN_LAST_NAME.add("亥"); - CN_LAST_NAME.add("度"); - CN_LAST_NAME.add("麦"); - CN_LAST_NAME.add("暨"); - CN_LAST_NAME.add("纪"); - CN_LAST_NAME.add("京"); - CN_LAST_NAME.add("皮"); - CN_LAST_NAME.add("纳"); - CN_LAST_NAME.add("暴"); - CN_LAST_NAME.add("麴"); - CN_LAST_NAME.add("纵"); - CN_LAST_NAME.add("康"); - CN_LAST_NAME.add("庹"); - CN_LAST_NAME.add("麻"); - CN_LAST_NAME.add("隽"); - CN_LAST_NAME.add("庾"); - CN_LAST_NAME.add("线"); - CN_LAST_NAME.add("雀"); - CN_LAST_NAME.add("仁"); - CN_LAST_NAME.add("练"); - CN_LAST_NAME.add("黄"); - CN_LAST_NAME.add("司寇"); - CN_LAST_NAME.add("仆"); - CN_LAST_NAME.add("集"); - CN_LAST_NAME.add("仇"); - CN_LAST_NAME.add("上官"); - CN_LAST_NAME.add("盈"); - CN_LAST_NAME.add("终"); - CN_LAST_NAME.add("廉"); - CN_LAST_NAME.add("仉"); - CN_LAST_NAME.add("益"); - CN_LAST_NAME.add("介"); - CN_LAST_NAME.add("盍"); - CN_LAST_NAME.add("绍"); - CN_LAST_NAME.add("雍"); - CN_LAST_NAME.add("仍"); - CN_LAST_NAME.add("从"); - CN_LAST_NAME.add("黎"); - CN_LAST_NAME.add("经"); - CN_LAST_NAME.add("滑"); - CN_LAST_NAME.add("滕"); - CN_LAST_NAME.add("盖"); - CN_LAST_NAME.add("廖"); - CN_LAST_NAME.add("盘"); - CN_LAST_NAME.add("仙"); - CN_LAST_NAME.add("盛"); - CN_LAST_NAME.add("仝"); - CN_LAST_NAME.add("回"); - CN_LAST_NAME.add("满"); - CN_LAST_NAME.add("代"); - CN_LAST_NAME.add("令"); - CN_LAST_NAME.add("以"); - CN_LAST_NAME.add("绪"); - CN_LAST_NAME.add("雪"); - CN_LAST_NAME.add("仪"); - CN_LAST_NAME.add("续"); - CN_LAST_NAME.add("蛮"); - CN_LAST_NAME.add("仰"); - CN_LAST_NAME.add("仲"); - CN_LAST_NAME.add("曲"); - CN_LAST_NAME.add("绳"); - CN_LAST_NAME.add("仵"); - CN_LAST_NAME.add("淳于"); - CN_LAST_NAME.add("延"); - CN_LAST_NAME.add("零"); - CN_LAST_NAME.add("雷"); - CN_LAST_NAME.add("相"); - CN_LAST_NAME.add("曹"); - CN_LAST_NAME.add("建"); - CN_LAST_NAME.add("任"); - CN_LAST_NAME.add("国"); - CN_LAST_NAME.add("曾"); - CN_LAST_NAME.add("开"); - CN_LAST_NAME.add("漆"); - CN_LAST_NAME.add("有"); - CN_LAST_NAME.add("伊"); - CN_LAST_NAME.add("朋"); - CN_LAST_NAME.add("霍"); - CN_LAST_NAME.add("伍"); - CN_LAST_NAME.add("伏"); - CN_LAST_NAME.add("缑"); - CN_LAST_NAME.add("休"); - CN_LAST_NAME.add("弓"); - CN_LAST_NAME.add("弘"); - CN_LAST_NAME.add("乐正"); - CN_LAST_NAME.add("望"); - CN_LAST_NAME.add("霜"); - CN_LAST_NAME.add("伟"); - CN_LAST_NAME.add("真"); - CN_LAST_NAME.add("张"); - CN_LAST_NAME.add("圣"); - CN_LAST_NAME.add("弥"); - CN_LAST_NAME.add("伦"); - CN_LAST_NAME.add("在"); - CN_LAST_NAME.add("范姜"); - CN_LAST_NAME.add("缪"); - CN_LAST_NAME.add("漫"); - CN_LAST_NAME.add("本"); - CN_LAST_NAME.add("圭"); - CN_LAST_NAME.add("弭"); - CN_LAST_NAME.add("眭"); - CN_LAST_NAME.add("伯"); - CN_LAST_NAME.add("朱"); - CN_LAST_NAME.add("朴"); - CN_LAST_NAME.add("强"); - CN_LAST_NAME.add("机"); - CN_LAST_NAME.add("似"); - CN_LAST_NAME.add("权"); - CN_LAST_NAME.add("但"); - CN_LAST_NAME.add("位"); - CN_LAST_NAME.add("李"); - CN_LAST_NAME.add("齐"); - CN_LAST_NAME.add("归"); - CN_LAST_NAME.add("青"); - CN_LAST_NAME.add("何"); - CN_LAST_NAME.add("罕"); - CN_LAST_NAME.add("靖"); - CN_LAST_NAME.add("罗"); - CN_LAST_NAME.add("潘"); - CN_LAST_NAME.add("佘"); - CN_LAST_NAME.add("余"); - CN_LAST_NAME.add("坚"); - CN_LAST_NAME.add("佛"); - CN_LAST_NAME.add("潜"); - CN_LAST_NAME.add("杜"); - CN_LAST_NAME.add("杞"); - CN_LAST_NAME.add("佟"); - CN_LAST_NAME.add("束"); - CN_LAST_NAME.add("睢"); - CN_LAST_NAME.add("督"); - CN_LAST_NAME.add("彤"); - CN_LAST_NAME.add("来"); - CN_LAST_NAME.add("车"); - CN_LAST_NAME.add("睦"); - CN_LAST_NAME.add("公孙"); - CN_LAST_NAME.add("杨"); - CN_LAST_NAME.add("革"); - CN_LAST_NAME.add("亓官"); - CN_LAST_NAME.add("彭"); - CN_LAST_NAME.add("潭"); - CN_LAST_NAME.add("杭"); - CN_LAST_NAME.add("潮"); - CN_LAST_NAME.add("诸葛"); - CN_LAST_NAME.add("靳"); - CN_LAST_NAME.add("佴"); - CN_LAST_NAME.add("佼"); - CN_LAST_NAME.add("载"); - CN_LAST_NAME.add("松"); - CN_LAST_NAME.add("板"); - CN_LAST_NAME.add("澄"); - CN_LAST_NAME.add("辉"); - CN_LAST_NAME.add("皇甫"); - CN_LAST_NAME.add("羊"); - CN_LAST_NAME.add("律"); - CN_LAST_NAME.add("融"); - CN_LAST_NAME.add("侍"); - CN_LAST_NAME.add("徐"); - CN_LAST_NAME.add("析"); - CN_LAST_NAME.add("林"); - CN_LAST_NAME.add("龙"); - CN_LAST_NAME.add("枚"); - CN_LAST_NAME.add("龚"); - CN_LAST_NAME.add("辛"); - CN_LAST_NAME.add("辜"); - CN_LAST_NAME.add("果"); - CN_LAST_NAME.add("枝"); - CN_LAST_NAME.add("依"); - CN_LAST_NAME.add("辟"); - CN_LAST_NAME.add("鞠"); - CN_LAST_NAME.add("御"); - CN_LAST_NAME.add("侨"); - CN_LAST_NAME.add("徭"); - CN_LAST_NAME.add("侯"); - CN_LAST_NAME.add("德"); - CN_LAST_NAME.add("边"); - CN_LAST_NAME.add("羽"); - CN_LAST_NAME.add("达"); - CN_LAST_NAME.add("羿"); - CN_LAST_NAME.add("瞿"); - CN_LAST_NAME.add("翁"); - CN_LAST_NAME.add("赫连"); - CN_LAST_NAME.add("过"); - CN_LAST_NAME.add("闾丘"); - CN_LAST_NAME.add("城"); - CN_LAST_NAME.add("俎"); - CN_LAST_NAME.add("柏"); - CN_LAST_NAME.add("运"); - CN_LAST_NAME.add("柔"); - CN_LAST_NAME.add("进"); - CN_LAST_NAME.add("保"); - CN_LAST_NAME.add("俞"); - CN_LAST_NAME.add("连"); - CN_LAST_NAME.add("俟"); - CN_LAST_NAME.add("迟"); - CN_LAST_NAME.add("翟"); - CN_LAST_NAME.add("翠"); - CN_LAST_NAME.add("太叔"); - CN_LAST_NAME.add("信"); - CN_LAST_NAME.add("欧阳"); - CN_LAST_NAME.add("公叔"); - CN_LAST_NAME.add("查"); - CN_LAST_NAME.add("韦"); - CN_LAST_NAME.add("翦"); - CN_LAST_NAME.add("韩"); - CN_LAST_NAME.add("矫"); - CN_LAST_NAME.add("濮"); - CN_LAST_NAME.add("修"); - CN_LAST_NAME.add("迮"); - CN_LAST_NAME.add("柯"); - CN_LAST_NAME.add("濯"); - CN_LAST_NAME.add("柳"); - CN_LAST_NAME.add("石"); - CN_LAST_NAME.add("柴"); - CN_LAST_NAME.add("念"); - CN_LAST_NAME.add("韶"); - CN_LAST_NAME.add("忻"); + /** + * 生成随机英文名 + * + * @return 英文名 + */ + public static String getEnName() { + String head = EN_FIRST_LIST[(int) (Math.random() * EN_FIRST_LIST.length)]; + String tail = EN_LAST_LIST[(int) (Math.random() * EN_LAST_LIST.length)]; + return head + tail; } - public static void initCN_FIRST_NAME() { - CN_FIRST_NAME.add("慕雁"); - CN_FIRST_NAME.add("婉然"); - CN_FIRST_NAME.add("月明"); - CN_FIRST_NAME.add("觅儿"); - CN_FIRST_NAME.add("高翰"); - CN_FIRST_NAME.add("白曼"); - CN_FIRST_NAME.add("怀思"); - CN_FIRST_NAME.add("碧菡"); - CN_FIRST_NAME.add("奇邃"); - CN_FIRST_NAME.add("云岚"); - CN_FIRST_NAME.add("惜文"); - CN_FIRST_NAME.add("夏青"); - CN_FIRST_NAME.add("俊雄"); - CN_FIRST_NAME.add("俊雅"); - CN_FIRST_NAME.add("馨蓉"); - CN_FIRST_NAME.add("庄丽"); - CN_FIRST_NAME.add("笛韵"); - CN_FIRST_NAME.add("笑天"); - CN_FIRST_NAME.add("舒怀"); - CN_FIRST_NAME.add("梦琪"); - CN_FIRST_NAME.add("清润"); - CN_FIRST_NAME.add("萦心"); - CN_FIRST_NAME.add("丹蝶"); - CN_FIRST_NAME.add("长旭"); - CN_FIRST_NAME.add("清涵"); - CN_FIRST_NAME.add("方仪"); - CN_FIRST_NAME.add("杰秀"); - CN_FIRST_NAME.add("天瑞"); - CN_FIRST_NAME.add("美丽"); - CN_FIRST_NAME.add("清淑"); - CN_FIRST_NAME.add("忻愉"); - CN_FIRST_NAME.add("隽美"); - CN_FIRST_NAME.add("碧萱"); - CN_FIRST_NAME.add("淑君"); - CN_FIRST_NAME.add("诗兰"); - CN_FIRST_NAME.add("平灵"); - CN_FIRST_NAME.add("柔淑"); - CN_FIRST_NAME.add("晓山"); - CN_FIRST_NAME.add("乐蓉"); - CN_FIRST_NAME.add("良哲"); - CN_FIRST_NAME.add("永新"); - CN_FIRST_NAME.add("凡阳"); - CN_FIRST_NAME.add("莹洁"); - CN_FIRST_NAME.add("哲圣"); - CN_FIRST_NAME.add("同化"); - CN_FIRST_NAME.add("玉英"); - CN_FIRST_NAME.add("天和"); - CN_FIRST_NAME.add("萦怀"); - CN_FIRST_NAME.add("伟毅"); - CN_FIRST_NAME.add("凝雁"); - CN_FIRST_NAME.add("炎彬"); - CN_FIRST_NAME.add("伟诚"); - CN_FIRST_NAME.add("长星"); - CN_FIRST_NAME.add("笑妍"); - CN_FIRST_NAME.add("瀚海"); - CN_FIRST_NAME.add("清一"); - CN_FIRST_NAME.add("景天"); - CN_FIRST_NAME.add("信瑞"); - CN_FIRST_NAME.add("鸿雪"); - CN_FIRST_NAME.add("子凡"); - CN_FIRST_NAME.add("古韵"); - CN_FIRST_NAME.add("志文"); - CN_FIRST_NAME.add("凝雨"); - CN_FIRST_NAME.add("凝雪"); - CN_FIRST_NAME.add("萦思"); - CN_FIRST_NAME.add("阳炎"); - CN_FIRST_NAME.add("忆枫"); - CN_FIRST_NAME.add("波光"); - CN_FIRST_NAME.add("吉玉"); - CN_FIRST_NAME.add("致萱"); - CN_FIRST_NAME.add("博裕"); - CN_FIRST_NAME.add("秀艾"); - CN_FIRST_NAME.add("问风"); - CN_FIRST_NAME.add("志新"); - CN_FIRST_NAME.add("凡白"); - CN_FIRST_NAME.add("忻慕"); - CN_FIRST_NAME.add("正德"); - CN_FIRST_NAME.add("芳泽"); - CN_FIRST_NAME.add("吉玟"); - CN_FIRST_NAME.add("秀艳"); - CN_FIRST_NAME.add("芳洁"); - CN_FIRST_NAME.add("白枫"); - CN_FIRST_NAME.add("昆明"); - CN_FIRST_NAME.add("忆柏"); - CN_FIRST_NAME.add("辰骏"); - CN_FIRST_NAME.add("水晶"); - CN_FIRST_NAME.add("芳洲"); - CN_FIRST_NAME.add("代卉"); - CN_FIRST_NAME.add("菡梅"); - CN_FIRST_NAME.add("正志"); - CN_FIRST_NAME.add("琳溪"); - CN_FIRST_NAME.add("叶嘉"); - CN_FIRST_NAME.add("永昌"); - CN_FIRST_NAME.add("曼衍"); - CN_FIRST_NAME.add("书艺"); - CN_FIRST_NAME.add("冰岚"); - CN_FIRST_NAME.add("永春"); - CN_FIRST_NAME.add("梅风"); - CN_FIRST_NAME.add("柔丽"); - CN_FIRST_NAME.add("元槐"); - CN_FIRST_NAME.add("安歌"); - CN_FIRST_NAME.add("子爱"); - CN_FIRST_NAME.add("融雪"); - CN_FIRST_NAME.add("涵韵"); - CN_FIRST_NAME.add("香蝶"); - CN_FIRST_NAME.add("倩语"); - CN_FIRST_NAME.add("乐蕊"); - CN_FIRST_NAME.add("康裕"); - CN_FIRST_NAME.add("梓露"); - CN_FIRST_NAME.add("昕葳"); - CN_FIRST_NAME.add("问夏"); - CN_FIRST_NAME.add("良畴"); - CN_FIRST_NAME.add("毅君"); - CN_FIRST_NAME.add("白柏"); - CN_FIRST_NAME.add("彭勃"); - CN_FIRST_NAME.add("迎真"); - CN_FIRST_NAME.add("恨瑶"); - CN_FIRST_NAME.add("月朗"); - CN_FIRST_NAME.add("雨竹"); - CN_FIRST_NAME.add("曼梅"); - CN_FIRST_NAME.add("凡雁"); - CN_FIRST_NAME.add("景福"); - CN_FIRST_NAME.add("代玉"); - CN_FIRST_NAME.add("碧蓉"); - CN_FIRST_NAME.add("妙松"); - CN_FIRST_NAME.add("童彤"); - CN_FIRST_NAME.add("浩慨"); - CN_FIRST_NAME.add("黎明"); - CN_FIRST_NAME.add("黎昕"); - CN_FIRST_NAME.add("友安"); - CN_FIRST_NAME.add("驰海"); - CN_FIRST_NAME.add("凝静"); - CN_FIRST_NAME.add("飞鸣"); - CN_FIRST_NAME.add("正思"); - CN_FIRST_NAME.add("亦竹"); - CN_FIRST_NAME.add("运盛"); - CN_FIRST_NAME.add("易蓉"); - CN_FIRST_NAME.add("芷波"); - CN_FIRST_NAME.add("以南"); - CN_FIRST_NAME.add("志明"); - CN_FIRST_NAME.add("傲安"); - CN_FIRST_NAME.add("蔓菁"); - CN_FIRST_NAME.add("飞鹏"); - CN_FIRST_NAME.add("春芳"); - CN_FIRST_NAME.add("新烟"); - CN_FIRST_NAME.add("绍晖"); - CN_FIRST_NAME.add("凯唱"); - CN_FIRST_NAME.add("振平"); - CN_FIRST_NAME.add("雅彤"); - CN_FIRST_NAME.add("虹颖"); - CN_FIRST_NAME.add("从阳"); - CN_FIRST_NAME.add("飞鸿"); - CN_FIRST_NAME.add("飞鸾"); - CN_FIRST_NAME.add("胤文"); - CN_FIRST_NAME.add("帅红"); - CN_FIRST_NAME.add("秀英"); - CN_FIRST_NAME.add("代双"); - CN_FIRST_NAME.add("芳润"); - CN_FIRST_NAME.add("萱彤"); - CN_FIRST_NAME.add("友容"); - CN_FIRST_NAME.add("香柏"); - CN_FIRST_NAME.add("夜雪"); - CN_FIRST_NAME.add("凌香"); - CN_FIRST_NAME.add("寻巧"); - CN_FIRST_NAME.add("昊明"); - CN_FIRST_NAME.add("莞然"); - CN_FIRST_NAME.add("绮艳"); - CN_FIRST_NAME.add("紫夏"); - CN_FIRST_NAME.add("阳焱"); - CN_FIRST_NAME.add("昊昊"); - CN_FIRST_NAME.add("淑哲"); - CN_FIRST_NAME.add("代珊"); - CN_FIRST_NAME.add("月杉"); - CN_FIRST_NAME.add("宜楠"); - CN_FIRST_NAME.add("凡霜"); - CN_FIRST_NAME.add("向卉"); - CN_FIRST_NAME.add("今雨"); - CN_FIRST_NAME.add("彦珺"); - CN_FIRST_NAME.add("宵晨"); - CN_FIRST_NAME.add("怀慕"); - CN_FIRST_NAME.add("姝美"); - CN_FIRST_NAME.add("合瑞"); - CN_FIRST_NAME.add("妙柏"); - CN_FIRST_NAME.add("芮丽"); - CN_FIRST_NAME.add("春英"); - CN_FIRST_NAME.add("白桃"); - CN_FIRST_NAME.add("晋鹏"); - CN_FIRST_NAME.add("锦凡"); - CN_FIRST_NAME.add("香柳"); - CN_FIRST_NAME.add("雨筠"); - CN_FIRST_NAME.add("向南"); - CN_FIRST_NAME.add("洋洋"); - CN_FIRST_NAME.add("静涵"); - CN_FIRST_NAME.add("尔竹"); - CN_FIRST_NAME.add("献仪"); - CN_FIRST_NAME.add("忆梅"); - CN_FIRST_NAME.add("自明"); - CN_FIRST_NAME.add("若枫"); - CN_FIRST_NAME.add("问香"); - CN_FIRST_NAME.add("雅美"); - CN_FIRST_NAME.add("昭懿"); - CN_FIRST_NAME.add("彦君"); - CN_FIRST_NAME.add("阳煦"); - CN_FIRST_NAME.add("小宸"); - CN_FIRST_NAME.add("新儿"); - CN_FIRST_NAME.add("青亦"); - CN_FIRST_NAME.add("静淑"); - CN_FIRST_NAME.add("娅童"); - CN_FIRST_NAME.add("寄蓉"); - CN_FIRST_NAME.add("阳兰"); - CN_FIRST_NAME.add("以珊"); - CN_FIRST_NAME.add("寄蓝"); - CN_FIRST_NAME.add("明旭"); - CN_FIRST_NAME.add("盼夏"); - CN_FIRST_NAME.add("含灵"); - CN_FIRST_NAME.add("雅志"); - CN_FIRST_NAME.add("昂杰"); - CN_FIRST_NAME.add("安民"); - CN_FIRST_NAME.add("白梅"); - CN_FIRST_NAME.add("熙怡"); - CN_FIRST_NAME.add("靖之"); - CN_FIRST_NAME.add("茉莉"); - CN_FIRST_NAME.add("雨安"); - CN_FIRST_NAME.add("伟泽"); - CN_FIRST_NAME.add("琴轩"); - CN_FIRST_NAME.add("倚云"); - CN_FIRST_NAME.add("星菱"); - CN_FIRST_NAME.add("平凡"); - CN_FIRST_NAME.add("丁辰"); - CN_FIRST_NAME.add("辰宇"); - CN_FIRST_NAME.add("白梦"); - CN_FIRST_NAME.add("清漪"); - CN_FIRST_NAME.add("熠彤"); - CN_FIRST_NAME.add("明明"); - CN_FIRST_NAME.add("映菡"); - CN_FIRST_NAME.add("阳冰"); - CN_FIRST_NAME.add("从雪"); - CN_FIRST_NAME.add("易文"); - CN_FIRST_NAME.add("香桃"); - CN_FIRST_NAME.add("映菱"); - CN_FIRST_NAME.add("巍昂"); - CN_FIRST_NAME.add("驰丽"); - CN_FIRST_NAME.add("兰蕙"); - CN_FIRST_NAME.add("振强"); - CN_FIRST_NAME.add("锐锋"); - CN_FIRST_NAME.add("红豆"); - CN_FIRST_NAME.add("寒荷"); - CN_FIRST_NAME.add("永望"); - CN_FIRST_NAME.add("湛蓝"); - CN_FIRST_NAME.add("新冬"); - CN_FIRST_NAME.add("飞绿"); - CN_FIRST_NAME.add("霏霏"); - CN_FIRST_NAME.add("宵月"); - CN_FIRST_NAME.add("春荷"); - CN_FIRST_NAME.add("尔安"); - CN_FIRST_NAME.add("清佳"); - CN_FIRST_NAME.add("从霜"); - CN_FIRST_NAME.add("田然"); - CN_FIRST_NAME.add("同和"); - CN_FIRST_NAME.add("盼香"); - CN_FIRST_NAME.add("静丹"); - CN_FIRST_NAME.add("雪容"); - CN_FIRST_NAME.add("映萱"); - CN_FIRST_NAME.add("宏毅"); - CN_FIRST_NAME.add("含烟"); - CN_FIRST_NAME.add("香梅"); - CN_FIRST_NAME.add("明智"); - CN_FIRST_NAME.add("醉芙"); - CN_FIRST_NAME.add("昆杰"); - CN_FIRST_NAME.add("妙梦"); - CN_FIRST_NAME.add("痴香"); - CN_FIRST_NAME.add("尔容"); - CN_FIRST_NAME.add("从露"); - CN_FIRST_NAME.add("幻儿"); - CN_FIRST_NAME.add("山灵"); - CN_FIRST_NAME.add("笑笑"); - CN_FIRST_NAME.add("优乐"); - CN_FIRST_NAME.add("寄蕾"); - CN_FIRST_NAME.add("令璟"); - CN_FIRST_NAME.add("慧雅"); - CN_FIRST_NAME.add("高懿"); - CN_FIRST_NAME.add("皎月"); - CN_FIRST_NAME.add("月桂"); - CN_FIRST_NAME.add("月桃"); - CN_FIRST_NAME.add("和蔼"); - CN_FIRST_NAME.add("芮优"); - CN_FIRST_NAME.add("冰巧"); - CN_FIRST_NAME.add("韵宁"); - CN_FIRST_NAME.add("古香"); - CN_FIRST_NAME.add("盼秋"); - CN_FIRST_NAME.add("秋芸"); - CN_FIRST_NAME.add("谷枫"); - CN_FIRST_NAME.add("秋芳"); - CN_FIRST_NAME.add("寄文"); - CN_FIRST_NAME.add("瀚漠"); - CN_FIRST_NAME.add("静云"); - CN_FIRST_NAME.add("泰然"); - CN_FIRST_NAME.add("俊风"); - CN_FIRST_NAME.add("碧春"); - CN_FIRST_NAME.add("灵萱"); - CN_FIRST_NAME.add("恬畅"); - CN_FIRST_NAME.add("英朗"); - CN_FIRST_NAME.add("芝兰"); - CN_FIRST_NAME.add("悦乐"); - CN_FIRST_NAME.add("清俊"); - CN_FIRST_NAME.add("飞龙"); - CN_FIRST_NAME.add("光誉"); - CN_FIRST_NAME.add("鸿飞"); - CN_FIRST_NAME.add("梓颖"); - CN_FIRST_NAME.add("寻绿"); - CN_FIRST_NAME.add("蔓蔓"); - CN_FIRST_NAME.add("安波"); - CN_FIRST_NAME.add("沛容"); - CN_FIRST_NAME.add("子珍"); - CN_FIRST_NAME.add("燕妮"); - CN_FIRST_NAME.add("巧荷"); - CN_FIRST_NAME.add("鸿风"); - CN_FIRST_NAME.add("朝旭"); - CN_FIRST_NAME.add("听然"); - CN_FIRST_NAME.add("书萱"); - CN_FIRST_NAME.add("韫素"); - CN_FIRST_NAME.add("孤兰"); - CN_FIRST_NAME.add("高扬"); - CN_FIRST_NAME.add("元武"); - CN_FIRST_NAME.add("秋英"); - CN_FIRST_NAME.add("元正"); - CN_FIRST_NAME.add("舒扬"); - CN_FIRST_NAME.add("飞羽"); - CN_FIRST_NAME.add("英杰"); - CN_FIRST_NAME.add("韶容"); - CN_FIRST_NAME.add("君博"); - CN_FIRST_NAME.add("芮佳"); - CN_FIRST_NAME.add("同甫"); - CN_FIRST_NAME.add("桂芝"); - CN_FIRST_NAME.add("兴文"); - CN_FIRST_NAME.add("飞翔"); - CN_FIRST_NAME.add("姝惠"); - CN_FIRST_NAME.add("雅惠"); - CN_FIRST_NAME.add("芷云"); - CN_FIRST_NAME.add("美偲"); - CN_FIRST_NAME.add("昕昕"); - CN_FIRST_NAME.add("令锋"); - CN_FIRST_NAME.add("振翱"); - CN_FIRST_NAME.add("耘志"); - CN_FIRST_NAME.add("初然"); - CN_FIRST_NAME.add("羡丽"); - CN_FIRST_NAME.add("怀芹"); - CN_FIRST_NAME.add("觅双"); - CN_FIRST_NAME.add("觅珍"); - CN_FIRST_NAME.add("芮澜"); - CN_FIRST_NAME.add("文静"); - CN_FIRST_NAME.add("飞翰"); - CN_FIRST_NAME.add("诗珊"); - CN_FIRST_NAME.add("飞翮"); - CN_FIRST_NAME.add("诗双"); - CN_FIRST_NAME.add("明朗"); - CN_FIRST_NAME.add("高芬"); - CN_FIRST_NAME.add("笑容"); - CN_FIRST_NAME.add("意致"); - CN_FIRST_NAME.add("飞翼"); - CN_FIRST_NAME.add("子琪"); - CN_FIRST_NAME.add("哲妍"); - CN_FIRST_NAME.add("希彤"); - CN_FIRST_NAME.add("悦人"); - CN_FIRST_NAME.add("华池"); - CN_FIRST_NAME.add("皓月"); - CN_FIRST_NAME.add("蕴秀"); - CN_FIRST_NAME.add("清逸"); - CN_FIRST_NAME.add("芸溪"); - CN_FIRST_NAME.add("语儿"); - CN_FIRST_NAME.add("宁乐"); - CN_FIRST_NAME.add("子琳"); - CN_FIRST_NAME.add("寄春"); - CN_FIRST_NAME.add("驰轩"); - CN_FIRST_NAME.add("思彤"); - CN_FIRST_NAME.add("笑寒"); - CN_FIRST_NAME.add("秋荣"); - CN_FIRST_NAME.add("初兰"); - CN_FIRST_NAME.add("婉君"); - CN_FIRST_NAME.add("嘉石"); - CN_FIRST_NAME.add("嘉音"); - CN_FIRST_NAME.add("森丽"); - CN_FIRST_NAME.add("鸿祯"); - CN_FIRST_NAME.add("秋荷"); - CN_FIRST_NAME.add("子瑜"); - CN_FIRST_NAME.add("迎天"); - CN_FIRST_NAME.add("绣文"); - CN_FIRST_NAME.add("兴旺"); - CN_FIRST_NAME.add("宜欣"); - CN_FIRST_NAME.add("梦雨"); - CN_FIRST_NAME.add("迎夏"); - CN_FIRST_NAME.add("兴昌"); - CN_FIRST_NAME.add("翠曼"); - CN_FIRST_NAME.add("山兰"); - CN_FIRST_NAME.add("浩荡"); - CN_FIRST_NAME.add("施然"); - CN_FIRST_NAME.add("淑雅"); - CN_FIRST_NAME.add("娴雅"); - CN_FIRST_NAME.add("燕婉"); - CN_FIRST_NAME.add("思美"); - CN_FIRST_NAME.add("天真"); - CN_FIRST_NAME.add("问筠"); - CN_FIRST_NAME.add("烨霖"); - CN_FIRST_NAME.add("泰初"); - CN_FIRST_NAME.add("和昶"); - CN_FIRST_NAME.add("鸿福"); - CN_FIRST_NAME.add("乐松"); - CN_FIRST_NAME.add("雍恬"); - CN_FIRST_NAME.add("明杰"); - CN_FIRST_NAME.add("好洁"); - CN_FIRST_NAME.add("越彬"); - CN_FIRST_NAME.add("锐阵"); - CN_FIRST_NAME.add("碧曼"); - CN_FIRST_NAME.add("沛山"); - CN_FIRST_NAME.add("格菲"); - CN_FIRST_NAME.add("子璇"); - CN_FIRST_NAME.add("平卉"); - CN_FIRST_NAME.add("倩丽"); - CN_FIRST_NAME.add("琬凝"); - CN_FIRST_NAME.add("文石"); - CN_FIRST_NAME.add("梦露"); - CN_FIRST_NAME.add("天青"); - CN_FIRST_NAME.add("星文"); - CN_FIRST_NAME.add("冰绿"); - CN_FIRST_NAME.add("娟妍"); - CN_FIRST_NAME.add("惜梦"); - CN_FIRST_NAME.add("怜翠"); - CN_FIRST_NAME.add("秋莲"); - CN_FIRST_NAME.add("承嗣"); - CN_FIRST_NAME.add("濡霈"); - CN_FIRST_NAME.add("奇玮"); - CN_FIRST_NAME.add("之桃"); - CN_FIRST_NAME.add("德水"); - CN_FIRST_NAME.add("建茗"); - CN_FIRST_NAME.add("沛岚"); - CN_FIRST_NAME.add("妍歌"); - CN_FIRST_NAME.add("雪峰"); - CN_FIRST_NAME.add("成荫"); - CN_FIRST_NAME.add("志行"); - CN_FIRST_NAME.add("云心"); - CN_FIRST_NAME.add("鸿禧"); - CN_FIRST_NAME.add("谷梦"); - CN_FIRST_NAME.add("卿月"); - CN_FIRST_NAME.add("阳华"); - CN_FIRST_NAME.add("和暄"); - CN_FIRST_NAME.add("语冰"); - CN_FIRST_NAME.add("梓馨"); - CN_FIRST_NAME.add("范明"); - CN_FIRST_NAME.add("天睿"); - CN_FIRST_NAME.add("晓彤"); - CN_FIRST_NAME.add("霞雰"); - CN_FIRST_NAME.add("秀敏"); - CN_FIRST_NAME.add("和暖"); - CN_FIRST_NAME.add("舒荣"); - CN_FIRST_NAME.add("暄妍"); - CN_FIRST_NAME.add("丁兰"); - CN_FIRST_NAME.add("夜天"); - CN_FIRST_NAME.add("娟秀"); - CN_FIRST_NAME.add("娜娜"); - CN_FIRST_NAME.add("凌寒"); - CN_FIRST_NAME.add("茜茜"); - CN_FIRST_NAME.add("兰月"); - CN_FIRST_NAME.add("悠逸"); - CN_FIRST_NAME.add("语燕"); - CN_FIRST_NAME.add("骊泓"); - CN_FIRST_NAME.add("依美"); - CN_FIRST_NAME.add("昕月"); - CN_FIRST_NAME.add("宏浚"); - CN_FIRST_NAME.add("叶飞"); - CN_FIRST_NAME.add("骊洁"); - CN_FIRST_NAME.add("淑静"); - CN_FIRST_NAME.add("嘉颖"); - CN_FIRST_NAME.add("思怡"); - CN_FIRST_NAME.add("轩昂"); - CN_FIRST_NAME.add("如波"); - CN_FIRST_NAME.add("迎秋"); - CN_FIRST_NAME.add("思思"); - CN_FIRST_NAME.add("琛瑞"); - CN_FIRST_NAME.add("娴静"); - CN_FIRST_NAME.add("紫安"); - CN_FIRST_NAME.add("恩霈"); - CN_FIRST_NAME.add("问寒"); - CN_FIRST_NAME.add("恨真"); - CN_FIRST_NAME.add("冰彦"); - CN_FIRST_NAME.add("怀莲"); - CN_FIRST_NAME.add("雅懿"); - CN_FIRST_NAME.add("千亦"); - CN_FIRST_NAME.add("运馨"); - CN_FIRST_NAME.add("依心"); - CN_FIRST_NAME.add("恬雅"); - CN_FIRST_NAME.add("希恩"); - CN_FIRST_NAME.add("俨雅"); - CN_FIRST_NAME.add("驰逸"); - CN_FIRST_NAME.add("雅致"); - CN_FIRST_NAME.add("青烟"); - CN_FIRST_NAME.add("翠柏"); - CN_FIRST_NAME.add("思恩"); - CN_FIRST_NAME.add("天音"); - CN_FIRST_NAME.add("思聪"); - CN_FIRST_NAME.add("寒蕾"); - CN_FIRST_NAME.add("天韵"); - CN_FIRST_NAME.add("书文"); - CN_FIRST_NAME.add("一凡"); - CN_FIRST_NAME.add("雁芙"); - CN_FIRST_NAME.add("娟娟"); - CN_FIRST_NAME.add("星星"); - CN_FIRST_NAME.add("俊驰"); - CN_FIRST_NAME.add("静逸"); - CN_FIRST_NAME.add("景山"); - CN_FIRST_NAME.add("春蕾"); - CN_FIRST_NAME.add("夜香"); - CN_FIRST_NAME.add("悦远"); - CN_FIRST_NAME.add("碧螺"); - CN_FIRST_NAME.add("宜民"); - CN_FIRST_NAME.add("健柏"); - CN_FIRST_NAME.add("慧颖"); - CN_FIRST_NAME.add("彤雯"); - CN_FIRST_NAME.add("亦巧"); - CN_FIRST_NAME.add("文墨"); - CN_FIRST_NAME.add("燕子"); - CN_FIRST_NAME.add("冰心"); - CN_FIRST_NAME.add("翰藻"); - CN_FIRST_NAME.add("星晖"); - CN_FIRST_NAME.add("柔煦"); - CN_FIRST_NAME.add("红云"); - CN_FIRST_NAME.add("兴朝"); - CN_FIRST_NAME.add("念蕾"); - CN_FIRST_NAME.add("国安"); - CN_FIRST_NAME.add("睿识"); - CN_FIRST_NAME.add("曦之"); - CN_FIRST_NAME.add("德泽"); - CN_FIRST_NAME.add("鸿骞"); - CN_FIRST_NAME.add("雪巧"); - CN_FIRST_NAME.add("寄松"); - CN_FIRST_NAME.add("睿诚"); - CN_FIRST_NAME.add("仙韵"); - CN_FIRST_NAME.add("彤霞"); - CN_FIRST_NAME.add("星晴"); - CN_FIRST_NAME.add("姝艳"); - CN_FIRST_NAME.add("又绿"); - CN_FIRST_NAME.add("念文"); - CN_FIRST_NAME.add("智宇"); - CN_FIRST_NAME.add("聪睿"); - CN_FIRST_NAME.add("元洲"); - CN_FIRST_NAME.add("巧蕊"); - CN_FIRST_NAME.add("向阳"); - CN_FIRST_NAME.add("梓婷"); - CN_FIRST_NAME.add("宏深"); - CN_FIRST_NAME.add("欢欣"); - CN_FIRST_NAME.add("雪帆"); - CN_FIRST_NAME.add("泰华"); - CN_FIRST_NAME.add("蔚星"); - CN_FIRST_NAME.add("绮文"); - CN_FIRST_NAME.add("斯琪"); - CN_FIRST_NAME.add("雅艳"); - CN_FIRST_NAME.add("恬静"); - CN_FIRST_NAME.add("书易"); - CN_FIRST_NAME.add("幻玉"); - CN_FIRST_NAME.add("谷槐"); - CN_FIRST_NAME.add("琦珍"); - CN_FIRST_NAME.add("琪华"); - CN_FIRST_NAME.add("翠桃"); - CN_FIRST_NAME.add("欣欣"); - CN_FIRST_NAME.add("平和"); - CN_FIRST_NAME.add("智宸"); - CN_FIRST_NAME.add("嘉祥"); - CN_FIRST_NAME.add("曼语"); - CN_FIRST_NAME.add("鹏飞"); - CN_FIRST_NAME.add("华清"); - CN_FIRST_NAME.add("佳文"); - CN_FIRST_NAME.add("暄婷"); - CN_FIRST_NAME.add("彦露"); - CN_FIRST_NAME.add("夏容"); - CN_FIRST_NAME.add("玮艺"); - CN_FIRST_NAME.add("心语"); - CN_FIRST_NAME.add("嘉祯"); - CN_FIRST_NAME.add("令雪"); - CN_FIRST_NAME.add("莹然"); - CN_FIRST_NAME.add("宏义"); - CN_FIRST_NAME.add("孟君"); - CN_FIRST_NAME.add("沈思"); - CN_FIRST_NAME.add("心诺"); - CN_FIRST_NAME.add("寄柔"); - CN_FIRST_NAME.add("修雅"); - CN_FIRST_NAME.add("茂材"); - CN_FIRST_NAME.add("英楠"); - CN_FIRST_NAME.add("畅然"); - CN_FIRST_NAME.add("听南"); - CN_FIRST_NAME.add("敏思"); - CN_FIRST_NAME.add("幻珊"); - CN_FIRST_NAME.add("夏寒"); - CN_FIRST_NAME.add("晨希"); - CN_FIRST_NAME.add("鹏天"); - CN_FIRST_NAME.add("怡悦"); - CN_FIRST_NAME.add("涵容"); - CN_FIRST_NAME.add("晴岚"); - CN_FIRST_NAME.add("翠梅"); - CN_FIRST_NAME.add("嘉福"); - CN_FIRST_NAME.add("德海"); - CN_FIRST_NAME.add("运骏"); - CN_FIRST_NAME.add("含玉"); - CN_FIRST_NAME.add("嘉禧"); - CN_FIRST_NAME.add("凯风"); - CN_FIRST_NAME.add("凝竹"); - CN_FIRST_NAME.add("靖儿"); - CN_FIRST_NAME.add("学博"); - CN_FIRST_NAME.add("梓童"); - CN_FIRST_NAME.add("海荣"); - CN_FIRST_NAME.add("春晓"); - CN_FIRST_NAME.add("希慕"); - CN_FIRST_NAME.add("竹悦"); - CN_FIRST_NAME.add("德润"); - CN_FIRST_NAME.add("雁荷"); - CN_FIRST_NAME.add("幼珊"); - CN_FIRST_NAME.add("永言"); - CN_FIRST_NAME.add("良奥"); - CN_FIRST_NAME.add("华乐"); - CN_FIRST_NAME.add("新瑶"); - CN_FIRST_NAME.add("初南"); - CN_FIRST_NAME.add("贝丽"); - CN_FIRST_NAME.add("暄嫣"); - CN_FIRST_NAME.add("向雁"); - CN_FIRST_NAME.add("春晖"); - CN_FIRST_NAME.add("心水"); - CN_FIRST_NAME.add("甘雨"); - CN_FIRST_NAME.add("嘉禾"); - CN_FIRST_NAME.add("思慧"); - CN_FIRST_NAME.add("烨磊"); - CN_FIRST_NAME.add("之槐"); - CN_FIRST_NAME.add("向雪"); - CN_FIRST_NAME.add("凯复"); - CN_FIRST_NAME.add("奇略"); - CN_FIRST_NAME.add("修真"); - CN_FIRST_NAME.add("访风"); - CN_FIRST_NAME.add("端懿"); - CN_FIRST_NAME.add("易梦"); - CN_FIRST_NAME.add("季同"); - CN_FIRST_NAME.add("如之"); - CN_FIRST_NAME.add("佩杉"); - CN_FIRST_NAME.add("含双"); - CN_FIRST_NAME.add("飞舟"); - CN_FIRST_NAME.add("康泰"); - CN_FIRST_NAME.add("亦绿"); - CN_FIRST_NAME.add("逸丽"); - CN_FIRST_NAME.add("巧春"); - CN_FIRST_NAME.add("芷烟"); - CN_FIRST_NAME.add("彩静"); - CN_FIRST_NAME.add("宇达"); - CN_FIRST_NAME.add("飞航"); - CN_FIRST_NAME.add("向真"); - CN_FIRST_NAME.add("听双"); - CN_FIRST_NAME.add("鸿宝"); - CN_FIRST_NAME.add("光济"); - CN_FIRST_NAME.add("海莹"); - CN_FIRST_NAME.add("曜灿"); - CN_FIRST_NAME.add("秀曼"); - CN_FIRST_NAME.add("咸英"); - CN_FIRST_NAME.add("慧秀"); - CN_FIRST_NAME.add("安澜"); - CN_FIRST_NAME.add("琨瑜"); - CN_FIRST_NAME.add("文姝"); - CN_FIRST_NAME.add("兰梦"); - CN_FIRST_NAME.add("贤淑"); - CN_FIRST_NAME.add("琨瑶"); - CN_FIRST_NAME.add("雁菱"); - CN_FIRST_NAME.add("如云"); - CN_FIRST_NAME.add("珺娅"); - CN_FIRST_NAME.add("凝安"); - CN_FIRST_NAME.add("海菡"); - CN_FIRST_NAME.add("雪绿"); - CN_FIRST_NAME.add("逸云"); - CN_FIRST_NAME.add("德业"); - CN_FIRST_NAME.add("光赫"); - CN_FIRST_NAME.add("夏山"); - CN_FIRST_NAME.add("绮晴"); - CN_FIRST_NAME.add("乃欣"); - CN_FIRST_NAME.add("奕叶"); - CN_FIRST_NAME.add("向露"); - CN_FIRST_NAME.add("博赡"); - CN_FIRST_NAME.add("温书"); - CN_FIRST_NAME.add("涵山"); - CN_FIRST_NAME.add("雁菡"); - CN_FIRST_NAME.add("承基"); - CN_FIRST_NAME.add("初珍"); - CN_FIRST_NAME.add("访天"); - CN_FIRST_NAME.add("飞扬"); - CN_FIRST_NAME.add("一南"); - CN_FIRST_NAME.add("佳晨"); - CN_FIRST_NAME.add("夏岚"); - CN_FIRST_NAME.add("博超"); - CN_FIRST_NAME.add("瑞渊"); - CN_FIRST_NAME.add("博涉"); - CN_FIRST_NAME.add("恨风"); - CN_FIRST_NAME.add("燕岚"); - CN_FIRST_NAME.add("邵美"); - CN_FIRST_NAME.add("学名"); - CN_FIRST_NAME.add("雨彤"); - CN_FIRST_NAME.add("天禄"); - CN_FIRST_NAME.add("怀蕾"); - CN_FIRST_NAME.add("广君"); - CN_FIRST_NAME.add("晓慧"); - CN_FIRST_NAME.add("德义"); - CN_FIRST_NAME.add("成文"); - CN_FIRST_NAME.add("宏伟"); - CN_FIRST_NAME.add("蒙雨"); - CN_FIRST_NAME.add("云臻"); - CN_FIRST_NAME.add("洋然"); - CN_FIRST_NAME.add("芷兰"); - CN_FIRST_NAME.add("琬琰"); - CN_FIRST_NAME.add("博涛"); - CN_FIRST_NAME.add("宏伯"); - CN_FIRST_NAME.add("怀薇"); - CN_FIRST_NAME.add("思懿"); - CN_FIRST_NAME.add("美华"); - CN_FIRST_NAME.add("鹏程"); - CN_FIRST_NAME.add("泰和"); - CN_FIRST_NAME.add("霞飞"); - CN_FIRST_NAME.add("婷然"); - CN_FIRST_NAME.add("芸儿"); - CN_FIRST_NAME.add("微澜"); - CN_FIRST_NAME.add("浩旷"); - CN_FIRST_NAME.add("如仪"); - CN_FIRST_NAME.add("绿蓉"); - CN_FIRST_NAME.add("玉树"); - CN_FIRST_NAME.add("灵松"); - CN_FIRST_NAME.add("翰林"); - CN_FIRST_NAME.add("昭昭"); - CN_FIRST_NAME.add("逸仙"); - CN_FIRST_NAME.add("慕山"); - CN_FIRST_NAME.add("溥心"); - CN_FIRST_NAME.add("秋春"); - CN_FIRST_NAME.add("醉易"); - CN_FIRST_NAME.add("小翠"); - CN_FIRST_NAME.add("梦香"); - CN_FIRST_NAME.add("秀杰"); - CN_FIRST_NAME.add("飞英"); - CN_FIRST_NAME.add("元亮"); - CN_FIRST_NAME.add("慧婕"); - CN_FIRST_NAME.add("旭东"); - CN_FIRST_NAME.add("和裕"); - CN_FIRST_NAME.add("子真"); - CN_FIRST_NAME.add("牧歌"); - CN_FIRST_NAME.add("洮洮"); - CN_FIRST_NAME.add("弘致"); - CN_FIRST_NAME.add("北嘉"); - CN_FIRST_NAME.add("灵枫"); - CN_FIRST_NAME.add("书蝶"); - CN_FIRST_NAME.add("清卓"); - CN_FIRST_NAME.add("清华"); - CN_FIRST_NAME.add("艳娇"); - CN_FIRST_NAME.add("寒松"); - CN_FIRST_NAME.add("梦秋"); - CN_FIRST_NAME.add("景平"); - CN_FIRST_NAME.add("宛丝"); - CN_FIRST_NAME.add("弘懿"); - CN_FIRST_NAME.add("曜儿"); - CN_FIRST_NAME.add("华辉"); - CN_FIRST_NAME.add("芸熙"); - CN_FIRST_NAME.add("承颜"); - CN_FIRST_NAME.add("琰琬"); - CN_FIRST_NAME.add("初瑶"); - CN_FIRST_NAME.add("敏慧"); - CN_FIRST_NAME.add("暮雨"); - CN_FIRST_NAME.add("舒方"); - CN_FIRST_NAME.add("雅萍"); - CN_FIRST_NAME.add("辰龙"); - CN_FIRST_NAME.add("瑞云"); - CN_FIRST_NAME.add("巧曼"); - CN_FIRST_NAME.add("君雅"); - CN_FIRST_NAME.add("光临"); - CN_FIRST_NAME.add("雪羽"); - CN_FIRST_NAME.add("宏达"); - CN_FIRST_NAME.add("良骥"); - CN_FIRST_NAME.add("采绿"); - CN_FIRST_NAME.add("暖姝"); - CN_FIRST_NAME.add("骞泽"); - CN_FIRST_NAME.add("田田"); - CN_FIRST_NAME.add("爰爰"); - CN_FIRST_NAME.add("伟兆"); - CN_FIRST_NAME.add("良骏"); - CN_FIRST_NAME.add("易槐"); - CN_FIRST_NAME.add("寻芳"); - CN_FIRST_NAME.add("芫华"); - CN_FIRST_NAME.add("寻芹"); - CN_FIRST_NAME.add("献玉"); - CN_FIRST_NAME.add("米琪"); - CN_FIRST_NAME.add("振荣"); - CN_FIRST_NAME.add("觅露"); - CN_FIRST_NAME.add("绣梓"); - CN_FIRST_NAME.add("绿蕊"); - CN_FIRST_NAME.add("阳嘉"); - CN_FIRST_NAME.add("高明"); - CN_FIRST_NAME.add("宏远"); - CN_FIRST_NAME.add("家欣"); - CN_FIRST_NAME.add("博丽"); - CN_FIRST_NAME.add("春枫"); - CN_FIRST_NAME.add("知慧"); - CN_FIRST_NAME.add("高旻"); - CN_FIRST_NAME.add("诗霜"); - CN_FIRST_NAME.add("安邦"); - CN_FIRST_NAME.add("雪翎"); - CN_FIRST_NAME.add("高昂"); - CN_FIRST_NAME.add("雁蓉"); - CN_FIRST_NAME.add("婉静"); - CN_FIRST_NAME.add("立果"); - CN_FIRST_NAME.add("春柔"); - CN_FIRST_NAME.add("春柏"); - CN_FIRST_NAME.add("悦爱"); - CN_FIRST_NAME.add("意蕴"); - CN_FIRST_NAME.add("沙羽"); - CN_FIRST_NAME.add("飞荷"); - CN_FIRST_NAME.add("韶美"); - CN_FIRST_NAME.add("海蓝"); - CN_FIRST_NAME.add("飞捷"); - CN_FIRST_NAME.add("真如"); - CN_FIRST_NAME.add("远骞"); - CN_FIRST_NAME.add("千儿"); - CN_FIRST_NAME.add("从筠"); - CN_FIRST_NAME.add("妍丽"); - CN_FIRST_NAME.add("建明"); - CN_FIRST_NAME.add("弘扬"); - CN_FIRST_NAME.add("宛亦"); - CN_FIRST_NAME.add("棠华"); - CN_FIRST_NAME.add("骏伟"); - CN_FIRST_NAME.add("思若"); - CN_FIRST_NAME.add("令飒"); - CN_FIRST_NAME.add("盼巧"); - CN_FIRST_NAME.add("馨欣"); - CN_FIRST_NAME.add("丽泽"); - CN_FIRST_NAME.add("霞姝"); - CN_FIRST_NAME.add("天骄"); - CN_FIRST_NAME.add("德佑"); - CN_FIRST_NAME.add("阳阳"); - CN_FIRST_NAME.add("从安"); - CN_FIRST_NAME.add("康乐"); - CN_FIRST_NAME.add("念柏"); - CN_FIRST_NAME.add("一瑾"); - CN_FIRST_NAME.add("经武"); - CN_FIRST_NAME.add("天空"); - CN_FIRST_NAME.add("香波"); - CN_FIRST_NAME.add("宏逸"); - CN_FIRST_NAME.add("英武"); - CN_FIRST_NAME.add("承天"); - CN_FIRST_NAME.add("琳瑜"); - CN_FIRST_NAME.add("飞莲"); - CN_FIRST_NAME.add("正文"); - CN_FIRST_NAME.add("云英"); - CN_FIRST_NAME.add("金鹏"); - CN_FIRST_NAME.add("一璇"); - CN_FIRST_NAME.add("光亮"); - CN_FIRST_NAME.add("秋月"); - CN_FIRST_NAME.add("书桃"); - CN_FIRST_NAME.add("淑婉"); - CN_FIRST_NAME.add("宜人"); - CN_FIRST_NAME.add("飞掣"); - CN_FIRST_NAME.add("淑穆"); - CN_FIRST_NAME.add("天媛"); - CN_FIRST_NAME.add("香洁"); - CN_FIRST_NAME.add("琼华"); - CN_FIRST_NAME.add("娴婉"); - CN_FIRST_NAME.add("绿旋"); - CN_FIRST_NAME.add("洁玉"); - CN_FIRST_NAME.add("莹华"); - CN_FIRST_NAME.add("子石"); - CN_FIRST_NAME.add("代天"); - CN_FIRST_NAME.add("梅红"); - CN_FIRST_NAME.add("茵茵"); - CN_FIRST_NAME.add("春桃"); - CN_FIRST_NAME.add("娅思"); - CN_FIRST_NAME.add("思茵"); - CN_FIRST_NAME.add("洛灵"); - CN_FIRST_NAME.add("平雅"); - CN_FIRST_NAME.add("嘉宝"); - CN_FIRST_NAME.add("德辉"); - CN_FIRST_NAME.add("嘉实"); - CN_FIRST_NAME.add("孟阳"); - CN_FIRST_NAME.add("瀚玥"); - CN_FIRST_NAME.add("安然"); - CN_FIRST_NAME.add("昆谊"); - CN_FIRST_NAME.add("伶伶"); - CN_FIRST_NAME.add("秀梅"); - CN_FIRST_NAME.add("曼丽"); - CN_FIRST_NAME.add("宏邈"); - CN_FIRST_NAME.add("敏才"); - CN_FIRST_NAME.add("良策"); - CN_FIRST_NAME.add("乐欣"); - CN_FIRST_NAME.add("嘉容"); - CN_FIRST_NAME.add("琲瓃"); - CN_FIRST_NAME.add("半烟"); - CN_FIRST_NAME.add("笑翠"); - CN_FIRST_NAME.add("莹玉"); - CN_FIRST_NAME.add("念桃"); - CN_FIRST_NAME.add("英毅"); - CN_FIRST_NAME.add("芳华"); - CN_FIRST_NAME.add("仙媛"); - CN_FIRST_NAME.add("景彰"); - CN_FIRST_NAME.add("志诚"); - CN_FIRST_NAME.add("素怀"); - CN_FIRST_NAME.add("千凝"); - CN_FIRST_NAME.add("怀曼"); - CN_FIRST_NAME.add("文宣"); - CN_FIRST_NAME.add("祺然"); - CN_FIRST_NAME.add("千凡"); - CN_FIRST_NAME.add("德运"); - CN_FIRST_NAME.add("寒梅"); - CN_FIRST_NAME.add("斯雅"); - CN_FIRST_NAME.add("华灿"); - CN_FIRST_NAME.add("承福"); - CN_FIRST_NAME.add("音悦"); - CN_FIRST_NAME.add("秋蝶"); - CN_FIRST_NAME.add("兴言"); - CN_FIRST_NAME.add("景龙"); - CN_FIRST_NAME.add("骏俊"); - CN_FIRST_NAME.add("桂月"); - CN_FIRST_NAME.add("春梅"); - CN_FIRST_NAME.add("欣跃"); - CN_FIRST_NAME.add("平露"); - CN_FIRST_NAME.add("曼云"); - CN_FIRST_NAME.add("新雅"); - CN_FIRST_NAME.add("乐正"); - CN_FIRST_NAME.add("梦竹"); - CN_FIRST_NAME.add("寒梦"); - CN_FIRST_NAME.add("醉蝶"); - CN_FIRST_NAME.add("丹丹"); - CN_FIRST_NAME.add("高朗"); - CN_FIRST_NAME.add("思莹"); - CN_FIRST_NAME.add("旭辉"); - CN_FIRST_NAME.add("新雨"); - CN_FIRST_NAME.add("新雪"); - CN_FIRST_NAME.add("雅蕊"); - CN_FIRST_NAME.add("忆丹"); - CN_FIRST_NAME.add("思莲"); - CN_FIRST_NAME.add("阳霁"); - CN_FIRST_NAME.add("淳雅"); - CN_FIRST_NAME.add("代秋"); - CN_FIRST_NAME.add("孤阳"); - CN_FIRST_NAME.add("意智"); - CN_FIRST_NAME.add("稷骞"); - CN_FIRST_NAME.add("寻菡"); - CN_FIRST_NAME.add("忆之"); - CN_FIRST_NAME.add("卓逸"); - CN_FIRST_NAME.add("彩妍"); - CN_FIRST_NAME.add("庆生"); - CN_FIRST_NAME.add("伶俐"); - CN_FIRST_NAME.add("子墨"); - CN_FIRST_NAME.add("康伯"); - CN_FIRST_NAME.add("绮梅"); - CN_FIRST_NAME.add("寻菱"); - CN_FIRST_NAME.add("念梦"); - CN_FIRST_NAME.add("新霁"); - CN_FIRST_NAME.add("苇然"); - CN_FIRST_NAME.add("雁易"); - CN_FIRST_NAME.add("建木"); - CN_FIRST_NAME.add("秋柔"); - CN_FIRST_NAME.add("宏儒"); - CN_FIRST_NAME.add("光辉"); - CN_FIRST_NAME.add("秋柏"); - CN_FIRST_NAME.add("半兰"); - CN_FIRST_NAME.add("令秋"); - CN_FIRST_NAME.add("凯安"); - CN_FIRST_NAME.add("丹云"); - CN_FIRST_NAME.add("天宇"); - CN_FIRST_NAME.add("绮梦"); - CN_FIRST_NAME.add("慈心"); - CN_FIRST_NAME.add("思菱"); - CN_FIRST_NAME.add("海昌"); - CN_FIRST_NAME.add("建本"); - CN_FIRST_NAME.add("智纯"); - CN_FIRST_NAME.add("名姝"); - CN_FIRST_NAME.add("莹琇"); - CN_FIRST_NAME.add("明诚"); - CN_FIRST_NAME.add("凯定"); - CN_FIRST_NAME.add("静珊"); - CN_FIRST_NAME.add("思萌"); - CN_FIRST_NAME.add("丹亦"); - CN_FIRST_NAME.add("彭祖"); - CN_FIRST_NAME.add("靖琪"); - CN_FIRST_NAME.add("秋柳"); - CN_FIRST_NAME.add("英豪"); - CN_FIRST_NAME.add("幼白"); - CN_FIRST_NAME.add("高杰"); - CN_FIRST_NAME.add("冬莲"); - CN_FIRST_NAME.add("格格"); - CN_FIRST_NAME.add("任真"); - CN_FIRST_NAME.add("晴美"); - CN_FIRST_NAME.add("乐语"); - CN_FIRST_NAME.add("丹溪"); - CN_FIRST_NAME.add("元灵"); - CN_FIRST_NAME.add("醉柳"); - CN_FIRST_NAME.add("晓莉"); - CN_FIRST_NAME.add("骏逸"); - CN_FIRST_NAME.add("若淑"); - CN_FIRST_NAME.add("恨竹"); - CN_FIRST_NAME.add("凌翠"); - CN_FIRST_NAME.add("娟巧"); - CN_FIRST_NAME.add("桂枫"); - CN_FIRST_NAME.add("萧曼"); - CN_FIRST_NAME.add("熙星"); - CN_FIRST_NAME.add("锐立"); - CN_FIRST_NAME.add("博达"); - CN_FIRST_NAME.add("梦安"); - CN_FIRST_NAME.add("雅旋"); - CN_FIRST_NAME.add("思萱"); - CN_FIRST_NAME.add("觅风"); - CN_FIRST_NAME.add("光远"); - CN_FIRST_NAME.add("白云"); - CN_FIRST_NAME.add("初阳"); - CN_FIRST_NAME.add("致欣"); - CN_FIRST_NAME.add("香之"); - CN_FIRST_NAME.add("文山"); - CN_FIRST_NAME.add("白亦"); - CN_FIRST_NAME.add("微熹"); - CN_FIRST_NAME.add("博远"); - CN_FIRST_NAME.add("季雅"); - CN_FIRST_NAME.add("淳静"); - CN_FIRST_NAME.add("漾漾"); - CN_FIRST_NAME.add("冬菱"); - CN_FIRST_NAME.add("向秋"); - CN_FIRST_NAME.add("麦冬"); - CN_FIRST_NAME.add("婀娜"); - CN_FIRST_NAME.add("怀柔"); - CN_FIRST_NAME.add("瀚钰"); - CN_FIRST_NAME.add("妙之"); - CN_FIRST_NAME.add("宜修"); - CN_FIRST_NAME.add("瑞灵"); - CN_FIRST_NAME.add("半凡"); - CN_FIRST_NAME.add("梦容"); - CN_FIRST_NAME.add("梦寒"); - CN_FIRST_NAME.add("芷珊"); - CN_FIRST_NAME.add("骞仕"); - CN_FIRST_NAME.add("芷珍"); - CN_FIRST_NAME.add("永贞"); - CN_FIRST_NAME.add("乐水"); - CN_FIRST_NAME.add("灵槐"); - CN_FIRST_NAME.add("婷玉"); - CN_FIRST_NAME.add("觅夏"); - CN_FIRST_NAME.add("含雁"); - CN_FIRST_NAME.add("一嘉"); - CN_FIRST_NAME.add("虹彩"); - CN_FIRST_NAME.add("韦茹"); - CN_FIRST_NAME.add("雅昶"); - CN_FIRST_NAME.add("冰莹"); - CN_FIRST_NAME.add("悦可"); - CN_FIRST_NAME.add("虹影"); - CN_FIRST_NAME.add("博瀚"); - CN_FIRST_NAME.add("令婧"); - CN_FIRST_NAME.add("志泽"); - CN_FIRST_NAME.add("冬萱"); - CN_FIRST_NAME.add("睿达"); - CN_FIRST_NAME.add("伟博"); - CN_FIRST_NAME.add("惜海"); - CN_FIRST_NAME.add("乐池"); - CN_FIRST_NAME.add("幻露"); - CN_FIRST_NAME.add("开朗"); - CN_FIRST_NAME.add("建柏"); - CN_FIRST_NAME.add("方雅"); - CN_FIRST_NAME.add("雅晗"); - CN_FIRST_NAME.add("奇颖"); - CN_FIRST_NAME.add("康适"); - CN_FIRST_NAME.add("婉奕"); - CN_FIRST_NAME.add("凡巧"); - CN_FIRST_NAME.add("幼霜"); - CN_FIRST_NAME.add("曼辞"); - CN_FIRST_NAME.add("天籁"); - CN_FIRST_NAME.add("华采"); - CN_FIRST_NAME.add("优瑗"); - CN_FIRST_NAME.add("希蓉"); - CN_FIRST_NAME.add("新知"); - CN_FIRST_NAME.add("皎洁"); - CN_FIRST_NAME.add("依萱"); - CN_FIRST_NAME.add("夏彤"); - CN_FIRST_NAME.add("静和"); - CN_FIRST_NAME.add("景胜"); - CN_FIRST_NAME.add("芷琪"); - CN_FIRST_NAME.add("卓然"); - CN_FIRST_NAME.add("和歌"); - CN_FIRST_NAME.add("怿悦"); - CN_FIRST_NAME.add("冰菱"); - CN_FIRST_NAME.add("旭炎"); - CN_FIRST_NAME.add("怀桃"); - CN_FIRST_NAME.add("端敏"); - CN_FIRST_NAME.add("鹏鲲"); - CN_FIRST_NAME.add("经赋"); - CN_FIRST_NAME.add("瑜然"); - CN_FIRST_NAME.add("竹萱"); - CN_FIRST_NAME.add("绿蝶"); - CN_FIRST_NAME.add("智美"); - CN_FIRST_NAME.add("鹏鲸"); - CN_FIRST_NAME.add("若云"); - CN_FIRST_NAME.add("建树"); - CN_FIRST_NAME.add("和正"); - CN_FIRST_NAME.add("如冬"); - CN_FIRST_NAME.add("南烟"); - CN_FIRST_NAME.add("英资"); - CN_FIRST_NAME.add("如冰"); - CN_FIRST_NAME.add("恨寒"); - CN_FIRST_NAME.add("初雪"); - CN_FIRST_NAME.add("德元"); - CN_FIRST_NAME.add("盼翠"); - CN_FIRST_NAME.add("运鹏"); - CN_FIRST_NAME.add("蕙芸"); - CN_FIRST_NAME.add("学真"); - CN_FIRST_NAME.add("心远"); - CN_FIRST_NAME.add("高格"); - CN_FIRST_NAME.add("谧辰"); - CN_FIRST_NAME.add("飞薇"); - CN_FIRST_NAME.add("山雁"); - CN_FIRST_NAME.add("飞文"); - CN_FIRST_NAME.add("运鸿"); - CN_FIRST_NAME.add("荷紫"); - CN_FIRST_NAME.add("宏爽"); - CN_FIRST_NAME.add("康健"); - CN_FIRST_NAME.add("梦山"); - CN_FIRST_NAME.add("水丹"); - CN_FIRST_NAME.add("蕴美"); - CN_FIRST_NAME.add("语雪"); - CN_FIRST_NAME.add("听露"); - CN_FIRST_NAME.add("智志"); - CN_FIRST_NAME.add("朋义"); - CN_FIRST_NAME.add("如凡"); - CN_FIRST_NAME.add("咏歌"); - CN_FIRST_NAME.add("骊燕"); - CN_FIRST_NAME.add("水之"); - CN_FIRST_NAME.add("琪睿"); - CN_FIRST_NAME.add("婉秀"); - CN_FIRST_NAME.add("云蔚"); - CN_FIRST_NAME.add("忆辰"); - CN_FIRST_NAME.add("鹤骞"); - CN_FIRST_NAME.add("清嘉"); - CN_FIRST_NAME.add("冷荷"); - CN_FIRST_NAME.add("悦和"); - CN_FIRST_NAME.add("怀梦"); - CN_FIRST_NAME.add("畅畅"); - CN_FIRST_NAME.add("辰良"); - CN_FIRST_NAME.add("涵忍"); - CN_FIRST_NAME.add("俊弼"); - CN_FIRST_NAME.add("梦岚"); - CN_FIRST_NAME.add("蕙若"); - CN_FIRST_NAME.add("哲彦"); - CN_FIRST_NAME.add("绿柏"); - CN_FIRST_NAME.add("明洁"); - CN_FIRST_NAME.add("初露"); - CN_FIRST_NAME.add("皓洁"); - CN_FIRST_NAME.add("腾骏"); - CN_FIRST_NAME.add("修竹"); - CN_FIRST_NAME.add("元冬"); - CN_FIRST_NAME.add("凝绿"); - CN_FIRST_NAME.add("庄雅"); - CN_FIRST_NAME.add("杉月"); - CN_FIRST_NAME.add("菊华"); - CN_FIRST_NAME.add("哲美"); - CN_FIRST_NAME.add("俊彦"); - CN_FIRST_NAME.add("米雪"); - CN_FIRST_NAME.add("叶帆"); - CN_FIRST_NAME.add("忆远"); - CN_FIRST_NAME.add("雪艳"); - CN_FIRST_NAME.add("绿柳"); - CN_FIRST_NAME.add("乐贤"); - CN_FIRST_NAME.add("思敏"); - CN_FIRST_NAME.add("丽佳"); - CN_FIRST_NAME.add("又莲"); - CN_FIRST_NAME.add("谷之"); - CN_FIRST_NAME.add("一雯"); - CN_FIRST_NAME.add("安南"); - CN_FIRST_NAME.add("晓蓝"); - CN_FIRST_NAME.add("承安"); - CN_FIRST_NAME.add("阳飇"); - CN_FIRST_NAME.add("新颖"); - CN_FIRST_NAME.add("安卉"); - CN_FIRST_NAME.add("礼骞"); - CN_FIRST_NAME.add("腾骞"); - CN_FIRST_NAME.add("永丰"); - CN_FIRST_NAME.add("飞昂"); - CN_FIRST_NAME.add("婉娜"); - CN_FIRST_NAME.add("海融"); - CN_FIRST_NAME.add("元凯"); - CN_FIRST_NAME.add("承宣"); - CN_FIRST_NAME.add("俊美"); - CN_FIRST_NAME.add("尔芙"); - CN_FIRST_NAME.add("曜瑞"); - CN_FIRST_NAME.add("宛儿"); - CN_FIRST_NAME.add("冷菱"); - CN_FIRST_NAME.add("骞信"); - CN_FIRST_NAME.add("宜然"); - CN_FIRST_NAME.add("以筠"); - CN_FIRST_NAME.add("流丽"); - CN_FIRST_NAME.add("纳兰"); - CN_FIRST_NAME.add("又菡"); - CN_FIRST_NAME.add("飞星"); - CN_FIRST_NAME.add("阳飙"); - CN_FIRST_NAME.add("芦雪"); - CN_FIRST_NAME.add("志专"); - CN_FIRST_NAME.add("千叶"); - CN_FIRST_NAME.add("鸿彩"); - CN_FIRST_NAME.add("力行"); - CN_FIRST_NAME.add("向笛"); - CN_FIRST_NAME.add("飞虎"); - CN_FIRST_NAME.add("经业"); - CN_FIRST_NAME.add("濮存"); - CN_FIRST_NAME.add("冰蓝"); - CN_FIRST_NAME.add("俊德"); - CN_FIRST_NAME.add("志业"); - CN_FIRST_NAME.add("庆雪"); - CN_FIRST_NAME.add("谷云"); - CN_FIRST_NAME.add("湉湉"); - CN_FIRST_NAME.add("阳夏"); - CN_FIRST_NAME.add("骏燕"); - CN_FIRST_NAME.add("修筠"); - CN_FIRST_NAME.add("琴雪"); - CN_FIRST_NAME.add("梓彤"); - CN_FIRST_NAME.add("代容"); - CN_FIRST_NAME.add("鸿羲"); - CN_FIRST_NAME.add("林帆"); - CN_FIRST_NAME.add("娅芳"); - CN_FIRST_NAME.add("子骞"); - CN_FIRST_NAME.add("良工"); - CN_FIRST_NAME.add("迎彤"); - CN_FIRST_NAME.add("鸿德"); - CN_FIRST_NAME.add("鸿羽"); - CN_FIRST_NAME.add("冷萱"); - CN_FIRST_NAME.add("惠丽"); - CN_FIRST_NAME.add("悦畅"); - CN_FIRST_NAME.add("熙柔"); - CN_FIRST_NAME.add("和豫"); - CN_FIRST_NAME.add("经义"); - CN_FIRST_NAME.add("梓美"); - CN_FIRST_NAME.add("庄静"); - CN_FIRST_NAME.add("志义"); - CN_FIRST_NAME.add("昊东"); - CN_FIRST_NAME.add("丰熙"); - CN_FIRST_NAME.add("哲思"); - CN_FIRST_NAME.add("忆灵"); - CN_FIRST_NAME.add("弘文"); - CN_FIRST_NAME.add("慕思"); - CN_FIRST_NAME.add("傲菡"); - CN_FIRST_NAME.add("安双"); - CN_FIRST_NAME.add("夜绿"); - CN_FIRST_NAME.add("安珊"); - CN_FIRST_NAME.add("鸿志"); - CN_FIRST_NAME.add("慧巧"); - CN_FIRST_NAME.add("清雅"); - CN_FIRST_NAME.add("荏苒"); - CN_FIRST_NAME.add("沛芹"); - CN_FIRST_NAME.add("光熙"); - CN_FIRST_NAME.add("彭魄"); - CN_FIRST_NAME.add("昌淼"); - CN_FIRST_NAME.add("柔雅"); - CN_FIRST_NAME.add("茹薇"); - CN_FIRST_NAME.add("依薇"); - CN_FIRST_NAME.add("嘉平"); - CN_FIRST_NAME.add("嘉年"); - CN_FIRST_NAME.add("寻春"); - CN_FIRST_NAME.add("以寒"); - CN_FIRST_NAME.add("泽雨"); - CN_FIRST_NAME.add("暄美"); - CN_FIRST_NAME.add("晓蕾"); - CN_FIRST_NAME.add("兰泽"); - CN_FIRST_NAME.add("友菱"); - CN_FIRST_NAME.add("凝心"); - CN_FIRST_NAME.add("涵育"); - CN_FIRST_NAME.add("荌荌"); - CN_FIRST_NAME.add("清霁"); - CN_FIRST_NAME.add("陶然"); - CN_FIRST_NAME.add("弘新"); - CN_FIRST_NAME.add("寄波"); - CN_FIRST_NAME.add("俏美"); - CN_FIRST_NAME.add("嘉庆"); - CN_FIRST_NAME.add("勇捷"); - CN_FIRST_NAME.add("红叶"); - CN_FIRST_NAME.add("孟夏"); - CN_FIRST_NAME.add("子童"); - CN_FIRST_NAME.add("宏博"); - CN_FIRST_NAME.add("丝琦"); - CN_FIRST_NAME.add("海桃"); - CN_FIRST_NAME.add("丝琪"); - CN_FIRST_NAME.add("经亘"); - CN_FIRST_NAME.add("沛若"); - CN_FIRST_NAME.add("宛凝"); - CN_FIRST_NAME.add("弘方"); - CN_FIRST_NAME.add("安吉"); - CN_FIRST_NAME.add("之云"); - CN_FIRST_NAME.add("雁桃"); - CN_FIRST_NAME.add("君婷"); - CN_FIRST_NAME.add("锦程"); - CN_FIRST_NAME.add("雅柏"); - CN_FIRST_NAME.add("昊乾"); - CN_FIRST_NAME.add("悦喜"); - CN_FIRST_NAME.add("浩言"); - CN_FIRST_NAME.add("锐精"); - CN_FIRST_NAME.add("雅柔"); - CN_FIRST_NAME.add("可心"); - CN_FIRST_NAME.add("嘉纳"); - CN_FIRST_NAME.add("才艺"); - CN_FIRST_NAME.add("芮雅"); - CN_FIRST_NAME.add("半双"); - CN_FIRST_NAME.add("青雪"); - CN_FIRST_NAME.add("安琪"); - CN_FIRST_NAME.add("鹏鹍"); - CN_FIRST_NAME.add("才良"); - CN_FIRST_NAME.add("丹烟"); - CN_FIRST_NAME.add("怜晴"); - CN_FIRST_NAME.add("晓旋"); - CN_FIRST_NAME.add("小萍"); - CN_FIRST_NAME.add("天巧"); - CN_FIRST_NAME.add("天工"); - CN_FIRST_NAME.add("雨莲"); - CN_FIRST_NAME.add("冰薇"); - CN_FIRST_NAME.add("晗蕊"); - CN_FIRST_NAME.add("孤风"); - CN_FIRST_NAME.add("乐游"); - CN_FIRST_NAME.add("元勋"); - CN_FIRST_NAME.add("洁雅"); - CN_FIRST_NAME.add("阳秋"); - CN_FIRST_NAME.add("凝思"); - CN_FIRST_NAME.add("冬易"); - CN_FIRST_NAME.add("和泰"); - CN_FIRST_NAME.add("莹白"); - CN_FIRST_NAME.add("良平"); - CN_FIRST_NAME.add("雁梅"); - CN_FIRST_NAME.add("涵意"); - CN_FIRST_NAME.add("和泽"); - CN_FIRST_NAME.add("慕悦"); - CN_FIRST_NAME.add("乐湛"); - CN_FIRST_NAME.add("幻天"); - CN_FIRST_NAME.add("星汉"); - CN_FIRST_NAME.add("柔静"); - CN_FIRST_NAME.add("朗丽"); - CN_FIRST_NAME.add("晗蕾"); - CN_FIRST_NAME.add("奥雅"); - CN_FIRST_NAME.add("雪莲"); - CN_FIRST_NAME.add("文康"); - CN_FIRST_NAME.add("如南"); - CN_FIRST_NAME.add("又蓝"); - CN_FIRST_NAME.add("俊悟"); - CN_FIRST_NAME.add("佁然"); - CN_FIRST_NAME.add("若灵"); - CN_FIRST_NAME.add("晓星"); - CN_FIRST_NAME.add("长运"); - CN_FIRST_NAME.add("叶彤"); - CN_FIRST_NAME.add("安和"); - CN_FIRST_NAME.add("悠雅"); - CN_FIRST_NAME.add("祺瑞"); - CN_FIRST_NAME.add("晓昕"); - CN_FIRST_NAME.add("驰皓"); - CN_FIRST_NAME.add("琴音"); - CN_FIRST_NAME.add("翠丝"); - CN_FIRST_NAME.add("子安"); - CN_FIRST_NAME.add("元化"); - CN_FIRST_NAME.add("兴贤"); - CN_FIRST_NAME.add("子宁"); - CN_FIRST_NAME.add("和洽"); - CN_FIRST_NAME.add("曼冬"); - CN_FIRST_NAME.add("忆然"); - CN_FIRST_NAME.add("平婉"); - CN_FIRST_NAME.add("子实"); - CN_FIRST_NAME.add("启颜"); - CN_FIRST_NAME.add("多思"); - CN_FIRST_NAME.add("才英"); - CN_FIRST_NAME.add("书语"); - CN_FIRST_NAME.add("琴韵"); - CN_FIRST_NAME.add("绍辉"); - CN_FIRST_NAME.add("静白"); - CN_FIRST_NAME.add("昊伟"); - CN_FIRST_NAME.add("齐心"); - CN_FIRST_NAME.add("立诚"); - CN_FIRST_NAME.add("月灵"); - CN_FIRST_NAME.add("依晨"); - CN_FIRST_NAME.add("天干"); - CN_FIRST_NAME.add("晗日"); - CN_FIRST_NAME.add("乐人"); - CN_FIRST_NAME.add("坚白"); - CN_FIRST_NAME.add("曼凡"); - CN_FIRST_NAME.add("驰雪"); - CN_FIRST_NAME.add("明亮"); - CN_FIRST_NAME.add("曼凝"); - CN_FIRST_NAME.add("玉泉"); - CN_FIRST_NAME.add("信鸥"); - CN_FIRST_NAME.add("雪萍"); - CN_FIRST_NAME.add("幻香"); - CN_FIRST_NAME.add("飞松"); - CN_FIRST_NAME.add("信鸿"); - CN_FIRST_NAME.add("洁静"); - CN_FIRST_NAME.add("希月"); - CN_FIRST_NAME.add("诗筠"); - CN_FIRST_NAME.add("星河"); - CN_FIRST_NAME.add("罗绮"); - CN_FIRST_NAME.add("问芙"); - CN_FIRST_NAME.add("俊能"); - CN_FIRST_NAME.add("芮静"); - CN_FIRST_NAME.add("德华"); - CN_FIRST_NAME.add("欣然"); - CN_FIRST_NAME.add("翰池"); - CN_FIRST_NAME.add("晨菲"); - CN_FIRST_NAME.add("向山"); - CN_FIRST_NAME.add("长逸"); - CN_FIRST_NAME.add("忻欢"); - CN_FIRST_NAME.add("晔晔"); - CN_FIRST_NAME.add("语风"); - CN_FIRST_NAME.add("运恒"); - CN_FIRST_NAME.add("佑运"); - CN_FIRST_NAME.add("初夏"); - CN_FIRST_NAME.add("玉泽"); - CN_FIRST_NAME.add("婉容"); - CN_FIRST_NAME.add("清韵"); - CN_FIRST_NAME.add("静雅"); - CN_FIRST_NAME.add("凯康"); - CN_FIRST_NAME.add("飞柏"); - CN_FIRST_NAME.add("天纵"); - CN_FIRST_NAME.add("奕奕"); - CN_FIRST_NAME.add("嘉美"); - CN_FIRST_NAME.add("星波"); - CN_FIRST_NAME.add("星泽"); - CN_FIRST_NAME.add("文彦"); - CN_FIRST_NAME.add("颐然"); - CN_FIRST_NAME.add("晗昱"); - CN_FIRST_NAME.add("苑博"); - CN_FIRST_NAME.add("良弼"); - CN_FIRST_NAME.add("曦哲"); - CN_FIRST_NAME.add("梅花"); - CN_FIRST_NAME.add("含香"); - CN_FIRST_NAME.add("嘉德"); - CN_FIRST_NAME.add("晨萱"); - CN_FIRST_NAME.add("才捷"); - CN_FIRST_NAME.add("德厚"); - CN_FIRST_NAME.add("文彬"); - CN_FIRST_NAME.add("布衣"); - CN_FIRST_NAME.add("炫明"); - CN_FIRST_NAME.add("映波"); - CN_FIRST_NAME.add("力言"); - CN_FIRST_NAME.add("易云"); - CN_FIRST_NAME.add("作人"); - CN_FIRST_NAME.add("俊慧"); - CN_FIRST_NAME.add("采莲"); - CN_FIRST_NAME.add("沛萍"); - CN_FIRST_NAME.add("嘉志"); - CN_FIRST_NAME.add("燕舞"); - CN_FIRST_NAME.add("葛菲"); - CN_FIRST_NAME.add("星津"); - CN_FIRST_NAME.add("晗晗"); - CN_FIRST_NAME.add("卿云"); - CN_FIRST_NAME.add("英达"); - CN_FIRST_NAME.add("含秀"); - CN_FIRST_NAME.add("星洲"); - CN_FIRST_NAME.add("梅英"); - CN_FIRST_NAME.add("灵波"); - CN_FIRST_NAME.add("芷雪"); - CN_FIRST_NAME.add("晓曼"); - CN_FIRST_NAME.add("敏智"); - CN_FIRST_NAME.add("白凡"); - CN_FIRST_NAME.add("怡月"); - CN_FIRST_NAME.add("慧美"); - CN_FIRST_NAME.add("思松"); - CN_FIRST_NAME.add("永逸"); - CN_FIRST_NAME.add("白凝"); - CN_FIRST_NAME.add("浩歌"); - CN_FIRST_NAME.add("玄清"); - CN_FIRST_NAME.add("文心"); - CN_FIRST_NAME.add("小蕊"); - CN_FIRST_NAME.add("盼芙"); - CN_FIRST_NAME.add("笑萍"); - CN_FIRST_NAME.add("惜灵"); - CN_FIRST_NAME.add("明轩"); - CN_FIRST_NAME.add("新立"); - CN_FIRST_NAME.add("吉帆"); - CN_FIRST_NAME.add("流逸"); - CN_FIRST_NAME.add("文德"); - CN_FIRST_NAME.add("傲薇"); - CN_FIRST_NAME.add("会雯"); - CN_FIRST_NAME.add("竹月"); - CN_FIRST_NAME.add("思枫"); - CN_FIRST_NAME.add("卓君"); - CN_FIRST_NAME.add("雅楠"); - CN_FIRST_NAME.add("怡木"); - CN_FIRST_NAME.add("兴业"); - CN_FIRST_NAME.add("光华"); - CN_FIRST_NAME.add("慧心"); - CN_FIRST_NAME.add("双文"); - CN_FIRST_NAME.add("嘉怡"); - CN_FIRST_NAME.add("湘云"); - CN_FIRST_NAME.add("星海"); - CN_FIRST_NAME.add("含娇"); - CN_FIRST_NAME.add("明辉"); - CN_FIRST_NAME.add("皓轩"); - CN_FIRST_NAME.add("琼音"); - CN_FIRST_NAME.add("若兰"); - CN_FIRST_NAME.add("瑛琭"); - CN_FIRST_NAME.add("尔蓉"); - CN_FIRST_NAME.add("尔蓝"); - CN_FIRST_NAME.add("小蕾"); - CN_FIRST_NAME.add("文翰"); - CN_FIRST_NAME.add("新竹"); - CN_FIRST_NAME.add("寄云"); - CN_FIRST_NAME.add("兴为"); - CN_FIRST_NAME.add("楚楚"); - CN_FIRST_NAME.add("秀洁"); - CN_FIRST_NAME.add("傲旋"); - CN_FIRST_NAME.add("天罡"); - CN_FIRST_NAME.add("文耀"); - CN_FIRST_NAME.add("采萱"); - CN_FIRST_NAME.add("思柔"); - CN_FIRST_NAME.add("南珍"); - CN_FIRST_NAME.add("觅山"); - CN_FIRST_NAME.add("温瑜"); - CN_FIRST_NAME.add("平宁"); - CN_FIRST_NAME.add("晨蓓"); - CN_FIRST_NAME.add("高歌"); - CN_FIRST_NAME.add("莺韵"); - CN_FIRST_NAME.add("代巧"); - CN_FIRST_NAME.add("明俊"); - CN_FIRST_NAME.add("良翰"); - CN_FIRST_NAME.add("颖然"); - CN_FIRST_NAME.add("瑛瑶"); - CN_FIRST_NAME.add("英逸"); - CN_FIRST_NAME.add("昂然"); - CN_FIRST_NAME.add("文思"); - CN_FIRST_NAME.add("胤运"); - CN_FIRST_NAME.add("明达"); - CN_FIRST_NAME.add("平安"); - CN_FIRST_NAME.add("溪蓝"); - CN_FIRST_NAME.add("骏琛"); - CN_FIRST_NAME.add("明远"); - CN_FIRST_NAME.add("霞绮"); - CN_FIRST_NAME.add("馨逸"); - CN_FIRST_NAME.add("水儿"); - CN_FIRST_NAME.add("梦影"); - CN_FIRST_NAME.add("翰海"); - CN_FIRST_NAME.add("虹英"); - CN_FIRST_NAME.add("博厚"); - CN_FIRST_NAME.add("雨文"); - CN_FIRST_NAME.add("晶茹"); - CN_FIRST_NAME.add("访彤"); - CN_FIRST_NAME.add("筠竹"); - CN_FIRST_NAME.add("元瑶"); - CN_FIRST_NAME.add("宏畅"); - CN_FIRST_NAME.add("鹏翼"); - CN_FIRST_NAME.add("友易"); - CN_FIRST_NAME.add("寻桃"); - CN_FIRST_NAME.add("又晴"); - CN_FIRST_NAME.add("傲易"); - CN_FIRST_NAME.add("沛蓝"); - CN_FIRST_NAME.add("芸静"); - CN_FIRST_NAME.add("天心"); - CN_FIRST_NAME.add("晓枫"); - CN_FIRST_NAME.add("睿博"); - CN_FIRST_NAME.add("一禾"); - CN_FIRST_NAME.add("嘉悦"); - CN_FIRST_NAME.add("南琴"); - CN_FIRST_NAME.add("绮波"); - CN_FIRST_NAME.add("美如"); - CN_FIRST_NAME.add("新筠"); - CN_FIRST_NAME.add("安阳"); - CN_FIRST_NAME.add("曼卉"); - CN_FIRST_NAME.add("霁芸"); - CN_FIRST_NAME.add("朋兴"); - CN_FIRST_NAME.add("秀越"); - CN_FIRST_NAME.add("浩气"); - CN_FIRST_NAME.add("星渊"); - CN_FIRST_NAME.add("长兴"); - CN_FIRST_NAME.add("俊才"); - CN_FIRST_NAME.add("冰蝶"); - CN_FIRST_NAME.add("问萍"); - CN_FIRST_NAME.add("瑜璟"); - CN_FIRST_NAME.add("典丽"); - CN_FIRST_NAME.add("梓舒"); - CN_FIRST_NAME.add("千雁"); - CN_FIRST_NAME.add("幻竹"); - CN_FIRST_NAME.add("承平"); - CN_FIRST_NAME.add("昂熙"); - CN_FIRST_NAME.add("依柔"); - CN_FIRST_NAME.add("韦曲"); - CN_FIRST_NAME.add("恬默"); - CN_FIRST_NAME.add("寻梅"); - CN_FIRST_NAME.add("乐逸"); - CN_FIRST_NAME.add("采蓝"); - CN_FIRST_NAME.add("亦旋"); - CN_FIRST_NAME.add("天翰"); - CN_FIRST_NAME.add("清奇"); - CN_FIRST_NAME.add("俊良"); - CN_FIRST_NAME.add("惜儿"); - CN_FIRST_NAME.add("彦红"); - CN_FIRST_NAME.add("雨旋"); - CN_FIRST_NAME.add("冰枫"); - CN_FIRST_NAME.add("玉书"); - CN_FIRST_NAME.add("水冬"); - CN_FIRST_NAME.add("嘉胜"); - CN_FIRST_NAME.add("小星"); - CN_FIRST_NAME.add("嘉惠"); - CN_FIRST_NAME.add("小春"); - CN_FIRST_NAME.add("鸿才"); - CN_FIRST_NAME.add("俊艾"); - CN_FIRST_NAME.add("春海"); - CN_FIRST_NAME.add("菱凡"); - CN_FIRST_NAME.add("霞影"); - CN_FIRST_NAME.add("曜坤"); - CN_FIRST_NAME.add("永元"); - CN_FIRST_NAME.add("傲晴"); - CN_FIRST_NAME.add("谷兰"); - CN_FIRST_NAME.add("韶敏"); - CN_FIRST_NAME.add("光启"); - CN_FIRST_NAME.add("楠楠"); - CN_FIRST_NAME.add("绍元"); - CN_FIRST_NAME.add("安白"); - CN_FIRST_NAME.add("水凡"); - CN_FIRST_NAME.add("高谊"); - CN_FIRST_NAME.add("清妍"); - CN_FIRST_NAME.add("雨星"); - CN_FIRST_NAME.add("莞尔"); - CN_FIRST_NAME.add("紫菱"); - CN_FIRST_NAME.add("骞北"); - CN_FIRST_NAME.add("小晨"); - CN_FIRST_NAME.add("文惠"); - CN_FIRST_NAME.add("蓉城"); - CN_FIRST_NAME.add("驰颖"); - CN_FIRST_NAME.add("丹南"); - CN_FIRST_NAME.add("清妙"); - CN_FIRST_NAME.add("云梦"); - CN_FIRST_NAME.add("俊拔"); - CN_FIRST_NAME.add("沛文"); - CN_FIRST_NAME.add("元甲"); - CN_FIRST_NAME.add("柔妙"); - CN_FIRST_NAME.add("紫萍"); - CN_FIRST_NAME.add("清馨"); - CN_FIRST_NAME.add("修平"); - CN_FIRST_NAME.add("骏哲"); - CN_FIRST_NAME.add("理群"); - CN_FIRST_NAME.add("晓桐"); - CN_FIRST_NAME.add("冬梅"); - CN_FIRST_NAME.add("波峻"); - CN_FIRST_NAME.add("颖初"); - CN_FIRST_NAME.add("凝芙"); - CN_FIRST_NAME.add("忆南"); - CN_FIRST_NAME.add("浦泽"); - CN_FIRST_NAME.add("惠然"); - CN_FIRST_NAME.add("哲茂"); - CN_FIRST_NAME.add("远悦"); - CN_FIRST_NAME.add("乐邦"); - CN_FIRST_NAME.add("曼珍"); - CN_FIRST_NAME.add("昊然"); - CN_FIRST_NAME.add("丝雨"); - CN_FIRST_NAME.add("白卉"); - CN_FIRST_NAME.add("嘉慕"); - CN_FIRST_NAME.add("曼珠"); - CN_FIRST_NAME.add("英光"); - CN_FIRST_NAME.add("紫萱"); - CN_FIRST_NAME.add("芬馥"); - CN_FIRST_NAME.add("清秋"); - CN_FIRST_NAME.add("天恩"); - CN_FIRST_NAME.add("醉波"); - CN_FIRST_NAME.add("昊焱"); - CN_FIRST_NAME.add("俊英"); - CN_FIRST_NAME.add("宏阔"); - CN_FIRST_NAME.add("秀丽"); - CN_FIRST_NAME.add("俊茂"); - CN_FIRST_NAME.add("致远"); - CN_FIRST_NAME.add("幼安"); - CN_FIRST_NAME.add("瑞锦"); - CN_FIRST_NAME.add("红雪"); - CN_FIRST_NAME.add("晨旭"); - CN_FIRST_NAME.add("彤彤"); - CN_FIRST_NAME.add("合美"); - CN_FIRST_NAME.add("运良"); - CN_FIRST_NAME.add("展鹏"); - CN_FIRST_NAME.add("承弼"); - CN_FIRST_NAME.add("雨晨"); - CN_FIRST_NAME.add("浩波"); - CN_FIRST_NAME.add("妍和"); - CN_FIRST_NAME.add("青香"); - CN_FIRST_NAME.add("世韵"); - CN_FIRST_NAME.add("天悦"); - CN_FIRST_NAME.add("芝宇"); - CN_FIRST_NAME.add("泰宁"); - CN_FIRST_NAME.add("雨晴"); - CN_FIRST_NAME.add("安国"); - CN_FIRST_NAME.add("飞槐"); - CN_FIRST_NAME.add("碧灵"); - CN_FIRST_NAME.add("白玉"); - CN_FIRST_NAME.add("坚壁"); - CN_FIRST_NAME.add("冷松"); - CN_FIRST_NAME.add("恬美"); - CN_FIRST_NAME.add("曼吟"); - CN_FIRST_NAME.add("采薇"); - CN_FIRST_NAME.add("采文"); - CN_FIRST_NAME.add("鸣晨"); - CN_FIRST_NAME.add("丽华"); - CN_FIRST_NAME.add("夏菡"); - CN_FIRST_NAME.add("悠奕"); - CN_FIRST_NAME.add("晨星"); - CN_FIRST_NAME.add("智菱"); - CN_FIRST_NAME.add("韦柔"); - CN_FIRST_NAME.add("又松"); - CN_FIRST_NAME.add("子帆"); - CN_FIRST_NAME.add("听筠"); - CN_FIRST_NAME.add("涵菡"); - CN_FIRST_NAME.add("香卉"); - CN_FIRST_NAME.add("安露"); - CN_FIRST_NAME.add("鸿振"); - CN_FIRST_NAME.add("骏喆"); - CN_FIRST_NAME.add("歌云"); - CN_FIRST_NAME.add("音景"); - CN_FIRST_NAME.add("涵菱"); - CN_FIRST_NAME.add("童欣"); - CN_FIRST_NAME.add("笑旋"); - CN_FIRST_NAME.add("锐志"); - CN_FIRST_NAME.add("开诚"); - CN_FIRST_NAME.add("兴运"); - CN_FIRST_NAME.add("听安"); - CN_FIRST_NAME.add("雪晴"); - CN_FIRST_NAME.add("馨兰"); - CN_FIRST_NAME.add("正诚"); - CN_FIRST_NAME.add("灵溪"); - CN_FIRST_NAME.add("桐欣"); - CN_FIRST_NAME.add("孤容"); - CN_FIRST_NAME.add("曾琪"); - CN_FIRST_NAME.add("书云"); - CN_FIRST_NAME.add("安青"); - CN_FIRST_NAME.add("叶舞"); - CN_FIRST_NAME.add("丽玉"); - CN_FIRST_NAME.add("乐儿"); - CN_FIRST_NAME.add("沛春"); - CN_FIRST_NAME.add("三姗"); - CN_FIRST_NAME.add("俊捷"); - CN_FIRST_NAME.add("清婉"); - CN_FIRST_NAME.add("半雪"); - CN_FIRST_NAME.add("乐然"); - CN_FIRST_NAME.add("思楠"); - CN_FIRST_NAME.add("兴修"); - CN_FIRST_NAME.add("锐翰"); - CN_FIRST_NAME.add("朗然"); - CN_FIRST_NAME.add("寒云"); - CN_FIRST_NAME.add("柔婉"); - CN_FIRST_NAME.add("素昕"); - CN_FIRST_NAME.add("安静"); - CN_FIRST_NAME.add("念之"); - CN_FIRST_NAME.add("绮丽"); - CN_FIRST_NAME.add("宛畅"); - CN_FIRST_NAME.add("嘉致"); - CN_FIRST_NAME.add("巍然"); - CN_FIRST_NAME.add("若南"); - CN_FIRST_NAME.add("悠馨"); - CN_FIRST_NAME.add("和通"); - CN_FIRST_NAME.add("又柔"); - CN_FIRST_NAME.add("傲松"); - CN_FIRST_NAME.add("夏萱"); - CN_FIRST_NAME.add("正谊"); - CN_FIRST_NAME.add("问蕊"); - CN_FIRST_NAME.add("玉轩"); - CN_FIRST_NAME.add("华皓"); - CN_FIRST_NAME.add("湘灵"); - CN_FIRST_NAME.add("丹琴"); - CN_FIRST_NAME.add("明煦"); - CN_FIRST_NAME.add("承德"); - CN_FIRST_NAME.add("以彤"); - CN_FIRST_NAME.add("若华"); - CN_FIRST_NAME.add("嘉懿"); - CN_FIRST_NAME.add("锐思"); - CN_FIRST_NAME.add("令美"); - CN_FIRST_NAME.add("欣可"); - CN_FIRST_NAME.add("淑惠"); - CN_FIRST_NAME.add("宏盛"); - CN_FIRST_NAME.add("子平"); - CN_FIRST_NAME.add("修齐"); - CN_FIRST_NAME.add("元嘉"); - CN_FIRST_NAME.add("采春"); - CN_FIRST_NAME.add("浩浩"); - CN_FIRST_NAME.add("凝荷"); - CN_FIRST_NAME.add("浩涆"); - CN_FIRST_NAME.add("瑰玮"); - CN_FIRST_NAME.add("凌文"); - CN_FIRST_NAME.add("成济"); - CN_FIRST_NAME.add("承志"); - CN_FIRST_NAME.add("雅歌"); - CN_FIRST_NAME.add("念云"); - CN_FIRST_NAME.add("高洁"); - CN_FIRST_NAME.add("寄灵"); - CN_FIRST_NAME.add("立人"); - CN_FIRST_NAME.add("雪曼"); - CN_FIRST_NAME.add("芳馥"); - CN_FIRST_NAME.add("芷天"); - CN_FIRST_NAME.add("半青"); - CN_FIRST_NAME.add("芳馨"); - CN_FIRST_NAME.add("懿轩"); - CN_FIRST_NAME.add("明熙"); - CN_FIRST_NAME.add("欣合"); - CN_FIRST_NAME.add("丽珠"); - CN_FIRST_NAME.add("月华"); - CN_FIRST_NAME.add("问薇"); - CN_FIRST_NAME.add("书仪"); - CN_FIRST_NAME.add("昌燎"); - CN_FIRST_NAME.add("令羽"); - CN_FIRST_NAME.add("萌运"); - CN_FIRST_NAME.add("天慧"); - CN_FIRST_NAME.add("傲柏"); - CN_FIRST_NAME.add("妙双"); - CN_FIRST_NAME.add("睿哲"); - CN_FIRST_NAME.add("妙珍"); - CN_FIRST_NAME.add("晓楠"); - CN_FIRST_NAME.add("文成"); - CN_FIRST_NAME.add("傲柔"); - CN_FIRST_NAME.add("依楠"); - CN_FIRST_NAME.add("修美"); - CN_FIRST_NAME.add("正豪"); - CN_FIRST_NAME.add("绮云"); - CN_FIRST_NAME.add("菱华"); - CN_FIRST_NAME.add("晨曦"); - CN_FIRST_NAME.add("景明"); - CN_FIRST_NAME.add("丽君"); - CN_FIRST_NAME.add("小枫"); - CN_FIRST_NAME.add("叶芳"); - CN_FIRST_NAME.add("迎荷"); - CN_FIRST_NAME.add("向彤"); - CN_FIRST_NAME.add("星辰"); - CN_FIRST_NAME.add("凝莲"); - CN_FIRST_NAME.add("紫蕙"); - CN_FIRST_NAME.add("巧云"); - CN_FIRST_NAME.add("明凝"); - CN_FIRST_NAME.add("子默"); - CN_FIRST_NAME.add("修德"); - CN_FIRST_NAME.add("杨柳"); - CN_FIRST_NAME.add("布欣"); - CN_FIRST_NAME.add("彬彬"); - CN_FIRST_NAME.add("梓莹"); - CN_FIRST_NAME.add("嘉良"); - CN_FIRST_NAME.add("笑晴"); - CN_FIRST_NAME.add("波鸿"); - CN_FIRST_NAME.add("元白"); - CN_FIRST_NAME.add("夏蓉"); - CN_FIRST_NAME.add("静秀"); - CN_FIRST_NAME.add("轶丽"); - CN_FIRST_NAME.add("水卉"); - CN_FIRST_NAME.add("翊君"); - CN_FIRST_NAME.add("逸雅"); - CN_FIRST_NAME.add("雅诗"); - CN_FIRST_NAME.add("涵蓄"); - CN_FIRST_NAME.add("晨朗"); - CN_FIRST_NAME.add("如雪"); - CN_FIRST_NAME.add("坚秉"); - CN_FIRST_NAME.add("冷梅"); - CN_FIRST_NAME.add("悠婉"); - CN_FIRST_NAME.add("彭彭"); - CN_FIRST_NAME.add("奇希"); - CN_FIRST_NAME.add("良才"); - CN_FIRST_NAME.add("梓菱"); - CN_FIRST_NAME.add("紫文"); - CN_FIRST_NAME.add("紫薇"); - CN_FIRST_NAME.add("骊雪"); - CN_FIRST_NAME.add("令怡"); - CN_FIRST_NAME.add("静姝"); - CN_FIRST_NAME.add("恬悦"); - CN_FIRST_NAME.add("兴邦"); - CN_FIRST_NAME.add("暄莹"); - CN_FIRST_NAME.add("奥婷"); - CN_FIRST_NAME.add("淑慧"); - CN_FIRST_NAME.add("忻乐"); - CN_FIRST_NAME.add("浩淼"); - CN_FIRST_NAME.add("高超"); - CN_FIRST_NAME.add("岚霏"); - CN_FIRST_NAME.add("承恩"); - CN_FIRST_NAME.add("雪松"); - CN_FIRST_NAME.add("骊霞"); - CN_FIRST_NAME.add("友桃"); - CN_FIRST_NAME.add("凌春"); - CN_FIRST_NAME.add("箫吟"); - CN_FIRST_NAME.add("志勇"); - CN_FIRST_NAME.add("远航"); - CN_FIRST_NAME.add("慧艳"); - CN_FIRST_NAME.add("芸馨"); - CN_FIRST_NAME.add("千风"); - CN_FIRST_NAME.add("问春"); - CN_FIRST_NAME.add("宜嘉"); - CN_FIRST_NAME.add("静娴"); - CN_FIRST_NAME.add("尔蝶"); - CN_FIRST_NAME.add("贞静"); - CN_FIRST_NAME.add("英勋"); - CN_FIRST_NAME.add("锐意"); - CN_FIRST_NAME.add("颐和"); - CN_FIRST_NAME.add("运莱"); - CN_FIRST_NAME.add("立轩"); - CN_FIRST_NAME.add("长卿"); - CN_FIRST_NAME.add("梓萱"); - CN_FIRST_NAME.add("雨柏"); - CN_FIRST_NAME.add("隽洁"); - CN_FIRST_NAME.add("饮香"); - CN_FIRST_NAME.add("浩丽"); - CN_FIRST_NAME.add("浩渺"); - CN_FIRST_NAME.add("静婉"); - CN_FIRST_NAME.add("成业"); - CN_FIRST_NAME.add("承悦"); - CN_FIRST_NAME.add("玛丽"); - CN_FIRST_NAME.add("天成"); - CN_FIRST_NAME.add("凌晓"); - CN_FIRST_NAME.add("昆卉"); - CN_FIRST_NAME.add("友梅"); - CN_FIRST_NAME.add("清宁"); - CN_FIRST_NAME.add("立辉"); - CN_FIRST_NAME.add("雪枫"); - CN_FIRST_NAME.add("嘉茂"); - CN_FIRST_NAME.add("驰婷"); - CN_FIRST_NAME.add("智敏"); - CN_FIRST_NAME.add("阳州"); - CN_FIRST_NAME.add("安顺"); - CN_FIRST_NAME.add("星火"); - CN_FIRST_NAME.add("惜玉"); - CN_FIRST_NAME.add("婷秀"); - CN_FIRST_NAME.add("凌晴"); - CN_FIRST_NAME.add("谷玉"); - CN_FIRST_NAME.add("泽宇"); - CN_FIRST_NAME.add("运菱"); - CN_FIRST_NAME.add("珠星"); - CN_FIRST_NAME.add("伟祺"); - CN_FIRST_NAME.add("聪慧"); - CN_FIRST_NAME.add("昌勋"); - CN_FIRST_NAME.add("子美"); - CN_FIRST_NAME.add("芸姝"); - CN_FIRST_NAME.add("语山"); - CN_FIRST_NAME.add("和光"); - CN_FIRST_NAME.add("驰媛"); - CN_FIRST_NAME.add("景曜"); - CN_FIRST_NAME.add("盼旋"); - CN_FIRST_NAME.add("婵娟"); - CN_FIRST_NAME.add("淑懿"); - CN_FIRST_NAME.add("开济"); - CN_FIRST_NAME.add("紫易"); - CN_FIRST_NAME.add("宛白"); - CN_FIRST_NAME.add("偲偲"); - CN_FIRST_NAME.add("和煦"); - CN_FIRST_NAME.add("尔柳"); - CN_FIRST_NAME.add("绿海"); - CN_FIRST_NAME.add("之卉"); - CN_FIRST_NAME.add("痴旋"); - CN_FIRST_NAME.add("雪柳"); - CN_FIRST_NAME.add("高义"); - CN_FIRST_NAME.add("惜珊"); - CN_FIRST_NAME.add("涵蕾"); - CN_FIRST_NAME.add("元青"); - CN_FIRST_NAME.add("慧英"); - CN_FIRST_NAME.add("正浩"); - CN_FIRST_NAME.add("建业"); - CN_FIRST_NAME.add("英华"); - CN_FIRST_NAME.add("嘉荣"); - CN_FIRST_NAME.add("中震"); - CN_FIRST_NAME.add("玟丽"); - CN_FIRST_NAME.add("高丽"); - CN_FIRST_NAME.add("秀逸"); - CN_FIRST_NAME.add("建中"); - CN_FIRST_NAME.add("文茵"); - CN_FIRST_NAME.add("建义"); - CN_FIRST_NAME.add("贞韵"); - CN_FIRST_NAME.add("晴虹"); - CN_FIRST_NAME.add("英卫"); - CN_FIRST_NAME.add("芮安"); - CN_FIRST_NAME.add("雨梅"); - CN_FIRST_NAME.add("欣畅"); - CN_FIRST_NAME.add("琦巧"); - CN_FIRST_NAME.add("英卓"); - CN_FIRST_NAME.add("沛柔"); - CN_FIRST_NAME.add("亦梅"); - CN_FIRST_NAME.add("夏旋"); - CN_FIRST_NAME.add("之玉"); - CN_FIRST_NAME.add("盼易"); - CN_FIRST_NAME.add("慕蕊"); - CN_FIRST_NAME.add("英博"); - CN_FIRST_NAME.add("丰雅"); - CN_FIRST_NAME.add("博雅"); - CN_FIRST_NAME.add("茂典"); - CN_FIRST_NAME.add("斯年"); - CN_FIRST_NAME.add("曲静"); - CN_FIRST_NAME.add("觅翠"); - CN_FIRST_NAME.add("迎蓉"); - CN_FIRST_NAME.add("梓蓓"); - CN_FIRST_NAME.add("宏硕"); - CN_FIRST_NAME.add("南霜"); - CN_FIRST_NAME.add("舒云"); - CN_FIRST_NAME.add("艳芳"); - CN_FIRST_NAME.add("南露"); - CN_FIRST_NAME.add("阳平"); - CN_FIRST_NAME.add("悦媛"); - CN_FIRST_NAME.add("子怀"); - CN_FIRST_NAME.add("歆然"); - CN_FIRST_NAME.add("成仁"); - CN_FIRST_NAME.add("倩秀"); - CN_FIRST_NAME.add("痴春"); - CN_FIRST_NAME.add("蕴藉"); - CN_FIRST_NAME.add("修能"); - CN_FIRST_NAME.add("瑶瑾"); - CN_FIRST_NAME.add("幻巧"); - CN_FIRST_NAME.add("彦慧"); - CN_FIRST_NAME.add("晶晶"); - CN_FIRST_NAME.add("雅洁"); - CN_FIRST_NAME.add("水瑶"); - CN_FIRST_NAME.add("温韦"); - CN_FIRST_NAME.add("光霁"); - CN_FIRST_NAME.add("青寒"); - CN_FIRST_NAME.add("静竹"); - CN_FIRST_NAME.add("妍雅"); - CN_FIRST_NAME.add("采枫"); - CN_FIRST_NAME.add("虹星"); - CN_FIRST_NAME.add("智明"); - CN_FIRST_NAME.add("从菡"); - CN_FIRST_NAME.add("子怡"); - CN_FIRST_NAME.add("飞语"); - CN_FIRST_NAME.add("甜恬"); - CN_FIRST_NAME.add("千秋"); - CN_FIRST_NAME.add("海超"); - CN_FIRST_NAME.add("平绿"); - CN_FIRST_NAME.add("之双"); - CN_FIRST_NAME.add("楚洁"); - CN_FIRST_NAME.add("婷婷"); - CN_FIRST_NAME.add("昆琦"); - CN_FIRST_NAME.add("浩漫"); - CN_FIRST_NAME.add("涵易"); - CN_FIRST_NAME.add("丝祺"); - CN_FIRST_NAME.add("敬曦"); - CN_FIRST_NAME.add("盼晴"); - CN_FIRST_NAME.add("诗翠"); - CN_FIRST_NAME.add("星然"); - CN_FIRST_NAME.add("慧捷"); - CN_FIRST_NAME.add("晴曦"); - CN_FIRST_NAME.add("英叡"); - CN_FIRST_NAME.add("又槐"); - CN_FIRST_NAME.add("长钰"); - CN_FIRST_NAME.add("涵映"); - CN_FIRST_NAME.add("星光"); - CN_FIRST_NAME.add("凝蕊"); - CN_FIRST_NAME.add("铭晨"); - CN_FIRST_NAME.add("玉兰"); - CN_FIRST_NAME.add("令慧"); - CN_FIRST_NAME.add("星儿"); - CN_FIRST_NAME.add("笑柳"); - CN_FIRST_NAME.add("安祯"); - CN_FIRST_NAME.add("康盛"); - CN_FIRST_NAME.add("正清"); - CN_FIRST_NAME.add("智晖"); - CN_FIRST_NAME.add("英发"); - CN_FIRST_NAME.add("梓敏"); - CN_FIRST_NAME.add("含巧"); - CN_FIRST_NAME.add("诗怀"); - CN_FIRST_NAME.add("正业"); - CN_FIRST_NAME.add("元基"); - CN_FIRST_NAME.add("采柳"); - CN_FIRST_NAME.add("凌蝶"); - CN_FIRST_NAME.add("韵梅"); - CN_FIRST_NAME.add("祺祥"); - CN_FIRST_NAME.add("夜蓉"); - CN_FIRST_NAME.add("喜儿"); - CN_FIRST_NAME.add("安福"); - CN_FIRST_NAME.add("佩兰"); - CN_FIRST_NAME.add("自珍"); - CN_FIRST_NAME.add("宏壮"); - CN_FIRST_NAME.add("惠君"); - CN_FIRST_NAME.add("红香"); - CN_FIRST_NAME.add("小楠"); - CN_FIRST_NAME.add("鸿文"); - CN_FIRST_NAME.add("康震"); - CN_FIRST_NAME.add("燕晨"); - CN_FIRST_NAME.add("静安"); - CN_FIRST_NAME.add("泰鸿"); - CN_FIRST_NAME.add("耘豪"); - CN_FIRST_NAME.add("木兰"); - CN_FIRST_NAME.add("寒烟"); - CN_FIRST_NAME.add("松月"); - CN_FIRST_NAME.add("曼雁"); - CN_FIRST_NAME.add("欣嘉"); - CN_FIRST_NAME.add("蔚然"); - CN_FIRST_NAME.add("安妮"); - CN_FIRST_NAME.add("维运"); - CN_FIRST_NAME.add("祺福"); - CN_FIRST_NAME.add("平彤"); - CN_FIRST_NAME.add("子悦"); - CN_FIRST_NAME.add("骊颖"); - CN_FIRST_NAME.add("迎蕾"); - CN_FIRST_NAME.add("凯捷"); - CN_FIRST_NAME.add("雁丝"); - CN_FIRST_NAME.add("友槐"); - CN_FIRST_NAME.add("问枫"); - CN_FIRST_NAME.add("紫杉"); - CN_FIRST_NAME.add("宏大"); - CN_FIRST_NAME.add("乐珍"); - CN_FIRST_NAME.add("乐双"); - CN_FIRST_NAME.add("绍钧"); - CN_FIRST_NAME.add("飞沉"); - CN_FIRST_NAME.add("奇志"); - CN_FIRST_NAME.add("思语"); - CN_FIRST_NAME.add("岚风"); - CN_FIRST_NAME.add("映冬"); - CN_FIRST_NAME.add("霞英"); - CN_FIRST_NAME.add("高轩"); - CN_FIRST_NAME.add("善和"); - CN_FIRST_NAME.add("琇芳"); - CN_FIRST_NAME.add("凝旋"); - CN_FIRST_NAME.add("半香"); - CN_FIRST_NAME.add("念烟"); - CN_FIRST_NAME.add("如风"); - CN_FIRST_NAME.add("凌柏"); - CN_FIRST_NAME.add("琇芬"); - CN_FIRST_NAME.add("泰平"); - CN_FIRST_NAME.add("俊明"); - CN_FIRST_NAME.add("暄文"); - CN_FIRST_NAME.add("瑾瑜"); - CN_FIRST_NAME.add("丝娜"); - CN_FIRST_NAME.add("铃语"); - CN_FIRST_NAME.add("子惠"); - CN_FIRST_NAME.add("明珠"); - CN_FIRST_NAME.add("抒怀"); - CN_FIRST_NAME.add("弘毅"); - CN_FIRST_NAME.add("采梦"); - CN_FIRST_NAME.add("从蓉"); - CN_FIRST_NAME.add("景行"); - CN_FIRST_NAME.add("慕晴"); - CN_FIRST_NAME.add("瑾瑶"); - CN_FIRST_NAME.add("安娜"); - CN_FIRST_NAME.add("海之"); - CN_FIRST_NAME.add("悦宜"); - CN_FIRST_NAME.add("平心"); - CN_FIRST_NAME.add("奇思"); - CN_FIRST_NAME.add("绮烟"); - CN_FIRST_NAME.add("秀兰"); - CN_FIRST_NAME.add("安娴"); - CN_FIRST_NAME.add("书兰"); - CN_FIRST_NAME.add("洛妃"); - CN_FIRST_NAME.add("俊晖"); - CN_FIRST_NAME.add("昆锐"); - CN_FIRST_NAME.add("翰采"); - CN_FIRST_NAME.add("云水"); - CN_FIRST_NAME.add("吟怀"); - CN_FIRST_NAME.add("碧玉"); - CN_FIRST_NAME.add("琼岚"); - CN_FIRST_NAME.add("俊晤"); - CN_FIRST_NAME.add("新美"); - CN_FIRST_NAME.add("夏月"); - CN_FIRST_NAME.add("问柳"); - CN_FIRST_NAME.add("曼青"); - CN_FIRST_NAME.add("丹雪"); - CN_FIRST_NAME.add("情韵"); - CN_FIRST_NAME.add("浩瀚"); - CN_FIRST_NAME.add("华奥"); - CN_FIRST_NAME.add("蝶梦"); - CN_FIRST_NAME.add("天菱"); - CN_FIRST_NAME.add("鸿晖"); - CN_FIRST_NAME.add("璇玑"); - CN_FIRST_NAME.add("皓君"); - CN_FIRST_NAME.add("春兰"); - CN_FIRST_NAME.add("忆雪"); - CN_FIRST_NAME.add("齐敏"); - CN_FIRST_NAME.add("灿灿"); - CN_FIRST_NAME.add("娅楠"); - CN_FIRST_NAME.add("芷容"); - CN_FIRST_NAME.add("高澹"); - CN_FIRST_NAME.add("真茹"); - CN_FIRST_NAME.add("高达"); - CN_FIRST_NAME.add("阳德"); - CN_FIRST_NAME.add("梦菡"); - CN_FIRST_NAME.add("淳美"); - CN_FIRST_NAME.add("阳羽"); - CN_FIRST_NAME.add("俊智"); - CN_FIRST_NAME.add("星爵"); - CN_FIRST_NAME.add("彦芝"); - CN_FIRST_NAME.add("金枝"); - CN_FIRST_NAME.add("梦菲"); - CN_FIRST_NAME.add("灵凡"); - CN_FIRST_NAME.add("海亦"); - CN_FIRST_NAME.add("白雪"); - CN_FIRST_NAME.add("恨荷"); - CN_FIRST_NAME.add("秋灵"); - CN_FIRST_NAME.add("雅丹"); - CN_FIRST_NAME.add("雅丽"); - CN_FIRST_NAME.add("姝丽"); - CN_FIRST_NAME.add("可昕"); - CN_FIRST_NAME.add("高远"); - CN_FIRST_NAME.add("寄南"); - CN_FIRST_NAME.add("茂勋"); - CN_FIRST_NAME.add("忆霜"); - CN_FIRST_NAME.add("代芙"); - CN_FIRST_NAME.add("星剑"); - CN_FIRST_NAME.add("丽雅"); - CN_FIRST_NAME.add("振海"); - CN_FIRST_NAME.add("春冬"); - CN_FIRST_NAME.add("英锐"); - CN_FIRST_NAME.add("英哲"); - CN_FIRST_NAME.add("浩邈"); - CN_FIRST_NAME.add("乐和"); - CN_FIRST_NAME.add("婉慧"); - CN_FIRST_NAME.add("乐咏"); - CN_FIRST_NAME.add("璇珠"); - CN_FIRST_NAME.add("尔槐"); - CN_FIRST_NAME.add("逸"); - CN_FIRST_NAME.add("智杰"); - CN_FIRST_NAME.add("代芹"); - CN_FIRST_NAME.add("志用"); - CN_FIRST_NAME.add("书凝"); - CN_FIRST_NAME.add("建修"); - CN_FIRST_NAME.add("寒凝"); - CN_FIRST_NAME.add("问梅"); - CN_FIRST_NAME.add("永长"); - CN_FIRST_NAME.add("新翰"); - CN_FIRST_NAME.add("绮兰"); - CN_FIRST_NAME.add("微婉"); - CN_FIRST_NAME.add("痴柏"); - CN_FIRST_NAME.add("昕珏"); - CN_FIRST_NAME.add("翠琴"); - CN_FIRST_NAME.add("春燕"); - CN_FIRST_NAME.add("梓暄"); - CN_FIRST_NAME.add("南风"); - CN_FIRST_NAME.add("香雪"); - CN_FIRST_NAME.add("逸馨"); - CN_FIRST_NAME.add("巧兰"); - CN_FIRST_NAME.add("碧琴"); - CN_FIRST_NAME.add("碧琳"); - CN_FIRST_NAME.add("筠心"); - CN_FIRST_NAME.add("若雁"); - CN_FIRST_NAME.add("如馨"); - CN_FIRST_NAME.add("明钰"); - CN_FIRST_NAME.add("芃芃"); - CN_FIRST_NAME.add("项禹"); - CN_FIRST_NAME.add("高逸"); - CN_FIRST_NAME.add("和玉"); - CN_FIRST_NAME.add("澎湃"); - CN_FIRST_NAME.add("盼柳"); - CN_FIRST_NAME.add("经略"); - CN_FIRST_NAME.add("从蕾"); - CN_FIRST_NAME.add("曼音"); - CN_FIRST_NAME.add("楚云"); - CN_FIRST_NAME.add("雅云"); - CN_FIRST_NAME.add("奇胜"); - CN_FIRST_NAME.add("夜春"); - CN_FIRST_NAME.add("海伦"); - CN_FIRST_NAME.add("云泽"); - CN_FIRST_NAME.add("思洁"); - CN_FIRST_NAME.add("紫桐"); - CN_FIRST_NAME.add("骏奇"); - CN_FIRST_NAME.add("悠素"); - CN_FIRST_NAME.add("耘涛"); - CN_FIRST_NAME.add("忻然"); - CN_FIRST_NAME.add("沛槐"); - CN_FIRST_NAME.add("逸秀"); - CN_FIRST_NAME.add("琇莹"); - CN_FIRST_NAME.add("颐真"); - CN_FIRST_NAME.add("运晟"); - CN_FIRST_NAME.add("意远"); - CN_FIRST_NAME.add("越泽"); - CN_FIRST_NAME.add("高邈"); - CN_FIRST_NAME.add("文敏"); - CN_FIRST_NAME.add("骏祥"); - CN_FIRST_NAME.add("英喆"); - CN_FIRST_NAME.add("朵儿"); - CN_FIRST_NAME.add("明哲"); - CN_FIRST_NAME.add("香露"); - CN_FIRST_NAME.add("鸿朗"); - CN_FIRST_NAME.add("梅梅"); - CN_FIRST_NAME.add("康顺"); - CN_FIRST_NAME.add("姣丽"); - CN_FIRST_NAME.add("华婉"); - CN_FIRST_NAME.add("飞跃"); - CN_FIRST_NAME.add("运虹"); - CN_FIRST_NAME.add("骊娜"); - CN_FIRST_NAME.add("骊娟"); - CN_FIRST_NAME.add("乐生"); - CN_FIRST_NAME.add("平惠"); - CN_FIRST_NAME.add("子舒"); - CN_FIRST_NAME.add("天蓉"); - CN_FIRST_NAME.add("俊材"); - CN_FIRST_NAME.add("璎玑"); - CN_FIRST_NAME.add("幻翠"); - CN_FIRST_NAME.add("湘君"); - CN_FIRST_NAME.add("夏柳"); - CN_FIRST_NAME.add("笑槐"); - CN_FIRST_NAME.add("巧凡"); - CN_FIRST_NAME.add("涵柳"); - CN_FIRST_NAME.add("正信"); - CN_FIRST_NAME.add("兴发"); - CN_FIRST_NAME.add("永嘉"); - CN_FIRST_NAME.add("德馨"); - CN_FIRST_NAME.add("天蓝"); - CN_FIRST_NAME.add("浩然"); - CN_FIRST_NAME.add("叶春"); - CN_FIRST_NAME.add("文斌"); - CN_FIRST_NAME.add("嫔然"); - CN_FIRST_NAME.add("玉华"); - CN_FIRST_NAME.add("俊杰"); - CN_FIRST_NAME.add("初彤"); - CN_FIRST_NAME.add("依波"); - CN_FIRST_NAME.add("贞婉"); - CN_FIRST_NAME.add("寄琴"); - CN_FIRST_NAME.add("安筠"); - CN_FIRST_NAME.add("迎曼"); - CN_FIRST_NAME.add("斌蔚"); - CN_FIRST_NAME.add("星华"); - CN_FIRST_NAME.add("仪芳"); - CN_FIRST_NAME.add("语彤"); - CN_FIRST_NAME.add("飞丹"); - CN_FIRST_NAME.add("和同"); - CN_FIRST_NAME.add("昂雄"); - CN_FIRST_NAME.add("骊婧"); - CN_FIRST_NAME.add("安宁"); - CN_FIRST_NAME.add("山彤"); - CN_FIRST_NAME.add("痴梅"); - CN_FIRST_NAME.add("端丽"); - CN_FIRST_NAME.add("涵桃"); - CN_FIRST_NAME.add("艳蕊"); - CN_FIRST_NAME.add("起运"); - CN_FIRST_NAME.add("冉冉"); - CN_FIRST_NAME.add("安安"); - CN_FIRST_NAME.add("幼怡"); - CN_FIRST_NAME.add("莉莉"); - CN_FIRST_NAME.add("凝蝶"); - CN_FIRST_NAME.add("昊嘉"); - CN_FIRST_NAME.add("明喆"); - CN_FIRST_NAME.add("思涵"); - CN_FIRST_NAME.add("涵衍"); - CN_FIRST_NAME.add("安宜"); - CN_FIRST_NAME.add("寄瑶"); - CN_FIRST_NAME.add("赫然"); - CN_FIRST_NAME.add("康复"); - CN_FIRST_NAME.add("弘济"); - CN_FIRST_NAME.add("骊婷"); - CN_FIRST_NAME.add("燕桦"); - CN_FIRST_NAME.add("昆皓"); - CN_FIRST_NAME.add("宇寰"); - CN_FIRST_NAME.add("骊媛"); - CN_FIRST_NAME.add("靖巧"); - CN_FIRST_NAME.add("玉环"); - CN_FIRST_NAME.add("佩玉"); - CN_FIRST_NAME.add("芊芊"); - CN_FIRST_NAME.add("醉冬"); - CN_FIRST_NAME.add("颀秀"); - CN_FIRST_NAME.add("宛妙"); - CN_FIRST_NAME.add("艳蕙"); - CN_FIRST_NAME.add("文昂"); - CN_FIRST_NAME.add("玉珂"); - CN_FIRST_NAME.add("冰洁"); - CN_FIRST_NAME.add("安容"); - CN_FIRST_NAME.add("安寒"); - CN_FIRST_NAME.add("子芸"); - CN_FIRST_NAME.add("语心"); - CN_FIRST_NAME.add("以莲"); - CN_FIRST_NAME.add("文昌"); - CN_FIRST_NAME.add("梦蕊"); - CN_FIRST_NAME.add("初翠"); - CN_FIRST_NAME.add("仲舒"); - CN_FIRST_NAME.add("长霞"); - CN_FIRST_NAME.add("妙音"); - CN_FIRST_NAME.add("昆雄"); - CN_FIRST_NAME.add("思淼"); - CN_FIRST_NAME.add("文星"); - CN_FIRST_NAME.add("天薇"); - CN_FIRST_NAME.add("半安"); - CN_FIRST_NAME.add("向荣"); - CN_FIRST_NAME.add("灵卉"); - CN_FIRST_NAME.add("云淡"); - CN_FIRST_NAME.add("司晨"); - CN_FIRST_NAME.add("涵梅"); - CN_FIRST_NAME.add("秀华"); - CN_FIRST_NAME.add("惜雪"); - CN_FIRST_NAME.add("谷雪"); - CN_FIRST_NAME.add("建元"); - CN_FIRST_NAME.add("千山"); - CN_FIRST_NAME.add("清绮"); - CN_FIRST_NAME.add("奇致"); - CN_FIRST_NAME.add("澄邈"); - CN_FIRST_NAME.add("雅达"); - CN_FIRST_NAME.add("柔绚"); - CN_FIRST_NAME.add("斌斌"); - CN_FIRST_NAME.add("舒兰"); - CN_FIRST_NAME.add("佩珍"); - CN_FIRST_NAME.add("高兴"); - CN_FIRST_NAME.add("和璧"); - CN_FIRST_NAME.add("雅辰"); - CN_FIRST_NAME.add("宛秋"); - CN_FIRST_NAME.add("元驹"); - CN_FIRST_NAME.add("莎莉"); - CN_FIRST_NAME.add("妍妍"); - CN_FIRST_NAME.add("梓柔"); - CN_FIRST_NAME.add("海逸"); - CN_FIRST_NAME.add("嫚儿"); - CN_FIRST_NAME.add("银柳"); - CN_FIRST_NAME.add("运杰"); - CN_FIRST_NAME.add("娅欣"); - CN_FIRST_NAME.add("凯旋"); - CN_FIRST_NAME.add("晨欣"); - CN_FIRST_NAME.add("书南"); - CN_FIRST_NAME.add("访文"); - CN_FIRST_NAME.add("文景"); - CN_FIRST_NAME.add("春华"); - CN_FIRST_NAME.add("暮芸"); - CN_FIRST_NAME.add("思义"); - CN_FIRST_NAME.add("玉琲"); - CN_FIRST_NAME.add("冰海"); - CN_FIRST_NAME.add("莎莎"); - CN_FIRST_NAME.add("睿好"); - CN_FIRST_NAME.add("弘深"); - CN_FIRST_NAME.add("勇毅"); - CN_FIRST_NAME.add("宵雨"); - CN_FIRST_NAME.add("浩初"); - CN_FIRST_NAME.add("慕梅"); - CN_FIRST_NAME.add("驰鸿"); - CN_FIRST_NAME.add("文虹"); - CN_FIRST_NAME.add("彩萱"); - CN_FIRST_NAME.add("梦旋"); - CN_FIRST_NAME.add("慧晨"); - CN_FIRST_NAME.add("恨蕊"); - CN_FIRST_NAME.add("灵珊"); - CN_FIRST_NAME.add("寻云"); - CN_FIRST_NAME.add("怜云"); - CN_FIRST_NAME.add("白风"); - CN_FIRST_NAME.add("慧智"); - CN_FIRST_NAME.add("经国"); - CN_FIRST_NAME.add("琴心"); - CN_FIRST_NAME.add("雅逸"); - CN_FIRST_NAME.add("布侬"); - CN_FIRST_NAME.add("小谷"); - CN_FIRST_NAME.add("弘业"); - CN_FIRST_NAME.add("素欣"); - CN_FIRST_NAME.add("斐斐"); - CN_FIRST_NAME.add("源源"); - CN_FIRST_NAME.add("志国"); - CN_FIRST_NAME.add("嘉月"); - CN_FIRST_NAME.add("宏富"); - CN_FIRST_NAME.add("玉瑾"); - CN_FIRST_NAME.add("思源"); - CN_FIRST_NAME.add("思云"); - CN_FIRST_NAME.add("梦易"); - CN_FIRST_NAME.add("兴生"); - CN_FIRST_NAME.add("思溪"); - CN_FIRST_NAME.add("华容"); - CN_FIRST_NAME.add("奥维"); - CN_FIRST_NAME.add("燕楠"); - CN_FIRST_NAME.add("晓丝"); - CN_FIRST_NAME.add("绮南"); - CN_FIRST_NAME.add("妙颜"); - CN_FIRST_NAME.add("依丝"); - CN_FIRST_NAME.add("阳舒"); - CN_FIRST_NAME.add("弘丽"); - CN_FIRST_NAME.add("阳成"); - CN_FIRST_NAME.add("书双"); - CN_FIRST_NAME.add("云溪"); - CN_FIRST_NAME.add("媛女"); - CN_FIRST_NAME.add("和畅"); - CN_FIRST_NAME.add("云亭"); - CN_FIRST_NAME.add("嘉木"); - CN_FIRST_NAME.add("文曜"); - CN_FIRST_NAME.add("弘义"); - CN_FIRST_NAME.add("心香"); - CN_FIRST_NAME.add("星瑶"); - CN_FIRST_NAME.add("霞文"); - CN_FIRST_NAME.add("白夏"); - CN_FIRST_NAME.add("曼妮"); - CN_FIRST_NAME.add("琳怡"); - CN_FIRST_NAME.add("翠阳"); - CN_FIRST_NAME.add("昌盛"); - CN_FIRST_NAME.add("觅荷"); - CN_FIRST_NAME.add("怡乐"); - CN_FIRST_NAME.add("代蓝"); - CN_FIRST_NAME.add("雅健"); - CN_FIRST_NAME.add("清心"); - CN_FIRST_NAME.add("绮玉"); - CN_FIRST_NAME.add("元魁"); - CN_FIRST_NAME.add("平良"); - CN_FIRST_NAME.add("夜柳"); - CN_FIRST_NAME.add("绿兰"); - CN_FIRST_NAME.add("善静"); - CN_FIRST_NAME.add("歌吹"); - CN_FIRST_NAME.add("天晴"); - CN_FIRST_NAME.add("凝梦"); - CN_FIRST_NAME.add("迎梅"); - CN_FIRST_NAME.add("茹云"); - CN_FIRST_NAME.add("彤蕊"); - CN_FIRST_NAME.add("吉敏"); - CN_FIRST_NAME.add("良朋"); - CN_FIRST_NAME.add("靓影"); - CN_FIRST_NAME.add("津童"); - CN_FIRST_NAME.add("睿姿"); - CN_FIRST_NAME.add("冬亦"); - CN_FIRST_NAME.add("胤雅"); - CN_FIRST_NAME.add("念珍"); - CN_FIRST_NAME.add("宾白"); - CN_FIRST_NAME.add("高爽"); - CN_FIRST_NAME.add("书君"); - CN_FIRST_NAME.add("念双"); - CN_FIRST_NAME.add("如容"); - CN_FIRST_NAME.add("书琴"); - CN_FIRST_NAME.add("凡桃"); - CN_FIRST_NAME.add("慧月"); - CN_FIRST_NAME.add("梦晨"); - CN_FIRST_NAME.add("韵诗"); - CN_FIRST_NAME.add("冰之"); - CN_FIRST_NAME.add("子菡"); - CN_FIRST_NAME.add("依云"); - CN_FIRST_NAME.add("弘亮"); - CN_FIRST_NAME.add("瀚彭"); - CN_FIRST_NAME.add("柔怀"); - CN_FIRST_NAME.add("香天"); - CN_FIRST_NAME.add("春琳"); - CN_FIRST_NAME.add("璞玉"); - CN_FIRST_NAME.add("海儿"); - CN_FIRST_NAME.add("芮美"); - CN_FIRST_NAME.add("清怡"); - CN_FIRST_NAME.add("绿凝"); - CN_FIRST_NAME.add("承教"); - CN_FIRST_NAME.add("嫣然"); - CN_FIRST_NAME.add("碧白"); - CN_FIRST_NAME.add("丹秋"); - CN_FIRST_NAME.add("德宇"); - CN_FIRST_NAME.add("英睿"); - CN_FIRST_NAME.add("曼婉"); - CN_FIRST_NAME.add("敏丽"); - CN_FIRST_NAME.add("忆秋"); - CN_FIRST_NAME.add("暖暖"); - CN_FIRST_NAME.add("良材"); - CN_FIRST_NAME.add("颖颖"); - CN_FIRST_NAME.add("乐圣"); - CN_FIRST_NAME.add("俊楚"); - CN_FIRST_NAME.add("俊楠"); - CN_FIRST_NAME.add("元容"); - CN_FIRST_NAME.add("雁兰"); - CN_FIRST_NAME.add("白秋"); - CN_FIRST_NAME.add("夜梅"); - CN_FIRST_NAME.add("德容"); - CN_FIRST_NAME.add("子萱"); - CN_FIRST_NAME.add("秋华"); - CN_FIRST_NAME.add("蓝尹"); - CN_FIRST_NAME.add("醉卉"); - CN_FIRST_NAME.add("攸然"); - CN_FIRST_NAME.add("天曼"); - CN_FIRST_NAME.add("锐藻"); - CN_FIRST_NAME.add("辰沛"); - CN_FIRST_NAME.add("文林"); - CN_FIRST_NAME.add("思佳"); - CN_FIRST_NAME.add("夜梦"); - CN_FIRST_NAME.add("泽恩"); - CN_FIRST_NAME.add("雨泽"); - CN_FIRST_NAME.add("望雅"); - CN_FIRST_NAME.add("绮琴"); - CN_FIRST_NAME.add("成化"); - CN_FIRST_NAME.add("访曼"); - CN_FIRST_NAME.add("弘伟"); - CN_FIRST_NAME.add("以蕊"); - CN_FIRST_NAME.add("莘莘"); - CN_FIRST_NAME.add("秋玉"); - CN_FIRST_NAME.add("水风"); - CN_FIRST_NAME.add("正初"); - CN_FIRST_NAME.add("海冬"); - CN_FIRST_NAME.add("浩博"); - CN_FIRST_NAME.add("梓楠"); - CN_FIRST_NAME.add("嘉树"); - CN_FIRST_NAME.add("德寿"); - CN_FIRST_NAME.add("文柏"); - CN_FIRST_NAME.add("同方"); - CN_FIRST_NAME.add("新苗"); - CN_FIRST_NAME.add("修敏"); - CN_FIRST_NAME.add("翠霜"); - CN_FIRST_NAME.add("月天"); - CN_FIRST_NAME.add("念瑶"); - CN_FIRST_NAME.add("熙熙"); - CN_FIRST_NAME.add("宛筠"); - CN_FIRST_NAME.add("梦月"); - CN_FIRST_NAME.add("英韶"); - CN_FIRST_NAME.add("香馨"); - CN_FIRST_NAME.add("吉星"); - CN_FIRST_NAME.add("桂华"); - CN_FIRST_NAME.add("琇晶"); - CN_FIRST_NAME.add("博学"); - CN_FIRST_NAME.add("海凡"); - CN_FIRST_NAME.add("静美"); - CN_FIRST_NAME.add("宏峻"); - CN_FIRST_NAME.add("丽姝"); - CN_FIRST_NAME.add("岚岚"); - CN_FIRST_NAME.add("清悦"); - CN_FIRST_NAME.add("天材"); - CN_FIRST_NAME.add("昆颉"); - CN_FIRST_NAME.add("秋珊"); - CN_FIRST_NAME.add("爰美"); - CN_FIRST_NAME.add("雁凡"); - CN_FIRST_NAME.add("思远"); - CN_FIRST_NAME.add("修文"); - CN_FIRST_NAME.add("梓榆"); - CN_FIRST_NAME.add("易真"); - CN_FIRST_NAME.add("思迪"); - CN_FIRST_NAME.add("朝雨"); - CN_FIRST_NAME.add("高卓"); - CN_FIRST_NAME.add("文栋"); - CN_FIRST_NAME.add("琼怡"); - CN_FIRST_NAME.add("丽姿"); - CN_FIRST_NAME.add("博简"); - CN_FIRST_NAME.add("彦昌"); - CN_FIRST_NAME.add("秋双"); - CN_FIRST_NAME.add("琼思"); - CN_FIRST_NAME.add("璞瑜"); - CN_FIRST_NAME.add("锐智"); - CN_FIRST_NAME.add("冷之"); - CN_FIRST_NAME.add("昕雨"); - CN_FIRST_NAME.add("柔惠"); - CN_FIRST_NAME.add("昭君"); - CN_FIRST_NAME.add("阳荣"); - CN_FIRST_NAME.add("怀玉"); - CN_FIRST_NAME.add("昊硕"); - CN_FIRST_NAME.add("泽惠"); - CN_FIRST_NAME.add("博实"); - CN_FIRST_NAME.add("以旋"); - CN_FIRST_NAME.add("煜祺"); - CN_FIRST_NAME.add("驰翰"); - CN_FIRST_NAME.add("博容"); - CN_FIRST_NAME.add("翔飞"); - CN_FIRST_NAME.add("明知"); - CN_FIRST_NAME.add("向薇"); - CN_FIRST_NAME.add("向文"); - CN_FIRST_NAME.add("建华"); - CN_FIRST_NAME.add("傲丝"); - CN_FIRST_NAME.add("康宁"); - CN_FIRST_NAME.add("力勤"); - CN_FIRST_NAME.add("芮悦"); - CN_FIRST_NAME.add("乐音"); - CN_FIRST_NAME.add("平莹"); - CN_FIRST_NAME.add("雅凡"); - CN_FIRST_NAME.add("成双"); - CN_FIRST_NAME.add("璠瑜"); - CN_FIRST_NAME.add("和雅"); - CN_FIRST_NAME.add("萌阳"); - CN_FIRST_NAME.add("霞月"); - CN_FIRST_NAME.add("依辰"); - CN_FIRST_NAME.add("康安"); - CN_FIRST_NAME.add("彭薄"); - CN_FIRST_NAME.add("新荣"); - CN_FIRST_NAME.add("惜天"); - CN_FIRST_NAME.add("颖馨"); - CN_FIRST_NAME.add("玟玉"); - CN_FIRST_NAME.add("含芙"); - CN_FIRST_NAME.add("冷亦"); - CN_FIRST_NAME.add("玲然"); - CN_FIRST_NAME.add("妞妞"); - CN_FIRST_NAME.add("云逸"); - CN_FIRST_NAME.add("玄雅"); - CN_FIRST_NAME.add("寄真"); - CN_FIRST_NAME.add("娇洁"); - CN_FIRST_NAME.add("悦心"); - CN_FIRST_NAME.add("昕靓"); - CN_FIRST_NAME.add("骞骞"); - CN_FIRST_NAME.add("飞烟"); - CN_FIRST_NAME.add("傲之"); - CN_FIRST_NAME.add("仪文"); - CN_FIRST_NAME.add("又亦"); - CN_FIRST_NAME.add("高原"); - CN_FIRST_NAME.add("旭尧"); - CN_FIRST_NAME.add("陶宁"); - CN_FIRST_NAME.add("杏儿"); - CN_FIRST_NAME.add("星阑"); - CN_FIRST_NAME.add("湛雨"); - CN_FIRST_NAME.add("芝英"); - CN_FIRST_NAME.add("妙婧"); - CN_FIRST_NAME.add("采波"); - CN_FIRST_NAME.add("修明"); - CN_FIRST_NAME.add("浦和"); - CN_FIRST_NAME.add("素洁"); - CN_FIRST_NAME.add("陶宜"); - CN_FIRST_NAME.add("俊誉"); - CN_FIRST_NAME.add("峻熙"); - CN_FIRST_NAME.add("颖秀"); - CN_FIRST_NAME.add("婷美"); - CN_FIRST_NAME.add("韵流"); - CN_FIRST_NAME.add("安平"); - CN_FIRST_NAME.add("曼安"); - CN_FIRST_NAME.add("恨蝶"); - CN_FIRST_NAME.add("子蕙"); - CN_FIRST_NAME.add("兴国"); - CN_FIRST_NAME.add("听芹"); - CN_FIRST_NAME.add("昊磊"); - CN_FIRST_NAME.add("旻骞"); - CN_FIRST_NAME.add("白竹"); - CN_FIRST_NAME.add("吉月"); - CN_FIRST_NAME.add("傲云"); - CN_FIRST_NAME.add("平萱"); - CN_FIRST_NAME.add("小之"); - CN_FIRST_NAME.add("向明"); - CN_FIRST_NAME.add("英飙"); - CN_FIRST_NAME.add("珍丽"); - CN_FIRST_NAME.add("雅爱"); - CN_FIRST_NAME.add("映阳"); - CN_FIRST_NAME.add("静恬"); - CN_FIRST_NAME.add("令暎"); - CN_FIRST_NAME.add("以晴"); - CN_FIRST_NAME.add("湛霞"); - CN_FIRST_NAME.add("伟彦"); - CN_FIRST_NAME.add("曼容"); - CN_FIRST_NAME.add("惜香"); - CN_FIRST_NAME.add("心宜"); - CN_FIRST_NAME.add("布凡"); - CN_FIRST_NAME.add("悦怡"); - CN_FIRST_NAME.add("其雨"); - CN_FIRST_NAME.add("飞光"); - CN_FIRST_NAME.add("子薇"); - CN_FIRST_NAME.add("亦丝"); - CN_FIRST_NAME.add("晨涛"); - CN_FIRST_NAME.add("飞兰"); - CN_FIRST_NAME.add("诗蕊"); - CN_FIRST_NAME.add("绍祺"); - CN_FIRST_NAME.add("欣笑"); - CN_FIRST_NAME.add("敏达"); - CN_FIRST_NAME.add("冬灵"); - CN_FIRST_NAME.add("山芙"); - CN_FIRST_NAME.add("安康"); - CN_FIRST_NAME.add("典雅"); - CN_FIRST_NAME.add("和静"); - CN_FIRST_NAME.add("歌阑"); - CN_FIRST_NAME.add("萍雅"); - CN_FIRST_NAME.add("若骞"); - CN_FIRST_NAME.add("怜烟"); - CN_FIRST_NAME.add("灵阳"); - CN_FIRST_NAME.add("梦桃"); - CN_FIRST_NAME.add("风华"); - CN_FIRST_NAME.add("萧玉"); - CN_FIRST_NAME.add("昊天"); - CN_FIRST_NAME.add("湛静"); - CN_FIRST_NAME.add("成周"); - CN_FIRST_NAME.add("建同"); - CN_FIRST_NAME.add("曼寒"); - CN_FIRST_NAME.add("永福"); - CN_FIRST_NAME.add("玄静"); - CN_FIRST_NAME.add("谷秋"); - CN_FIRST_NAME.add("梦桐"); - CN_FIRST_NAME.add("流如"); - CN_FIRST_NAME.add("思烟"); - CN_FIRST_NAME.add("骞魁"); - CN_FIRST_NAME.add("幼荷"); - CN_FIRST_NAME.add("承望"); - CN_FIRST_NAME.add("成和"); - CN_FIRST_NAME.add("小溪"); - CN_FIRST_NAME.add("正卿"); - CN_FIRST_NAME.add("语芹"); - CN_FIRST_NAME.add("向晨"); - CN_FIRST_NAME.add("诗文"); - CN_FIRST_NAME.add("优悠"); - CN_FIRST_NAME.add("尔丝"); - CN_FIRST_NAME.add("梧桐"); - CN_FIRST_NAME.add("优悦"); - CN_FIRST_NAME.add("忆安"); - CN_FIRST_NAME.add("白筠"); - CN_FIRST_NAME.add("晓灵"); - CN_FIRST_NAME.add("倩美"); - CN_FIRST_NAME.add("伟志"); - CN_FIRST_NAME.add("长娟"); - CN_FIRST_NAME.add("英奕"); - CN_FIRST_NAME.add("诗蕾"); - CN_FIRST_NAME.add("清懿"); - CN_FIRST_NAME.add("刚捷"); - CN_FIRST_NAME.add("悦恺"); - CN_FIRST_NAME.add("凌波"); - CN_FIRST_NAME.add("清舒"); - CN_FIRST_NAME.add("亦云"); - CN_FIRST_NAME.add("白安"); - CN_FIRST_NAME.add("星雨"); - CN_FIRST_NAME.add("飞燕"); - CN_FIRST_NAME.add("林楠"); - CN_FIRST_NAME.add("忻畅"); - CN_FIRST_NAME.add("圣杰"); - CN_FIRST_NAME.add("彦杉"); - CN_FIRST_NAME.add("振凯"); - CN_FIRST_NAME.add("映雁"); - CN_FIRST_NAME.add("丹寒"); - CN_FIRST_NAME.add("钰"); - CN_FIRST_NAME.add("子明"); - CN_FIRST_NAME.add("子昂"); - CN_FIRST_NAME.add("家馨"); - CN_FIRST_NAME.add("雁卉"); - CN_FIRST_NAME.add("平蓝"); - CN_FIRST_NAME.add("听荷"); - CN_FIRST_NAME.add("映雪"); - CN_FIRST_NAME.add("晏然"); - CN_FIRST_NAME.add("乐天"); - CN_FIRST_NAME.add("白容"); - CN_FIRST_NAME.add("访梦"); - CN_FIRST_NAME.add("景浩"); - CN_FIRST_NAME.add("恨桃"); - CN_FIRST_NAME.add("熙华"); - CN_FIRST_NAME.add("暖梦"); - CN_FIRST_NAME.add("书白"); - CN_FIRST_NAME.add("箫笛"); - CN_FIRST_NAME.add("晴波"); - CN_FIRST_NAME.add("馨香"); - CN_FIRST_NAME.add("和韵"); - CN_FIRST_NAME.add("含莲"); - CN_FIRST_NAME.add("琳芳"); - CN_FIRST_NAME.add("安彤"); - CN_FIRST_NAME.add("子晋"); - CN_FIRST_NAME.add("秀隽"); - CN_FIRST_NAME.add("桐华"); - CN_FIRST_NAME.add("映真"); - CN_FIRST_NAME.add("尔云"); - CN_FIRST_NAME.add("梓欣"); - CN_FIRST_NAME.add("幼菱"); - CN_FIRST_NAME.add("英秀"); - CN_FIRST_NAME.add("季萌"); - CN_FIRST_NAME.add("孤菱"); - CN_FIRST_NAME.add("秀雅"); - CN_FIRST_NAME.add("听莲"); - CN_FIRST_NAME.add("书雁"); - CN_FIRST_NAME.add("曼岚"); - CN_FIRST_NAME.add("韶丽"); - CN_FIRST_NAME.add("丽容"); - CN_FIRST_NAME.add("寻冬"); - CN_FIRST_NAME.add("嘉言"); - CN_FIRST_NAME.add("灵雨"); - CN_FIRST_NAME.add("孤萍"); - CN_FIRST_NAME.add("巍奕"); - CN_FIRST_NAME.add("寒雁"); - CN_FIRST_NAME.add("流婉"); - CN_FIRST_NAME.add("奇文"); - CN_FIRST_NAME.add("慕诗"); - CN_FIRST_NAME.add("以松"); - CN_FIRST_NAME.add("锦文"); - CN_FIRST_NAME.add("依然"); - CN_FIRST_NAME.add("丝微"); - CN_FIRST_NAME.add("怡然"); - CN_FIRST_NAME.add("弘光"); - CN_FIRST_NAME.add("静慧"); - CN_FIRST_NAME.add("雯丽"); - CN_FIRST_NAME.add("幼萱"); - CN_FIRST_NAME.add("芙蓉"); - CN_FIRST_NAME.add("和硕"); - CN_FIRST_NAME.add("音仪"); - CN_FIRST_NAME.add("君昊"); - CN_FIRST_NAME.add("修杰"); - CN_FIRST_NAME.add("水竹"); - CN_FIRST_NAME.add("寻凝"); - CN_FIRST_NAME.add("清芬"); - CN_FIRST_NAME.add("骊红"); - CN_FIRST_NAME.add("星睿"); - CN_FIRST_NAME.add("令枫"); - CN_FIRST_NAME.add("丹山"); - CN_FIRST_NAME.add("雨伯"); - CN_FIRST_NAME.add("代柔"); - CN_FIRST_NAME.add("润丽"); - CN_FIRST_NAME.add("骞尧"); - CN_FIRST_NAME.add("余妍"); - CN_FIRST_NAME.add("觅晴"); - CN_FIRST_NAME.add("安翔"); - CN_FIRST_NAME.add("颜骏"); - CN_FIRST_NAME.add("念雁"); - CN_FIRST_NAME.add("舒畅"); - CN_FIRST_NAME.add("和顺"); - CN_FIRST_NAME.add("安志"); - CN_FIRST_NAME.add("余馥"); - CN_FIRST_NAME.add("盼波"); - CN_FIRST_NAME.add("春雪"); - CN_FIRST_NAME.add("俊语"); - CN_FIRST_NAME.add("思凡"); - CN_FIRST_NAME.add("春雨"); - CN_FIRST_NAME.add("晓兰"); - CN_FIRST_NAME.add("诗晗"); - CN_FIRST_NAME.add("和颂"); - CN_FIRST_NAME.add("高畅"); - CN_FIRST_NAME.add("平文"); - CN_FIRST_NAME.add("寄风"); - CN_FIRST_NAME.add("玉韵"); - CN_FIRST_NAME.add("玉石"); - CN_FIRST_NAME.add("向松"); - CN_FIRST_NAME.add("俊民"); - CN_FIRST_NAME.add("芬芬"); - CN_FIRST_NAME.add("家骏"); - CN_FIRST_NAME.add("景中"); - CN_FIRST_NAME.add("雪漫"); - CN_FIRST_NAME.add("湛颖"); - CN_FIRST_NAME.add("玉堂"); - CN_FIRST_NAME.add("萍韵"); - CN_FIRST_NAME.add("白山"); - CN_FIRST_NAME.add("山菡"); - CN_FIRST_NAME.add("温纶"); - CN_FIRST_NAME.add("昊穹"); - CN_FIRST_NAME.add("沈然"); - CN_FIRST_NAME.add("阳文"); - CN_FIRST_NAME.add("韶仪"); - CN_FIRST_NAME.add("以柳"); - CN_FIRST_NAME.add("嘉誉"); - CN_FIRST_NAME.add("戈雅"); - CN_FIRST_NAME.add("安怡"); - CN_FIRST_NAME.add("斯文"); - CN_FIRST_NAME.add("夏波"); - CN_FIRST_NAME.add("弘量"); - CN_FIRST_NAME.add("芳懿"); - CN_FIRST_NAME.add("昊空"); - CN_FIRST_NAME.add("新蕾"); - CN_FIRST_NAME.add("元纬"); - CN_FIRST_NAME.add("念真"); - CN_FIRST_NAME.add("浩阔"); - CN_FIRST_NAME.add("秋阳"); - CN_FIRST_NAME.add("雅珺"); - CN_FIRST_NAME.add("和风"); - CN_FIRST_NAME.add("代桃"); - CN_FIRST_NAME.add("今歌"); - CN_FIRST_NAME.add("念霜"); - CN_FIRST_NAME.add("念露"); - CN_FIRST_NAME.add("华彩"); - CN_FIRST_NAME.add("海瑶"); - CN_FIRST_NAME.add("言心"); - CN_FIRST_NAME.add("骏年"); - CN_FIRST_NAME.add("雅可"); - CN_FIRST_NAME.add("英媛"); - CN_FIRST_NAME.add("凌丝"); - CN_FIRST_NAME.add("新文"); - CN_FIRST_NAME.add("晓凡"); - CN_FIRST_NAME.add("冠玉"); - CN_FIRST_NAME.add("梦槐"); - CN_FIRST_NAME.add("叶欣"); - CN_FIRST_NAME.add("晨潍"); - CN_FIRST_NAME.add("依凝"); - CN_FIRST_NAME.add("俊豪"); - CN_FIRST_NAME.add("德庸"); - CN_FIRST_NAME.add("雨信"); - CN_FIRST_NAME.add("斯斯"); - CN_FIRST_NAME.add("晓燕"); - CN_FIRST_NAME.add("振华"); - CN_FIRST_NAME.add("琼芳"); - CN_FIRST_NAME.add("坚成"); - CN_FIRST_NAME.add("问丝"); - CN_FIRST_NAME.add("友灵"); - CN_FIRST_NAME.add("岚彩"); - CN_FIRST_NAME.add("振博"); - CN_FIRST_NAME.add("惜筠"); - CN_FIRST_NAME.add("阳旭"); - CN_FIRST_NAME.add("冰冰"); - CN_FIRST_NAME.add("华美"); - CN_FIRST_NAME.add("代梅"); - CN_FIRST_NAME.add("绮露"); - CN_FIRST_NAME.add("痴海"); - CN_FIRST_NAME.add("晨轩"); - CN_FIRST_NAME.add("旭鹏"); - CN_FIRST_NAME.add("翰音"); - CN_FIRST_NAME.add("溪澈"); - CN_FIRST_NAME.add("元绿"); - CN_FIRST_NAME.add("平春"); - CN_FIRST_NAME.add("运诚"); - CN_FIRST_NAME.add("秋白"); - CN_FIRST_NAME.add("雅琴"); - CN_FIRST_NAME.add("昕妤"); - CN_FIRST_NAME.add("歌韵"); - CN_FIRST_NAME.add("妮娜"); - CN_FIRST_NAME.add("令梓"); - CN_FIRST_NAME.add("令梅"); - CN_FIRST_NAME.add("如彤"); - CN_FIRST_NAME.add("胤骞"); - CN_FIRST_NAME.add("灵韵"); - CN_FIRST_NAME.add("玮琪"); - CN_FIRST_NAME.add("香岚"); - CN_FIRST_NAME.add("北晶"); - CN_FIRST_NAME.add("琼英"); - CN_FIRST_NAME.add("冰凡"); - CN_FIRST_NAME.add("若山"); - CN_FIRST_NAME.add("翔宇"); - CN_FIRST_NAME.add("晨辰"); - CN_FIRST_NAME.add("永宁"); - CN_FIRST_NAME.add("晴丽"); - CN_FIRST_NAME.add("顺美"); - CN_FIRST_NAME.add("逸美"); - CN_FIRST_NAME.add("觅松"); - CN_FIRST_NAME.add("高阳"); - CN_FIRST_NAME.add("平晓"); - CN_FIRST_NAME.add("瑞绣"); - CN_FIRST_NAME.add("昆宇"); - CN_FIRST_NAME.add("玲玲"); - CN_FIRST_NAME.add("开畅"); - CN_FIRST_NAME.add("玲珑"); - CN_FIRST_NAME.add("宜年"); - CN_FIRST_NAME.add("嘉歆"); - CN_FIRST_NAME.add("骊美"); - CN_FIRST_NAME.add("清莹"); - CN_FIRST_NAME.add("永安"); - CN_FIRST_NAME.add("紫丝"); - CN_FIRST_NAME.add("优扬"); - CN_FIRST_NAME.add("浩皛"); - CN_FIRST_NAME.add("志学"); - CN_FIRST_NAME.add("江雪"); - CN_FIRST_NAME.add("华翰"); - CN_FIRST_NAME.add("初蓝"); - CN_FIRST_NAME.add("语蓉"); - CN_FIRST_NAME.add("银河"); - CN_FIRST_NAME.add("芳芳"); - CN_FIRST_NAME.add("静芙"); - CN_FIRST_NAME.add("含蕊"); - CN_FIRST_NAME.add("晨濡"); - CN_FIRST_NAME.add("璇娟"); - CN_FIRST_NAME.add("密如"); - CN_FIRST_NAME.add("惜寒"); - CN_FIRST_NAME.add("映颖"); - CN_FIRST_NAME.add("又儿"); - CN_FIRST_NAME.add("涵涤"); - CN_FIRST_NAME.add("伟懋"); - CN_FIRST_NAME.add("柳思"); - CN_FIRST_NAME.add("如心"); - CN_FIRST_NAME.add("元彤"); - CN_FIRST_NAME.add("岚翠"); - CN_FIRST_NAME.add("鸿波"); - CN_FIRST_NAME.add("芳苓"); - CN_FIRST_NAME.add("俊贤"); - CN_FIRST_NAME.add("阳晖"); - CN_FIRST_NAME.add("野云"); - CN_FIRST_NAME.add("锦曦"); - CN_FIRST_NAME.add("康平"); - CN_FIRST_NAME.add("闲丽"); - CN_FIRST_NAME.add("乐章"); - CN_FIRST_NAME.add("乐童"); - CN_FIRST_NAME.add("涵润"); - CN_FIRST_NAME.add("玲琅"); - CN_FIRST_NAME.add("雨灵"); - CN_FIRST_NAME.add("婉柔"); - CN_FIRST_NAME.add("茗雪"); - CN_FIRST_NAME.add("兰娜"); - CN_FIRST_NAME.add("涵涵"); - CN_FIRST_NAME.add("怜南"); - CN_FIRST_NAME.add("昊宇"); - CN_FIRST_NAME.add("盼丹"); - CN_FIRST_NAME.add("薇歌"); - CN_FIRST_NAME.add("含文"); - CN_FIRST_NAME.add("成益"); - CN_FIRST_NAME.add("翰墨"); - CN_FIRST_NAME.add("闳丽"); - CN_FIRST_NAME.add("黛娥"); - CN_FIRST_NAME.add("元龙"); - CN_FIRST_NAME.add("飞双"); - CN_FIRST_NAME.add("飞珍"); - CN_FIRST_NAME.add("觅柔"); - CN_FIRST_NAME.add("向梦"); - CN_FIRST_NAME.add("宏恺"); - CN_FIRST_NAME.add("梓洁"); - CN_FIRST_NAME.add("幼旋"); - CN_FIRST_NAME.add("嘉许"); - CN_FIRST_NAME.add("迎波"); - CN_FIRST_NAME.add("瑞彩"); - CN_FIRST_NAME.add("傲儿"); - CN_FIRST_NAME.add("思卉"); - CN_FIRST_NAME.add("新晴"); - CN_FIRST_NAME.add("建白"); - CN_FIRST_NAME.add("秋露"); - CN_FIRST_NAME.add("紫云"); - CN_FIRST_NAME.add("永寿"); - CN_FIRST_NAME.add("溶溶"); - CN_FIRST_NAME.add("怀雁"); - CN_FIRST_NAME.add("凝洁"); - CN_FIRST_NAME.add("玲琳"); - CN_FIRST_NAME.add("蕴涵"); - CN_FIRST_NAME.add("鹤梦"); - CN_FIRST_NAME.add("贞怡"); - CN_FIRST_NAME.add("瑶岑"); - CN_FIRST_NAME.add("博延"); - CN_FIRST_NAME.add("思博"); - CN_FIRST_NAME.add("芬菲"); - CN_FIRST_NAME.add("秀颖"); - CN_FIRST_NAME.add("智渊"); - CN_FIRST_NAME.add("元德"); - CN_FIRST_NAME.add("芳荃"); - CN_FIRST_NAME.add("学文"); - CN_FIRST_NAME.add("语蕊"); - CN_FIRST_NAME.add("诗柳"); - CN_FIRST_NAME.add("睿广"); - CN_FIRST_NAME.add("芳茵"); - CN_FIRST_NAME.add("靖荷"); - CN_FIRST_NAME.add("逸思"); - CN_FIRST_NAME.add("弘化"); - CN_FIRST_NAME.add("景辉"); - CN_FIRST_NAME.add("元忠"); - CN_FIRST_NAME.add("景澄"); - CN_FIRST_NAME.add("高雅"); - CN_FIRST_NAME.add("翰飞"); - CN_FIRST_NAME.add("阳曦"); - CN_FIRST_NAME.add("映天"); - CN_FIRST_NAME.add("长岳"); - CN_FIRST_NAME.add("伟才"); - CN_FIRST_NAME.add("桃雨"); - CN_FIRST_NAME.add("芸芸"); - CN_FIRST_NAME.add("才俊"); - CN_FIRST_NAME.add("天欣"); - CN_FIRST_NAME.add("旭彬"); - CN_FIRST_NAME.add("冬卉"); - CN_FIRST_NAME.add("夏之"); - CN_FIRST_NAME.add("阳曜"); - CN_FIRST_NAME.add("芷若"); - CN_FIRST_NAME.add("雅唱"); - CN_FIRST_NAME.add("歌飞"); - CN_FIRST_NAME.add("晶滢"); - CN_FIRST_NAME.add("运洁"); - CN_FIRST_NAME.add("怜珊"); - CN_FIRST_NAME.add("宏胜"); - CN_FIRST_NAME.add("蕙兰"); - CN_FIRST_NAME.add("志尚"); - CN_FIRST_NAME.add("湛娟"); - CN_FIRST_NAME.add("嘉谊"); - CN_FIRST_NAME.add("凡波"); - CN_FIRST_NAME.add("语薇"); - CN_FIRST_NAME.add("方方"); - CN_FIRST_NAME.add("乐安"); - CN_FIRST_NAME.add("傲冬"); - CN_FIRST_NAME.add("凝海"); - CN_FIRST_NAME.add("元思"); - CN_FIRST_NAME.add("莹莹"); - CN_FIRST_NAME.add("雅畅"); - CN_FIRST_NAME.add("凯歌"); - CN_FIRST_NAME.add("国源"); - CN_FIRST_NAME.add("寻双"); - CN_FIRST_NAME.add("新曦"); - CN_FIRST_NAME.add("怜双"); - CN_FIRST_NAME.add("芸若"); - CN_FIRST_NAME.add("正阳"); - CN_FIRST_NAME.add("尔烟"); - CN_FIRST_NAME.add("菁英"); - CN_FIRST_NAME.add("朗宁"); - CN_FIRST_NAME.add("羽彤"); - CN_FIRST_NAME.add("未央"); - CN_FIRST_NAME.add("弘博"); - CN_FIRST_NAME.add("飞瑶"); - CN_FIRST_NAME.add("玄穆"); - CN_FIRST_NAME.add("芸茗"); - CN_FIRST_NAME.add("莺莺"); - CN_FIRST_NAME.add("阳朔"); - CN_FIRST_NAME.add("新月"); - CN_FIRST_NAME.add("鑫鹏"); - CN_FIRST_NAME.add("诗桃"); - CN_FIRST_NAME.add("乐容"); - CN_FIRST_NAME.add("平松"); - CN_FIRST_NAME.add("寅骏"); - CN_FIRST_NAME.add("轩秀"); - CN_FIRST_NAME.add("妮子"); - CN_FIRST_NAME.add("夏云"); - CN_FIRST_NAME.add("慧语"); - CN_FIRST_NAME.add("晓博"); - CN_FIRST_NAME.add("乐家"); - CN_FIRST_NAME.add("听春"); - CN_FIRST_NAME.add("幼晴"); - CN_FIRST_NAME.add("好慕"); - CN_FIRST_NAME.add("迎海"); - CN_FIRST_NAME.add("香巧"); - CN_FIRST_NAME.add("丹红"); - CN_FIRST_NAME.add("哲丽"); - CN_FIRST_NAME.add("丰羽"); - CN_FIRST_NAME.add("依玉"); - CN_FIRST_NAME.add("珠轩"); - CN_FIRST_NAME.add("雪儿"); - CN_FIRST_NAME.add("珠佩"); - CN_FIRST_NAME.add("宇航"); - CN_FIRST_NAME.add("运浩"); - CN_FIRST_NAME.add("弘厚"); - CN_FIRST_NAME.add("芳菲"); - CN_FIRST_NAME.add("梓涵"); - CN_FIRST_NAME.add("海阳"); - CN_FIRST_NAME.add("寻琴"); - CN_FIRST_NAME.add("世英"); - CN_FIRST_NAME.add("涵亮"); - CN_FIRST_NAME.add("雨兰"); - CN_FIRST_NAME.add("孤晴"); - CN_FIRST_NAME.add("寒天"); - CN_FIRST_NAME.add("元恺"); - CN_FIRST_NAME.add("思琪"); - CN_FIRST_NAME.add("景逸"); - CN_FIRST_NAME.add("小凝"); - CN_FIRST_NAME.add("昆峰"); - CN_FIRST_NAME.add("映秋"); - CN_FIRST_NAME.add("璇子"); - CN_FIRST_NAME.add("宾实"); - CN_FIRST_NAME.add("含景"); - CN_FIRST_NAME.add("芷荷"); - CN_FIRST_NAME.add("柔蔓"); - CN_FIRST_NAME.add("熙阳"); - CN_FIRST_NAME.add("隽雅"); - CN_FIRST_NAME.add("思琳"); - CN_FIRST_NAME.add("勇军"); - CN_FIRST_NAME.add("如意"); - CN_FIRST_NAME.add("蕊珠"); - CN_FIRST_NAME.add("依珊"); - CN_FIRST_NAME.add("伟茂"); - CN_FIRST_NAME.add("睿彤"); - CN_FIRST_NAME.add("巧风"); - CN_FIRST_NAME.add("振锐"); - CN_FIRST_NAME.add("正雅"); - CN_FIRST_NAME.add("添智"); - CN_FIRST_NAME.add("雪兰"); - CN_FIRST_NAME.add("向槐"); - CN_FIRST_NAME.add("溪儿"); - CN_FIRST_NAME.add("光耀"); - CN_FIRST_NAME.add("从波"); - CN_FIRST_NAME.add("晶辉"); - CN_FIRST_NAME.add("学智"); - CN_FIRST_NAME.add("秀妮"); - CN_FIRST_NAME.add("鹏池"); - CN_FIRST_NAME.add("曼彤"); - CN_FIRST_NAME.add("灵秀"); - CN_FIRST_NAME.add("雨凝"); - CN_FIRST_NAME.add("敏博"); - CN_FIRST_NAME.add("智伟"); - CN_FIRST_NAME.add("凝丝"); - CN_FIRST_NAME.add("海白"); - CN_FIRST_NAME.add("新林"); - CN_FIRST_NAME.add("康德"); - CN_FIRST_NAME.add("博耘"); - CN_FIRST_NAME.add("娟丽"); - CN_FIRST_NAME.add("凝丹"); - CN_FIRST_NAME.add("灵秋"); - CN_FIRST_NAME.add("初晴"); - CN_FIRST_NAME.add("唱月"); - CN_FIRST_NAME.add("亦凝"); - CN_FIRST_NAME.add("雨燕"); - CN_FIRST_NAME.add("德惠"); - CN_FIRST_NAME.add("巧夏"); - CN_FIRST_NAME.add("娇然"); - CN_FIRST_NAME.add("沛儿"); - CN_FIRST_NAME.add("易容"); - CN_FIRST_NAME.add("语晨"); - CN_FIRST_NAME.add("寒香"); - CN_FIRST_NAME.add("开霁"); - CN_FIRST_NAME.add("高韵"); - CN_FIRST_NAME.add("菀菀"); - CN_FIRST_NAME.add("正真"); - CN_FIRST_NAME.add("怡君"); - CN_FIRST_NAME.add("春妤"); - CN_FIRST_NAME.add("尔冬"); - CN_FIRST_NAME.add("雪冰"); - CN_FIRST_NAME.add("睿德"); - CN_FIRST_NAME.add("冰双"); - CN_FIRST_NAME.add("冰珍"); - CN_FIRST_NAME.add("子楠"); - CN_FIRST_NAME.add("顺慈"); - CN_FIRST_NAME.add("嘉泽"); - CN_FIRST_NAME.add("红艳"); - CN_FIRST_NAME.add("迎丝"); - CN_FIRST_NAME.add("鸿云"); - CN_FIRST_NAME.add("晗玥"); - CN_FIRST_NAME.add("秋颖"); - CN_FIRST_NAME.add("晓君"); - CN_FIRST_NAME.add("新柔"); - CN_FIRST_NAME.add("山晴"); - CN_FIRST_NAME.add("乐山"); - CN_FIRST_NAME.add("贤惠"); - CN_FIRST_NAME.add("吉欣"); - CN_FIRST_NAME.add("菁菁"); - CN_FIRST_NAME.add("俊人"); - CN_FIRST_NAME.add("恬欣"); - CN_FIRST_NAME.add("依琴"); - CN_FIRST_NAME.add("星驰"); - CN_FIRST_NAME.add("丹彤"); - CN_FIRST_NAME.add("正青"); - CN_FIRST_NAME.add("俏丽"); - CN_FIRST_NAME.add("秀娟"); - CN_FIRST_NAME.add("梓云"); - CN_FIRST_NAME.add("春姝"); - CN_FIRST_NAME.add("忆彤"); - CN_FIRST_NAME.add("森莉"); - CN_FIRST_NAME.add("海雪"); - CN_FIRST_NAME.add("凝云"); - CN_FIRST_NAME.add("青文"); - CN_FIRST_NAME.add("嘉赐"); - CN_FIRST_NAME.add("睿思"); - CN_FIRST_NAME.add("依瑶"); - CN_FIRST_NAME.add("佳妍"); - CN_FIRST_NAME.add("初曼"); - CN_FIRST_NAME.add("荣轩"); - CN_FIRST_NAME.add("和安"); - CN_FIRST_NAME.add("兴学"); - CN_FIRST_NAME.add("敏叡"); - CN_FIRST_NAME.add("寄容"); - CN_FIRST_NAME.add("弘和"); - CN_FIRST_NAME.add("红英"); - CN_FIRST_NAME.add("凡之"); - CN_FIRST_NAME.add("怡和"); - CN_FIRST_NAME.add("雁露"); - CN_FIRST_NAME.add("怡璐"); - CN_FIRST_NAME.add("秀婉"); - CN_FIRST_NAME.add("景焕"); - CN_FIRST_NAME.add("雅隽"); - CN_FIRST_NAME.add("春娇"); - CN_FIRST_NAME.add("晓瑶"); - CN_FIRST_NAME.add("孤松"); - CN_FIRST_NAME.add("宏才"); - CN_FIRST_NAME.add("浩壤"); - CN_FIRST_NAME.add("巧香"); - CN_FIRST_NAME.add("和宜"); - CN_FIRST_NAME.add("琳晨"); - CN_FIRST_NAME.add("幻枫"); - CN_FIRST_NAME.add("兴安"); - CN_FIRST_NAME.add("瀚文"); - CN_FIRST_NAME.add("绢子"); - CN_FIRST_NAME.add("幼枫"); - CN_FIRST_NAME.add("半芹"); - CN_FIRST_NAME.add("文赋"); - CN_FIRST_NAME.add("欣彩"); - CN_FIRST_NAME.add("青旋"); - CN_FIRST_NAME.add("欣彤"); - CN_FIRST_NAME.add("逸致"); - CN_FIRST_NAME.add("沛凝"); - CN_FIRST_NAME.add("晗琴"); - CN_FIRST_NAME.add("心思"); - CN_FIRST_NAME.add("晶灵"); - CN_FIRST_NAME.add("茂学"); - CN_FIRST_NAME.add("心怡"); - CN_FIRST_NAME.add("翠岚"); - CN_FIRST_NAME.add("宏扬"); - CN_FIRST_NAME.add("冷玉"); - CN_FIRST_NAME.add("运乾"); - CN_FIRST_NAME.add("睿聪"); - CN_FIRST_NAME.add("欣美"); - CN_FIRST_NAME.add("长平"); - CN_FIRST_NAME.add("诗槐"); - CN_FIRST_NAME.add("茂实"); - CN_FIRST_NAME.add("丹翠"); - CN_FIRST_NAME.add("宇荫"); - CN_FIRST_NAME.add("鹏赋"); - CN_FIRST_NAME.add("浩大"); - CN_FIRST_NAME.add("秀媛"); - CN_FIRST_NAME.add("友卉"); - CN_FIRST_NAME.add("秀媚"); - CN_FIRST_NAME.add("以欣"); - CN_FIRST_NAME.add("幼柏"); - CN_FIRST_NAME.add("新梅"); - CN_FIRST_NAME.add("清昶"); - CN_FIRST_NAME.add("嘉淑"); - CN_FIRST_NAME.add("凯泽"); - CN_FIRST_NAME.add("雅霜"); - CN_FIRST_NAME.add("韫玉"); - CN_FIRST_NAME.add("傲南"); - CN_FIRST_NAME.add("叶丰"); - CN_FIRST_NAME.add("初蝶"); - CN_FIRST_NAME.add("听枫"); - CN_FIRST_NAME.add("升荣"); - CN_FIRST_NAME.add("香彤"); - CN_FIRST_NAME.add("欣德"); - CN_FIRST_NAME.add("芳蔼"); - CN_FIRST_NAME.add("学林"); - CN_FIRST_NAME.add("冷珍"); - CN_FIRST_NAME.add("清晖"); - CN_FIRST_NAME.add("夜云"); - CN_FIRST_NAME.add("天泽"); - CN_FIRST_NAME.add("芳蕤"); - CN_FIRST_NAME.add("问儿"); - CN_FIRST_NAME.add("驰文"); - CN_FIRST_NAME.add("华芝"); - CN_FIRST_NAME.add("安荷"); - CN_FIRST_NAME.add("昆鹏"); - CN_FIRST_NAME.add("飞阳"); - CN_FIRST_NAME.add("叶丹"); - CN_FIRST_NAME.add("白翠"); - CN_FIRST_NAME.add("盈盈"); - CN_FIRST_NAME.add("康胜"); - CN_FIRST_NAME.add("痴灵"); - CN_FIRST_NAME.add("若彤"); - CN_FIRST_NAME.add("玉宇"); - CN_FIRST_NAME.add("访波"); - CN_FIRST_NAME.add("青易"); - CN_FIRST_NAME.add("成天"); - CN_FIRST_NAME.add("高飞"); - CN_FIRST_NAME.add("芳蕙"); - CN_FIRST_NAME.add("芷蓝"); - CN_FIRST_NAME.add("鸿轩"); - CN_FIRST_NAME.add("梦泽"); - CN_FIRST_NAME.add("鹏海"); - CN_FIRST_NAME.add("傲玉"); - CN_FIRST_NAME.add("俊侠"); - CN_FIRST_NAME.add("成礼"); - CN_FIRST_NAME.add("美曼"); - CN_FIRST_NAME.add("从丹"); - CN_FIRST_NAME.add("醉香"); - CN_FIRST_NAME.add("幻桃"); - CN_FIRST_NAME.add("瀚昂"); - CN_FIRST_NAME.add("雅静"); - CN_FIRST_NAME.add("凌兰"); - CN_FIRST_NAME.add("山蝶"); - CN_FIRST_NAME.add("蓉蓉"); - CN_FIRST_NAME.add("永年"); - CN_FIRST_NAME.add("俊迈"); - CN_FIRST_NAME.add("三春"); - CN_FIRST_NAME.add("秀竹"); - CN_FIRST_NAME.add("双玉"); - CN_FIRST_NAME.add("恬谧"); - CN_FIRST_NAME.add("语蝶"); - CN_FIRST_NAME.add("骊艳"); - CN_FIRST_NAME.add("俊达"); - CN_FIRST_NAME.add("鹏涛"); - CN_FIRST_NAME.add("雅青"); - CN_FIRST_NAME.add("玉宸"); - CN_FIRST_NAME.add("安莲"); - CN_FIRST_NAME.add("星宇"); - CN_FIRST_NAME.add("贞芳"); - CN_FIRST_NAME.add("怡畅"); - CN_FIRST_NAME.add("天赋"); - CN_FIRST_NAME.add("鸿达"); - CN_FIRST_NAME.add("飞白"); - CN_FIRST_NAME.add("珊珊"); - CN_FIRST_NAME.add("问兰"); - CN_FIRST_NAME.add("震轩"); - CN_FIRST_NAME.add("欣怡"); - CN_FIRST_NAME.add("友珊"); - CN_FIRST_NAME.add("宏茂"); - CN_FIRST_NAME.add("俊远"); - CN_FIRST_NAME.add("书竹"); - CN_FIRST_NAME.add("语林"); - CN_FIRST_NAME.add("初柔"); - CN_FIRST_NAME.add("晓畅"); - CN_FIRST_NAME.add("嘉丽"); - CN_FIRST_NAME.add("淑贞"); - CN_FIRST_NAME.add("幻梅"); - CN_FIRST_NAME.add("哲瀚"); - CN_FIRST_NAME.add("鸿运"); - CN_FIRST_NAME.add("映安"); - CN_FIRST_NAME.add("又琴"); - CN_FIRST_NAME.add("昆纬"); - CN_FIRST_NAME.add("鸿远"); - CN_FIRST_NAME.add("可佳"); - CN_FIRST_NAME.add("靖易"); - CN_FIRST_NAME.add("欣怿"); - CN_FIRST_NAME.add("永康"); - CN_FIRST_NAME.add("含桃"); - CN_FIRST_NAME.add("雨华"); - CN_FIRST_NAME.add("春竹"); - CN_FIRST_NAME.add("翰学"); - CN_FIRST_NAME.add("昆纶"); - CN_FIRST_NAME.add("初柳"); - CN_FIRST_NAME.add("雨南"); - CN_FIRST_NAME.add("淑贤"); - CN_FIRST_NAME.add("华茂"); - CN_FIRST_NAME.add("晴照"); - CN_FIRST_NAME.add("元良"); - CN_FIRST_NAME.add("思嘉"); - CN_FIRST_NAME.add("丽思"); - CN_FIRST_NAME.add("雍雅"); - CN_FIRST_NAME.add("从云"); - CN_FIRST_NAME.add("若翠"); - CN_FIRST_NAME.add("雪卉"); - CN_FIRST_NAME.add("烨赫"); - CN_FIRST_NAME.add("鸿信"); - CN_FIRST_NAME.add("小珍"); - CN_FIRST_NAME.add("凝远"); - CN_FIRST_NAME.add("语柔"); - CN_FIRST_NAME.add("文丽"); - CN_FIRST_NAME.add("怜阳"); - CN_FIRST_NAME.add("乐巧"); - CN_FIRST_NAME.add("芷文"); - CN_FIRST_NAME.add("振国"); - CN_FIRST_NAME.add("半莲"); - CN_FIRST_NAME.add("嘉云"); - CN_FIRST_NAME.add("俊逸"); - CN_FIRST_NAME.add("文乐"); - CN_FIRST_NAME.add("修诚"); - CN_FIRST_NAME.add("睿慈"); - CN_FIRST_NAME.add("丝萝"); - CN_FIRST_NAME.add("山柳"); - CN_FIRST_NAME.add("音华"); - CN_FIRST_NAME.add("亦玉"); - CN_FIRST_NAME.add("秀筠"); - CN_FIRST_NAME.add("妙思"); - CN_FIRST_NAME.add("经纬"); - CN_FIRST_NAME.add("骊英"); - CN_FIRST_NAME.add("语柳"); - CN_FIRST_NAME.add("灵安"); - CN_FIRST_NAME.add("端雅"); - CN_FIRST_NAME.add("慧丽"); - CN_FIRST_NAME.add("夏烟"); - CN_FIRST_NAME.add("问凝"); - CN_FIRST_NAME.add("水彤"); - CN_FIRST_NAME.add("映寒"); - CN_FIRST_NAME.add("西华"); - CN_FIRST_NAME.add("芳春"); - CN_FIRST_NAME.add("雅韵"); - CN_FIRST_NAME.add("安萱"); - CN_FIRST_NAME.add("友琴"); - CN_FIRST_NAME.add("心愫"); - CN_FIRST_NAME.add("雅韶"); - CN_FIRST_NAME.add("珉瑶"); - CN_FIRST_NAME.add("炳君"); - CN_FIRST_NAME.add("经纶"); - CN_FIRST_NAME.add("欢悦"); - CN_FIRST_NAME.add("旎旎"); - CN_FIRST_NAME.add("霓云"); - CN_FIRST_NAME.add("真洁"); - CN_FIRST_NAME.add("俊健"); - CN_FIRST_NAME.add("鸣玉"); - CN_FIRST_NAME.add("子欣"); - CN_FIRST_NAME.add("飞雨"); - CN_FIRST_NAME.add("鹏举"); - CN_FIRST_NAME.add("元芹"); - CN_FIRST_NAME.add("飞雪"); - CN_FIRST_NAME.add("华荣"); - CN_FIRST_NAME.add("乃心"); - CN_FIRST_NAME.add("天路"); - CN_FIRST_NAME.add("欣悦"); - CN_FIRST_NAME.add("心慈"); - CN_FIRST_NAME.add("弘阔"); - CN_FIRST_NAME.add("灵寒"); - CN_FIRST_NAME.add("修谨"); - CN_FIRST_NAME.add("世敏"); - CN_FIRST_NAME.add("瑞芝"); - CN_FIRST_NAME.add("海颖"); - CN_FIRST_NAME.add("温茂"); - CN_FIRST_NAME.add("英纵"); - CN_FIRST_NAME.add("雨双"); - CN_FIRST_NAME.add("雨珍"); - CN_FIRST_NAME.add("青曼"); - CN_FIRST_NAME.add("盼兰"); - CN_FIRST_NAME.add("梓倩"); - CN_FIRST_NAME.add("力夫"); - CN_FIRST_NAME.add("骊茹"); - CN_FIRST_NAME.add("绿夏"); - CN_FIRST_NAME.add("锐泽"); - CN_FIRST_NAME.add("修永"); - CN_FIRST_NAME.add("友瑶"); - CN_FIRST_NAME.add("怡嘉"); - CN_FIRST_NAME.add("元英"); - CN_FIRST_NAME.add("玉山"); - CN_FIRST_NAME.add("慧云"); - CN_FIRST_NAME.add("古兰"); - CN_FIRST_NAME.add("翠巧"); - CN_FIRST_NAME.add("韶华"); - CN_FIRST_NAME.add("小琴"); - CN_FIRST_NAME.add("珑玲"); - CN_FIRST_NAME.add("彗云"); - CN_FIRST_NAME.add("玄素"); - CN_FIRST_NAME.add("晶燕"); - CN_FIRST_NAME.add("新觉"); - CN_FIRST_NAME.add("月怡"); - CN_FIRST_NAME.add("娴淑"); - CN_FIRST_NAME.add("霞赩"); - CN_FIRST_NAME.add("瑜英"); - CN_FIRST_NAME.add("贝莉"); - CN_FIRST_NAME.add("国兴"); - CN_FIRST_NAME.add("恺歌"); - CN_FIRST_NAME.add("素华"); - CN_FIRST_NAME.add("小瑜"); - CN_FIRST_NAME.add("曜文"); - CN_FIRST_NAME.add("浩穰"); - CN_FIRST_NAME.add("雯华"); - CN_FIRST_NAME.add("碧巧"); - CN_FIRST_NAME.add("河灵"); - CN_FIRST_NAME.add("娅玟"); - CN_FIRST_NAME.add("雪珍"); - CN_FIRST_NAME.add("鹏云"); - CN_FIRST_NAME.add("雪珊"); - CN_FIRST_NAME.add("康成"); - CN_FIRST_NAME.add("易巧"); - CN_FIRST_NAME.add("艳丽"); - CN_FIRST_NAME.add("梦丝"); - CN_FIRST_NAME.add("静晨"); - CN_FIRST_NAME.add("雁风"); - CN_FIRST_NAME.add("山梅"); - CN_FIRST_NAME.add("珍瑞"); - CN_FIRST_NAME.add("怜雪"); - CN_FIRST_NAME.add("思雅"); - CN_FIRST_NAME.add("寻雪"); - CN_FIRST_NAME.add("端静"); - CN_FIRST_NAME.add("志强"); - CN_FIRST_NAME.add("语梦"); - CN_FIRST_NAME.add("思雁"); - CN_FIRST_NAME.add("正奇"); - CN_FIRST_NAME.add("夏兰"); - CN_FIRST_NAME.add("宾鸿"); - CN_FIRST_NAME.add("欣愉"); - CN_FIRST_NAME.add("凯乐"); - CN_FIRST_NAME.add("文滨"); - CN_FIRST_NAME.add("昌黎"); - CN_FIRST_NAME.add("俊郎"); - CN_FIRST_NAME.add("苒苒"); - CN_FIRST_NAME.add("骏英"); - CN_FIRST_NAME.add("承泽"); - CN_FIRST_NAME.add("笑卉"); - CN_FIRST_NAME.add("涵煦"); - CN_FIRST_NAME.add("雨琴"); - CN_FIRST_NAME.add("采南"); - CN_FIRST_NAME.add("嘉佑"); - CN_FIRST_NAME.add("思雨"); - CN_FIRST_NAME.add("痴凝"); - CN_FIRST_NAME.add("梦之"); - CN_FIRST_NAME.add("笑南"); - CN_FIRST_NAME.add("博艺"); - CN_FIRST_NAME.add("愉婉"); - CN_FIRST_NAME.add("乐康"); - CN_FIRST_NAME.add("正祥"); - CN_FIRST_NAME.add("念寒"); - CN_FIRST_NAME.add("辰君"); - CN_FIRST_NAME.add("自强"); - CN_FIRST_NAME.add("沛珊"); - CN_FIRST_NAME.add("英彦"); - CN_FIRST_NAME.add("依白"); - CN_FIRST_NAME.add("青枫"); - CN_FIRST_NAME.add("高驰"); - CN_FIRST_NAME.add("驰月"); - CN_FIRST_NAME.add("文漪"); - CN_FIRST_NAME.add("月悦"); - CN_FIRST_NAME.add("家美"); - CN_FIRST_NAME.add("天亦"); - CN_FIRST_NAME.add("谷翠"); - CN_FIRST_NAME.add("妙意"); - CN_FIRST_NAME.add("冬雁"); - CN_FIRST_NAME.add("睿才"); - CN_FIRST_NAME.add("弘雅"); - CN_FIRST_NAME.add("惠美"); - CN_FIRST_NAME.add("梦云"); - CN_FIRST_NAME.add("云霞"); - CN_FIRST_NAME.add("尔琴"); - CN_FIRST_NAME.add("思真"); - CN_FIRST_NAME.add("嘉澍"); - CN_FIRST_NAME.add("青柏"); - CN_FIRST_NAME.add("锦欣"); - CN_FIRST_NAME.add("司辰"); - CN_FIRST_NAME.add("冬雪"); - CN_FIRST_NAME.add("弘益"); - CN_FIRST_NAME.add("凡灵"); - CN_FIRST_NAME.add("茹雪"); - CN_FIRST_NAME.add("弘盛"); - CN_FIRST_NAME.add("同济"); - CN_FIRST_NAME.add("子民"); - CN_FIRST_NAME.add("云露"); - CN_FIRST_NAME.add("辰钊"); - CN_FIRST_NAME.add("妍芳"); - CN_FIRST_NAME.add("文轩"); - CN_FIRST_NAME.add("真一"); - CN_FIRST_NAME.add("骊萍"); - CN_FIRST_NAME.add("静曼"); - CN_FIRST_NAME.add("海女"); - CN_FIRST_NAME.add("修洁"); - CN_FIRST_NAME.add("丰茂"); - CN_FIRST_NAME.add("雪瑶"); - CN_FIRST_NAME.add("娜兰"); - CN_FIRST_NAME.add("永怡"); - CN_FIRST_NAME.add("晏静"); - CN_FIRST_NAME.add("永思"); - CN_FIRST_NAME.add("恨之"); - CN_FIRST_NAME.add("姗姗"); - CN_FIRST_NAME.add("甘泽"); - CN_FIRST_NAME.add("宇文"); - CN_FIRST_NAME.add("智刚"); - CN_FIRST_NAME.add("弘图"); - CN_FIRST_NAME.add("嘉运"); - CN_FIRST_NAME.add("惠心"); - CN_FIRST_NAME.add("采珊"); - CN_FIRST_NAME.add("凝然"); - CN_FIRST_NAME.add("奇正"); - CN_FIRST_NAME.add("鸿煊"); - CN_FIRST_NAME.add("鸿光"); - CN_FIRST_NAME.add("修贤"); - CN_FIRST_NAME.add("水悦"); - CN_FIRST_NAME.add("竹雨"); - CN_FIRST_NAME.add("元菱"); - CN_FIRST_NAME.add("翠绿"); - CN_FIRST_NAME.add("善思"); - CN_FIRST_NAME.add("依霜"); - CN_FIRST_NAME.add("珺俐"); - CN_FIRST_NAME.add("春岚"); - CN_FIRST_NAME.add("蓓蕾"); - CN_FIRST_NAME.add("伟晔"); - CN_FIRST_NAME.add("雯君"); - CN_FIRST_NAME.add("恨云"); - CN_FIRST_NAME.add("勇锐"); - CN_FIRST_NAME.add("慕凝"); - CN_FIRST_NAME.add("晨璐"); - CN_FIRST_NAME.add("晓霜"); - CN_FIRST_NAME.add("鸿熙"); - CN_FIRST_NAME.add("靖柏"); - CN_FIRST_NAME.add("良俊"); - CN_FIRST_NAME.add("靖柔"); - CN_FIRST_NAME.add("辰铭"); - CN_FIRST_NAME.add("建章"); - CN_FIRST_NAME.add("沈雅"); - CN_FIRST_NAME.add("南莲"); - CN_FIRST_NAME.add("晓露"); - CN_FIRST_NAME.add("悠柔"); - CN_FIRST_NAME.add("仙仪"); - CN_FIRST_NAME.add("海秋"); - CN_FIRST_NAME.add("烨伟"); - CN_FIRST_NAME.add("千易"); - CN_FIRST_NAME.add("可儿"); - CN_FIRST_NAME.add("彭泽"); - CN_FIRST_NAME.add("英耀"); - CN_FIRST_NAME.add("易绿"); - CN_FIRST_NAME.add("浩宕"); - CN_FIRST_NAME.add("合乐"); - CN_FIRST_NAME.add("天佑"); - CN_FIRST_NAME.add("晨钰"); - CN_FIRST_NAME.add("饮月"); - CN_FIRST_NAME.add("问玉"); - CN_FIRST_NAME.add("姝好"); - CN_FIRST_NAME.add("绮山"); - CN_FIRST_NAME.add("慧俊"); - CN_FIRST_NAME.add("芳林"); - CN_FIRST_NAME.add("玮奇"); - CN_FIRST_NAME.add("勇男"); - CN_FIRST_NAME.add("品韵"); - CN_FIRST_NAME.add("静枫"); - CN_FIRST_NAME.add("锦诗"); - CN_FIRST_NAME.add("琇云"); - CN_FIRST_NAME.add("凝冬"); - CN_FIRST_NAME.add("冰真"); - CN_FIRST_NAME.add("明德"); - CN_FIRST_NAME.add("雅香"); - CN_FIRST_NAME.add("自怡"); - CN_FIRST_NAME.add("昌翰"); - CN_FIRST_NAME.add("秋寒"); - CN_FIRST_NAME.add("睿范"); - CN_FIRST_NAME.add("骊蓉"); - CN_FIRST_NAME.add("和平"); - CN_FIRST_NAME.add("从灵"); - CN_FIRST_NAME.add("滢渟"); - CN_FIRST_NAME.add("景同"); - CN_FIRST_NAME.add("鹏运"); - CN_FIRST_NAME.add("悦来"); - CN_FIRST_NAME.add("凡儿"); - CN_FIRST_NAME.add("山槐"); - CN_FIRST_NAME.add("兴平"); - CN_FIRST_NAME.add("承业"); - CN_FIRST_NAME.add("乐心"); - CN_FIRST_NAME.add("晗雨"); - CN_FIRST_NAME.add("半蕾"); - CN_FIRST_NAME.add("辰锟"); - CN_FIRST_NAME.add("智勇"); - CN_FIRST_NAME.add("滨海"); - CN_FIRST_NAME.add("颖慧"); - CN_FIRST_NAME.add("紫南"); - CN_FIRST_NAME.add("静柏"); - CN_FIRST_NAME.add("宏放"); - CN_FIRST_NAME.add("红旭"); - CN_FIRST_NAME.add("明志"); - CN_FIRST_NAME.add("曜曦"); - CN_FIRST_NAME.add("青梦"); - CN_FIRST_NAME.add("雅秀"); - CN_FIRST_NAME.add("如蓉"); - CN_FIRST_NAME.add("乐志"); - CN_FIRST_NAME.add("闲华"); - CN_FIRST_NAME.add("云韶"); - CN_FIRST_NAME.add("芷蝶"); - CN_FIRST_NAME.add("代丝"); - CN_FIRST_NAME.add("言文"); - CN_FIRST_NAME.add("兴庆"); - CN_FIRST_NAME.add("安易"); - CN_FIRST_NAME.add("真仪"); - CN_FIRST_NAME.add("君豪"); - CN_FIRST_NAME.add("彤云"); - CN_FIRST_NAME.add("珠玉"); - CN_FIRST_NAME.add("飞飙"); - CN_FIRST_NAME.add("宛菡"); - CN_FIRST_NAME.add("彭越"); - CN_FIRST_NAME.add("紫玉"); - CN_FIRST_NAME.add("流惠"); - CN_FIRST_NAME.add("安春"); - CN_FIRST_NAME.add("俊爽"); - CN_FIRST_NAME.add("欣艳"); - CN_FIRST_NAME.add("沈靖"); - CN_FIRST_NAME.add("建安"); - CN_FIRST_NAME.add("奇水"); - CN_FIRST_NAME.add("金玉"); - CN_FIRST_NAME.add("绿竹"); - CN_FIRST_NAME.add("乐怡"); - CN_FIRST_NAME.add("怀寒"); - CN_FIRST_NAME.add("沈静"); - CN_FIRST_NAME.add("英悟"); - CN_FIRST_NAME.add("冷雁"); - CN_FIRST_NAME.add("高寒"); - CN_FIRST_NAME.add("安晏"); - CN_FIRST_NAME.add("浓绮"); - CN_FIRST_NAME.add("盈秀"); - CN_FIRST_NAME.add("瑜蓓"); - CN_FIRST_NAME.add("以丹"); - CN_FIRST_NAME.add("运凡"); - CN_FIRST_NAME.add("傲白"); - CN_FIRST_NAME.add("姣妍"); - CN_FIRST_NAME.add("修为"); - CN_FIRST_NAME.add("运凯"); - CN_FIRST_NAME.add("竹韵"); - CN_FIRST_NAME.add("俊力"); - CN_FIRST_NAME.add("冷雪"); - CN_FIRST_NAME.add("醉山"); - CN_FIRST_NAME.add("星鹏"); - CN_FIRST_NAME.add("雅娴"); - CN_FIRST_NAME.add("丽芳"); - CN_FIRST_NAME.add("虹玉"); - CN_FIRST_NAME.add("力学"); - CN_FIRST_NAME.add("菀柳"); - CN_FIRST_NAME.add("天逸"); - CN_FIRST_NAME.add("囡囡"); - CN_FIRST_NAME.add("妙芙"); - CN_FIRST_NAME.add("骊文"); - CN_FIRST_NAME.add("新语"); - CN_FIRST_NAME.add("知睿"); - CN_FIRST_NAME.add("景铄"); - CN_FIRST_NAME.add("霞辉"); - CN_FIRST_NAME.add("宏旷"); - CN_FIRST_NAME.add("以云"); - CN_FIRST_NAME.add("才哲"); - CN_FIRST_NAME.add("华藏"); - CN_FIRST_NAME.add("君洁"); - CN_FIRST_NAME.add("滢滢"); - CN_FIRST_NAME.add("曦晨"); - CN_FIRST_NAME.add("冷霜"); - CN_FIRST_NAME.add("香芹"); - CN_FIRST_NAME.add("南蓉"); - CN_FIRST_NAME.add("浩岚"); - CN_FIRST_NAME.add("乐悦"); - CN_FIRST_NAME.add("星纬"); - CN_FIRST_NAME.add("彭丹"); - CN_FIRST_NAME.add("云飞"); - CN_FIRST_NAME.add("雅媚"); - CN_FIRST_NAME.add("姣姣"); - CN_FIRST_NAME.add("叶农"); - CN_FIRST_NAME.add("菊月"); - CN_FIRST_NAME.add("傲雪"); - CN_FIRST_NAME.add("温文"); - CN_FIRST_NAME.add("怀山"); - CN_FIRST_NAME.add("瑜敏"); - CN_FIRST_NAME.add("彭湃"); - CN_FIRST_NAME.add("紫琼"); - CN_FIRST_NAME.add("若芳"); - CN_FIRST_NAME.add("又青"); - CN_FIRST_NAME.add("心菱"); - CN_FIRST_NAME.add("英慧"); - CN_FIRST_NAME.add("和美"); - CN_FIRST_NAME.add("开宇"); - CN_FIRST_NAME.add("辰阳"); - CN_FIRST_NAME.add("尔阳"); - CN_FIRST_NAME.add("寄翠"); - CN_FIRST_NAME.add("从冬"); - CN_FIRST_NAME.add("慕卉"); - CN_FIRST_NAME.add("念巧"); - CN_FIRST_NAME.add("傲霜"); - CN_FIRST_NAME.add("曜栋"); - CN_FIRST_NAME.add("婉淑"); - CN_FIRST_NAME.add("君浩"); - CN_FIRST_NAME.add("思天"); - CN_FIRST_NAME.add("项明"); - CN_FIRST_NAME.add("金鑫"); - CN_FIRST_NAME.add("高岑"); - CN_FIRST_NAME.add("欣荣"); - CN_FIRST_NAME.add("文光"); - CN_FIRST_NAME.add("童童"); - CN_FIRST_NAME.add("云天"); - CN_FIRST_NAME.add("小雨"); - CN_FIRST_NAME.add("茂彦"); - CN_FIRST_NAME.add("乐意"); - CN_FIRST_NAME.add("嘉熙"); - CN_FIRST_NAME.add("若英"); - CN_FIRST_NAME.add("锐达"); - CN_FIRST_NAME.add("和志"); - CN_FIRST_NAME.add("华晖"); - CN_FIRST_NAME.add("从凝"); - CN_FIRST_NAME.add("逸明"); - CN_FIRST_NAME.add("鹏煊"); - CN_FIRST_NAME.add("兴德"); - CN_FIRST_NAME.add("燕珺"); - CN_FIRST_NAME.add("小雯"); - CN_FIRST_NAME.add("晶瑶"); - CN_FIRST_NAME.add("承载"); - CN_FIRST_NAME.add("烨烁"); - CN_FIRST_NAME.add("婉清"); - CN_FIRST_NAME.add("锐进"); - CN_FIRST_NAME.add("曲文"); - CN_FIRST_NAME.add("依风"); - CN_FIRST_NAME.add("白莲"); - CN_FIRST_NAME.add("弘壮"); - CN_FIRST_NAME.add("刚毅"); - CN_FIRST_NAME.add("元旋"); - CN_FIRST_NAME.add("子丹"); - CN_FIRST_NAME.add("尔白"); - CN_FIRST_NAME.add("芊丽"); - CN_FIRST_NAME.add("茂德"); - CN_FIRST_NAME.add("小霜"); - CN_FIRST_NAME.add("海宁"); - CN_FIRST_NAME.add("鸿卓"); - CN_FIRST_NAME.add("鸿博"); - CN_FIRST_NAME.add("韶阳"); - CN_FIRST_NAME.add("辰皓"); - CN_FIRST_NAME.add("波涛"); - CN_FIRST_NAME.add("修伟"); - CN_FIRST_NAME.add("贝晨"); - CN_FIRST_NAME.add("千柔"); - CN_FIRST_NAME.add("逸春"); - CN_FIRST_NAME.add("咏德"); - CN_FIRST_NAME.add("觅丹"); - CN_FIRST_NAME.add("高峯"); - CN_FIRST_NAME.add("弘大"); - CN_FIRST_NAME.add("歆美"); - CN_FIRST_NAME.add("兴怀"); - CN_FIRST_NAME.add("水芸"); - CN_FIRST_NAME.add("高峰"); - CN_FIRST_NAME.add("痴瑶"); - CN_FIRST_NAME.add("晟睿"); - CN_FIRST_NAME.add("南蕾"); - CN_FIRST_NAME.add("烨烨"); - CN_FIRST_NAME.add("雨雪"); - CN_FIRST_NAME.add("晓夏"); - CN_FIRST_NAME.add("访烟"); - CN_FIRST_NAME.add("微月"); - CN_FIRST_NAME.add("丹萱"); - CN_FIRST_NAME.add("千柳"); - CN_FIRST_NAME.add("密思"); - CN_FIRST_NAME.add("恺乐"); - CN_FIRST_NAME.add("阳波"); - CN_FIRST_NAME.add("婉丽"); - CN_FIRST_NAME.add("和怡"); - CN_FIRST_NAME.add("晏如"); - CN_FIRST_NAME.add("震博"); - CN_FIRST_NAME.add("元明"); - CN_FIRST_NAME.add("咏志"); - CN_FIRST_NAME.add("兴思"); - CN_FIRST_NAME.add("雨真"); - CN_FIRST_NAME.add("香莲"); - CN_FIRST_NAME.add("以轩"); - CN_FIRST_NAME.add("高峻"); - CN_FIRST_NAME.add("天元"); - CN_FIRST_NAME.add("阳泽"); - CN_FIRST_NAME.add("锐逸"); - CN_FIRST_NAME.add("尔雅"); - CN_FIRST_NAME.add("德明"); - CN_FIRST_NAME.add("承运"); - CN_FIRST_NAME.add("智鑫"); - CN_FIRST_NAME.add("德昌"); - CN_FIRST_NAME.add("玉龙"); - CN_FIRST_NAME.add("博敏"); - CN_FIRST_NAME.add("烨然"); - CN_FIRST_NAME.add("职君"); - CN_FIRST_NAME.add("飞驰"); - CN_FIRST_NAME.add("俊友"); - CN_FIRST_NAME.add("晴画"); - CN_FIRST_NAME.add("夏瑶"); - CN_FIRST_NAME.add("允晨"); - CN_FIRST_NAME.add("笑阳"); - CN_FIRST_NAME.add("雅宁"); - CN_FIRST_NAME.add("俊发"); - CN_FIRST_NAME.add("沛白"); - CN_FIRST_NAME.add("惜芹"); - CN_FIRST_NAME.add("诗丹"); - CN_FIRST_NAME.add("夏璇"); - CN_FIRST_NAME.add("冰夏"); - CN_FIRST_NAME.add("红螺"); - CN_FIRST_NAME.add("迎南"); - CN_FIRST_NAME.add("白萱"); - CN_FIRST_NAME.add("子亦"); - CN_FIRST_NAME.add("新洁"); - CN_FIRST_NAME.add("学民"); - CN_FIRST_NAME.add("沙雨"); - CN_FIRST_NAME.add("湛恩"); - CN_FIRST_NAME.add("妙菡"); - CN_FIRST_NAME.add("宏朗"); - CN_FIRST_NAME.add("咏思"); - CN_FIRST_NAME.add("运升"); - CN_FIRST_NAME.add("博文"); - CN_FIRST_NAME.add("香菱"); - CN_FIRST_NAME.add("英才"); - CN_FIRST_NAME.add("涵瑶"); - CN_FIRST_NAME.add("安柏"); - CN_FIRST_NAME.add("情文"); - CN_FIRST_NAME.add("运华"); - CN_FIRST_NAME.add("醉巧"); - CN_FIRST_NAME.add("华月"); - CN_FIRST_NAME.add("访儿"); - CN_FIRST_NAME.add("谷芹"); - CN_FIRST_NAME.add("秋巧"); - CN_FIRST_NAME.add("雅安"); - CN_FIRST_NAME.add("春绿"); - CN_FIRST_NAME.add("烨煜"); - CN_FIRST_NAME.add("觅云"); - CN_FIRST_NAME.add("丝柳"); - CN_FIRST_NAME.add("信然"); - CN_FIRST_NAME.add("梓玥"); - CN_FIRST_NAME.add("尔真"); - CN_FIRST_NAME.add("采白"); - CN_FIRST_NAME.add("经艺"); - CN_FIRST_NAME.add("静槐"); - CN_FIRST_NAME.add("雅容"); - CN_FIRST_NAME.add("梦兰"); - CN_FIRST_NAME.add("君丽"); - CN_FIRST_NAME.add("蕴和"); - CN_FIRST_NAME.add("淑然"); - CN_FIRST_NAME.add("和悌"); - CN_FIRST_NAME.add("俊名"); - CN_FIRST_NAME.add("琛丽"); - CN_FIRST_NAME.add("和悦"); - CN_FIRST_NAME.add("思娜"); - CN_FIRST_NAME.add("望慕"); - CN_FIRST_NAME.add("鹤轩"); - CN_FIRST_NAME.add("凝珍"); - CN_FIRST_NAME.add("君之"); - CN_FIRST_NAME.add("梓珊"); - CN_FIRST_NAME.add("刚豪"); - CN_FIRST_NAME.add("语诗"); - CN_FIRST_NAME.add("曼蔓"); - CN_FIRST_NAME.add("暄玲"); - CN_FIRST_NAME.add("修远"); - CN_FIRST_NAME.add("善芳"); - CN_FIRST_NAME.add("夜卉"); - CN_FIRST_NAME.add("香萱"); - CN_FIRST_NAME.add("夜南"); - CN_FIRST_NAME.add("如曼"); - CN_FIRST_NAME.add("淑兰"); - CN_FIRST_NAME.add("馥芬"); - CN_FIRST_NAME.add("玉怡"); - CN_FIRST_NAME.add("烨熠"); - CN_FIRST_NAME.add("施诗"); - CN_FIRST_NAME.add("沛雯"); - CN_FIRST_NAME.add("若菱"); - CN_FIRST_NAME.add("睿敏"); - CN_FIRST_NAME.add("雅寒"); - CN_FIRST_NAME.add("秀美"); - CN_FIRST_NAME.add("雁山"); - CN_FIRST_NAME.add("依秋"); - CN_FIRST_NAME.add("彦灵"); - CN_FIRST_NAME.add("乐成"); - CN_FIRST_NAME.add("婉仪"); - CN_FIRST_NAME.add("水荷"); - CN_FIRST_NAME.add("泰河"); - CN_FIRST_NAME.add("飞章"); - CN_FIRST_NAME.add("访冬"); - CN_FIRST_NAME.add("冰香"); - CN_FIRST_NAME.add("睿文"); - CN_FIRST_NAME.add("夜玉"); - CN_FIRST_NAME.add("嘉勋"); - CN_FIRST_NAME.add("可可"); - CN_FIRST_NAME.add("和惬"); - CN_FIRST_NAME.add("凯凯"); - CN_FIRST_NAME.add("运珊"); - CN_FIRST_NAME.add("冠宇"); - CN_FIRST_NAME.add("光明"); - CN_FIRST_NAME.add("翰翮"); - CN_FIRST_NAME.add("笑雯"); - CN_FIRST_NAME.add("巧绿"); - CN_FIRST_NAME.add("博易"); - CN_FIRST_NAME.add("梓琬"); - CN_FIRST_NAME.add("南晴"); - CN_FIRST_NAME.add("梦凡"); - CN_FIRST_NAME.add("代灵"); - CN_FIRST_NAME.add("姮娥"); - CN_FIRST_NAME.add("凝琴"); - CN_FIRST_NAME.add("博明"); - CN_FIRST_NAME.add("娅静"); - CN_FIRST_NAME.add("凡双"); - CN_FIRST_NAME.add("宜春"); - CN_FIRST_NAME.add("运珧"); - CN_FIRST_NAME.add("曼文"); - CN_FIRST_NAME.add("长莹"); - CN_FIRST_NAME.add("桂帆"); - CN_FIRST_NAME.add("德曜"); - CN_FIRST_NAME.add("昊苍"); - CN_FIRST_NAME.add("运发"); - CN_FIRST_NAME.add("子轩"); - CN_FIRST_NAME.add("康时"); - CN_FIRST_NAME.add("雨石"); - CN_FIRST_NAME.add("毅然"); - CN_FIRST_NAME.add("英范"); - CN_FIRST_NAME.add("芮欢"); - CN_FIRST_NAME.add("芮欣"); - CN_FIRST_NAME.add("辰韦"); - CN_FIRST_NAME.add("明艳"); - CN_FIRST_NAME.add("昊英"); - CN_FIRST_NAME.add("理全"); - CN_FIRST_NAME.add("刚洁"); - CN_FIRST_NAME.add("长菁"); - CN_FIRST_NAME.add("振宇"); - CN_FIRST_NAME.add("平乐"); - CN_FIRST_NAME.add("安梦"); - CN_FIRST_NAME.add("立群"); - CN_FIRST_NAME.add("如松"); - CN_FIRST_NAME.add("运珹"); - CN_FIRST_NAME.add("绮彤"); - CN_FIRST_NAME.add("浩广"); - CN_FIRST_NAME.add("涵畅"); - CN_FIRST_NAME.add("忆敏"); - CN_FIRST_NAME.add("恬然"); - CN_FIRST_NAME.add("又夏"); - CN_FIRST_NAME.add("梓瑶"); - CN_FIRST_NAME.add("菲菲"); - CN_FIRST_NAME.add("梓璐"); - CN_FIRST_NAME.add("银瑶"); - CN_FIRST_NAME.add("春翠"); - CN_FIRST_NAME.add("望舒"); - CN_FIRST_NAME.add("德本"); - CN_FIRST_NAME.add("思嫒"); - CN_FIRST_NAME.add("乐芸"); - CN_FIRST_NAME.add("睿明"); - CN_FIRST_NAME.add("俊哲"); - CN_FIRST_NAME.add("腾逸"); - CN_FIRST_NAME.add("子辰"); - CN_FIRST_NAME.add("绮美"); - CN_FIRST_NAME.add("妍晨"); - CN_FIRST_NAME.add("音韵"); - CN_FIRST_NAME.add("半梅"); - CN_FIRST_NAME.add("佳美"); - CN_FIRST_NAME.add("昌茂"); - CN_FIRST_NAME.add("飞宇"); - CN_FIRST_NAME.add("鸿哲"); - CN_FIRST_NAME.add("兴腾"); - CN_FIRST_NAME.add("喜悦"); - CN_FIRST_NAME.add("问雁"); - CN_FIRST_NAME.add("暄和"); - CN_FIRST_NAME.add("如柏"); - CN_FIRST_NAME.add("斯乔"); - CN_FIRST_NAME.add("忆文"); - CN_FIRST_NAME.add("谷菱"); - CN_FIRST_NAME.add("赞怡"); - CN_FIRST_NAME.add("凌雪"); - CN_FIRST_NAME.add("子濯"); - CN_FIRST_NAME.add("新之"); - CN_FIRST_NAME.add("元蝶"); - CN_FIRST_NAME.add("泽语"); - CN_FIRST_NAME.add("白薇"); - CN_FIRST_NAME.add("含海"); - CN_FIRST_NAME.add("晓骞"); - CN_FIRST_NAME.add("馨荣"); - CN_FIRST_NAME.add("乐英"); - CN_FIRST_NAME.add("嘉玉"); - CN_FIRST_NAME.add("念念"); - CN_FIRST_NAME.add("文华"); - CN_FIRST_NAME.add("阳云"); - CN_FIRST_NAME.add("樱花"); - CN_FIRST_NAME.add("承允"); - CN_FIRST_NAME.add("苑杰"); - CN_FIRST_NAME.add("奇伟"); - CN_FIRST_NAME.add("从珊"); - CN_FIRST_NAME.add("翠芙"); - CN_FIRST_NAME.add("同光"); - CN_FIRST_NAME.add("泽民"); - CN_FIRST_NAME.add("惜萍"); - CN_FIRST_NAME.add("元枫"); - CN_FIRST_NAME.add("宛曼"); - CN_FIRST_NAME.add("彬炳"); - CN_FIRST_NAME.add("野雪"); - CN_FIRST_NAME.add("隽巧"); - CN_FIRST_NAME.add("彬郁"); - CN_FIRST_NAME.add("叶吉"); - CN_FIRST_NAME.add("惜萱"); - CN_FIRST_NAME.add("柔谨"); - CN_FIRST_NAME.add("凌霜"); - CN_FIRST_NAME.add("学海"); - CN_FIRST_NAME.add("孟乐"); - CN_FIRST_NAME.add("又香"); - CN_FIRST_NAME.add("绮怀"); - CN_FIRST_NAME.add("绮思"); - CN_FIRST_NAME.add("依童"); - CN_FIRST_NAME.add("丽文"); - CN_FIRST_NAME.add("今瑶"); - CN_FIRST_NAME.add("三诗"); - CN_FIRST_NAME.add("飞尘"); - CN_FIRST_NAME.add("雅素"); - CN_FIRST_NAME.add("小夏"); - CN_FIRST_NAME.add("嘉珍"); - CN_FIRST_NAME.add("怀绿"); - CN_FIRST_NAME.add("侠骞"); - CN_FIRST_NAME.add("智阳"); - CN_FIRST_NAME.add("俊喆"); - CN_FIRST_NAME.add("鸿畅"); - CN_FIRST_NAME.add("秋彤"); - CN_FIRST_NAME.add("晴雪"); - CN_FIRST_NAME.add("修然"); - CN_FIRST_NAME.add("佳思"); - CN_FIRST_NAME.add("成弘"); - CN_FIRST_NAME.add("珠雨"); - CN_FIRST_NAME.add("鸿畴"); - CN_FIRST_NAME.add("梅雪"); - CN_FIRST_NAME.add("幻丝"); - CN_FIRST_NAME.add("锐利"); - CN_FIRST_NAME.add("凌青"); - CN_FIRST_NAME.add("紫雪"); - CN_FIRST_NAME.add("涵阳"); - CN_FIRST_NAME.add("琼诗"); - CN_FIRST_NAME.add("若蕊"); - CN_FIRST_NAME.add("怜容"); - CN_FIRST_NAME.add("水蓉"); - CN_FIRST_NAME.add("泰清"); - CN_FIRST_NAME.add("赞悦"); - CN_FIRST_NAME.add("元柳"); - CN_FIRST_NAME.add("香薇"); - CN_FIRST_NAME.add("松雪"); - CN_FIRST_NAME.add("水蓝"); - CN_FIRST_NAME.add("艳卉"); - CN_FIRST_NAME.add("晴霞"); - CN_FIRST_NAME.add("兰芝"); - CN_FIRST_NAME.add("松雨"); - CN_FIRST_NAME.add("幼丝"); - CN_FIRST_NAME.add("运锋"); - CN_FIRST_NAME.add("乐荷"); - CN_FIRST_NAME.add("思宸"); - CN_FIRST_NAME.add("悦欣"); - CN_FIRST_NAME.add("尔风"); - CN_FIRST_NAME.add("星腾"); - CN_FIRST_NAME.add("雪风"); - CN_FIRST_NAME.add("白易"); - CN_FIRST_NAME.add("语海"); - CN_FIRST_NAME.add("会欣"); - CN_FIRST_NAME.add("香旋"); - CN_FIRST_NAME.add("筠溪"); - CN_FIRST_NAME.add("兰芳"); - CN_FIRST_NAME.add("盼雁"); - CN_FIRST_NAME.add("阳伯"); - CN_FIRST_NAME.add("天华"); - CN_FIRST_NAME.add("若薇"); - CN_FIRST_NAME.add("荷珠"); - CN_FIRST_NAME.add("妙旋"); - CN_FIRST_NAME.add("翠茵"); - CN_FIRST_NAME.add("孤丹"); - CN_FIRST_NAME.add("书意"); - CN_FIRST_NAME.add("梅青"); - CN_FIRST_NAME.add("晓筠"); - CN_FIRST_NAME.add("珺琦"); - CN_FIRST_NAME.add("莺语"); - CN_FIRST_NAME.add("晶霞"); - CN_FIRST_NAME.add("梦华"); - CN_FIRST_NAME.add("晨风"); - CN_FIRST_NAME.add("良吉"); - CN_FIRST_NAME.add("奇迈"); - CN_FIRST_NAME.add("烨华"); - CN_FIRST_NAME.add("忻忻"); - CN_FIRST_NAME.add("斯伯"); - CN_FIRST_NAME.add("以冬"); - CN_FIRST_NAME.add("北辰"); - CN_FIRST_NAME.add("文君"); - CN_FIRST_NAME.add("令燕"); - CN_FIRST_NAME.add("秋翠"); - CN_FIRST_NAME.add("芸欣"); - CN_FIRST_NAME.add("正平"); - CN_FIRST_NAME.add("珺琪"); - CN_FIRST_NAME.add("兰若"); - CN_FIRST_NAME.add("嘉瑞"); - CN_FIRST_NAME.add("闵雨"); - CN_FIRST_NAME.add("骏桀"); - CN_FIRST_NAME.add("成龙"); - CN_FIRST_NAME.add("韵磬"); - CN_FIRST_NAME.add("建弼"); - CN_FIRST_NAME.add("含之"); - CN_FIRST_NAME.add("怡宁"); - CN_FIRST_NAME.add("兰英"); - CN_FIRST_NAME.add("天玉"); - CN_FIRST_NAME.add("淼淼"); - CN_FIRST_NAME.add("盼盼"); - CN_FIRST_NAME.add("淑华"); - CN_FIRST_NAME.add("竹筱"); - CN_FIRST_NAME.add("谷蓝"); - CN_FIRST_NAME.add("慧君"); - CN_FIRST_NAME.add("翠荷"); - CN_FIRST_NAME.add("佳悦"); - CN_FIRST_NAME.add("茂才"); - CN_FIRST_NAME.add("水蕊"); - CN_FIRST_NAME.add("虹雨"); - CN_FIRST_NAME.add("灵慧"); - CN_FIRST_NAME.add("柔洁"); - CN_FIRST_NAME.add("泽洋"); - CN_FIRST_NAME.add("阳辉"); - CN_FIRST_NAME.add("孤云"); - CN_FIRST_NAME.add("妙春"); - CN_FIRST_NAME.add("秀慧"); - CN_FIRST_NAME.add("学义"); - CN_FIRST_NAME.add("玉成"); - CN_FIRST_NAME.add("梦玉"); - CN_FIRST_NAME.add("夏雪"); - CN_FIRST_NAME.add("湛芳"); - CN_FIRST_NAME.add("闲静"); - CN_FIRST_NAME.add("文瑞"); - CN_FIRST_NAME.add("香春"); - CN_FIRST_NAME.add("语丝"); - CN_FIRST_NAME.add("文瑶"); - CN_FIRST_NAME.add("初之"); - CN_FIRST_NAME.add("佳惠"); - CN_FIRST_NAME.add("华楚"); - CN_FIRST_NAME.add("书慧"); - CN_FIRST_NAME.add("若星"); - CN_FIRST_NAME.add("坚诚"); - CN_FIRST_NAME.add("含云"); - CN_FIRST_NAME.add("半槐"); - CN_FIRST_NAME.add("信厚"); - CN_FIRST_NAME.add("冰安"); - CN_FIRST_NAME.add("愉心"); - CN_FIRST_NAME.add("浩思"); - CN_FIRST_NAME.add("奇逸"); - CN_FIRST_NAME.add("宣朗"); - CN_FIRST_NAME.add("惜蕊"); - CN_FIRST_NAME.add("谷蕊"); - CN_FIRST_NAME.add("芮波"); - CN_FIRST_NAME.add("幼仪"); - CN_FIRST_NAME.add("听云"); - CN_FIRST_NAME.add("妙晴"); - CN_FIRST_NAME.add("可嘉"); - CN_FIRST_NAME.add("力强"); - CN_FIRST_NAME.add("建德"); - CN_FIRST_NAME.add("长文"); - CN_FIRST_NAME.add("湛英"); - CN_FIRST_NAME.add("夏真"); - CN_FIRST_NAME.add("敏学"); - CN_FIRST_NAME.add("凝阳"); - CN_FIRST_NAME.add("忆曼"); - CN_FIRST_NAME.add("碧莹"); - CN_FIRST_NAME.add("思山"); + /** + * 生成随机昵称 + * + * @return + */ + public static String getNick() { + String head = CN_ADJECTIVE[(int) (Math.random() * CN_ADJECTIVE.length)]; + String tail = CN_NOUN[(int) (Math.random() * CN_NOUN.length)]; + return head + tail; } } diff --git a/bus-core/src/main/java/org/aoju/bus/core/toolkit/NetKit.java b/bus-core/src/main/java/org/aoju/bus/core/toolkit/NetKit.java index 30d3826b71..e6697d1980 100755 --- a/bus-core/src/main/java/org/aoju/bus/core/toolkit/NetKit.java +++ b/bus-core/src/main/java/org/aoju/bus/core/toolkit/NetKit.java @@ -501,7 +501,7 @@ public static LinkedHashSet localAddressList(Filter ad * * @return 本机网卡IP地址, 获取失败返回null */ - public static String getLocalhostStr() { + public static String getLocalhostString() { InetAddress localhost = getLocalhost(); if (null != localhost) { return localhost.getHostAddress(); diff --git a/bus-core/src/main/java/org/aoju/bus/core/toolkit/ObjectKit.java b/bus-core/src/main/java/org/aoju/bus/core/toolkit/ObjectKit.java index 12c5db7805..338d61f5e6 100755 --- a/bus-core/src/main/java/org/aoju/bus/core/toolkit/ObjectKit.java +++ b/bus-core/src/main/java/org/aoju/bus/core/toolkit/ObjectKit.java @@ -29,7 +29,7 @@ import org.aoju.bus.core.compare.PinyinCompare; import org.aoju.bus.core.convert.Convert; import org.aoju.bus.core.exception.InstrumentException; -import org.aoju.bus.core.io.streams.FastByteOutputStream; +import org.aoju.bus.core.io.stream.FastByteOutputStream; import org.aoju.bus.core.lang.Assert; import org.aoju.bus.core.lang.Normal; import org.aoju.bus.core.lang.Symbol; @@ -53,11 +53,11 @@ public class ObjectKit { /** * 检查对象是否为null * - * @param obj 对象 + * @param object 对象 * @return 是否为null */ - public static boolean isNull(Object obj) { - return null == obj || obj.equals(null); + public static boolean isNull(Object object) { + return null == object || object.equals(null); } /** @@ -67,11 +67,11 @@ public static boolean isNull(Object obj) { * 2. not equals(null) * * - * @param obj 对象 + * @param object 对象 * @return 是否为非null */ - public static boolean isNotNull(Object obj) { - return null != obj && false == obj.equals(null); + public static boolean isNotNull(Object object) { + return null != object && false == object.equals(null); } /** @@ -365,26 +365,26 @@ public static boolean notEqual(Object obj1, Object obj2) { * 集合类调用其size函数, 数组调用其length属性, * 其他可遍历对象遍历计算长度 * - * @param obj 被计算长度的对象 + * @param object 被计算长度的对象 * @return 长度 */ - public static int length(Object obj) { - if (null == obj) { + public static int length(Object object) { + if (null == object) { return 0; } - if (obj instanceof CharSequence) { - return ((CharSequence) obj).length(); + if (object instanceof CharSequence) { + return ((CharSequence) object).length(); } - if (obj instanceof Collection) { - return ((Collection) obj).size(); + if (object instanceof Collection) { + return ((Collection) object).size(); } - if (obj instanceof Map) { - return ((Map) obj).size(); + if (object instanceof Map) { + return ((Map) object).size(); } int count; - if (obj instanceof Iterator) { - Iterator iter = (Iterator) obj; + if (object instanceof Iterator) { + Iterator iter = (Iterator) object; count = 0; while (iter.hasNext()) { count++; @@ -392,8 +392,8 @@ public static int length(Object obj) { } return count; } - if (obj instanceof Enumeration) { - Enumeration enumeration = (Enumeration) obj; + if (object instanceof Enumeration) { + Enumeration enumeration = (Enumeration) object; count = 0; while (enumeration.hasMoreElements()) { count++; @@ -401,8 +401,8 @@ public static int length(Object obj) { } return count; } - if (obj.getClass().isArray() == true) { - return Array.getLength(obj); + if (object.getClass().isArray() == true) { + return Array.getLength(object); } return -1; } @@ -410,29 +410,29 @@ public static int length(Object obj) { /** * 对象中是否包含元素 * - * @param obj 对象 + * @param object 对象 * @param element 元素 * @return 是否包含 */ - public static boolean contains(Object obj, Object element) { - if (null == obj) { + public static boolean contains(Object object, Object element) { + if (null == object) { return false; } - if (obj instanceof String) { + if (object instanceof String) { if (null == element) { return false; } - return ((String) obj).contains(element.toString()); + return ((String) object).contains(element.toString()); } - if (obj instanceof Collection) { - return ((Collection) obj).contains(element); + if (object instanceof Collection) { + return ((Collection) object).contains(element); } - if (obj instanceof Map) { - return ((Map) obj).containsValue(element); + if (object instanceof Map) { + return ((Map) object).containsValue(element); } - if (obj instanceof Iterator) { - Iterator iter = (Iterator) obj; + if (object instanceof Iterator) { + Iterator iter = (Iterator) object; while (iter.hasNext()) { Object o = iter.next(); if (equal(o, element)) { @@ -441,8 +441,8 @@ public static boolean contains(Object obj, Object element) { } return false; } - if (obj instanceof Enumeration) { - Enumeration enumeration = (Enumeration) obj; + if (object instanceof Enumeration) { + Enumeration enumeration = (Enumeration) object; while (enumeration.hasMoreElements()) { Object o = enumeration.nextElement(); if (equal(o, element)) { @@ -451,10 +451,10 @@ public static boolean contains(Object obj, Object element) { } return false; } - if (obj.getClass().isArray() == true) { - int len = Array.getLength(obj); + if (object.getClass().isArray() == true) { + int len = Array.getLength(object); for (int i = 0; i < len; i++) { - Object o = Array.get(obj, i); + Object o = Array.get(object, i); if (equal(o, element)) { return true; } @@ -470,16 +470,16 @@ public static boolean contains(Object obj, Object element) { * 否则返回null * * @param 对象类型 - * @param obj 被克隆对象 + * @param object 被克隆对象 * @return 克隆后的对象 */ - public static T clone(T obj) { - T result = ArrayKit.clone(obj); + public static T clone(T object) { + T result = ArrayKit.clone(object); if (null == result) { - if (obj instanceof Cloneable) { - result = ReflectKit.invoke(obj, "clone", new Object[]{}); + if (object instanceof Cloneable) { + result = ReflectKit.invoke(object, "clone", new Object[]{}); } else { - result = cloneByStream(obj); + result = cloneByStream(object); } } return result; @@ -493,18 +493,18 @@ public static T clone(T obj) { * 2、调用Convert.toString(Object)转换 * * - * @param obj Bean对象 + * @param object Bean对象 * @return Bean所有字段转为Map后的字符串 */ - public static String toString(Object obj) { - if (null == obj) { + public static String toString(Object object) { + if (null == object) { return Normal.NULL; } - if (obj instanceof Map) { - return obj.toString(); + if (object instanceof Map) { + return object.toString(); } - return Convert.toString(obj); + return Convert.toString(object); } /** @@ -512,19 +512,19 @@ public static String toString(Object obj) { * 对象必须实现Serializable接口 * * @param 对象类型 - * @param obj 被克隆对象 + * @param object 被克隆对象 * @return 克隆后的对象 * @throws InstrumentException IO异常和ClassNotFoundException封装 */ - public static T cloneByStream(T obj) { - if (null == obj || false == (obj instanceof Serializable)) { + public static T cloneByStream(T object) { + if (null == object || false == (object instanceof Serializable)) { return null; } final FastByteOutputStream byteOut = new FastByteOutputStream(); - ObjectOutputStream out = null; + ObjectOutputStream out; try { out = new ObjectOutputStream(byteOut); - out.writeObject(obj); + out.writeObject(object); out.flush(); final ObjectInputStream in = new ObjectInputStream(new ByteArrayInputStream(byteOut.toByteArray())); return (T) in.readObject(); @@ -732,14 +732,14 @@ public static Field[] getAllFields(Object object) { /** * 将对象进行序列化 * - * @param obj 对象 + * @param object 对象 * @return 对象序列化后的数据 */ - public static byte[] toByte(Object obj) { + public static byte[] toByte(Object object) { try { java.io.ByteArrayOutputStream byteOut = new java.io.ByteArrayOutputStream(); ObjectOutputStream objOut = new ObjectOutputStream(byteOut); - objOut.writeObject(obj); + objOut.writeObject(object); return byteOut.toByteArray(); } catch (Exception e) { throw new InstrumentException(e); @@ -797,7 +797,7 @@ public static Class getClassByName(String classAllName) { */ public static T initObject(Class clazz, Map attrMap) { try { - T obj = clazz.newInstance(); + T object = clazz.newInstance(); if (null != attrMap) { // 移除所有的常量赋值 for (Class tempClass = clazz; !tempClass.equals(Object.class); tempClass = tempClass.getSuperclass()) { @@ -812,10 +812,10 @@ public static T initObject(Class clazz, Map attrMap) { } // 开始赋值 for (String attrName : attrMap.keySet()) { - setAttribute(obj, attrName, attrMap.get(attrName)); + setAttribute(object, attrName, attrMap.get(attrName)); } } - return obj; + return object; } catch (Exception e) { throw new InstrumentException(e); } @@ -824,18 +824,18 @@ public static T initObject(Class clazz, Map attrMap) { /** * 给对象的属性赋值 * - * @param obj 对象 + * @param object 对象 * @param attrName 对象的属性名 * @param value 对象的属性值 */ - public static void setAttribute(Object obj, String attrName, Object value) { + public static void setAttribute(Object object, String attrName, Object value) { try { - Class clazz = obj.getClass(); + Class clazz = object.getClass(); while (!clazz.equals(Object.class)) { try { Field f = clazz.getDeclaredField(attrName); f.setAccessible(true); - f.set(obj, value); + f.set(object, value); f.setAccessible(false); return; } catch (NoSuchFieldException e) { @@ -850,18 +850,18 @@ public static void setAttribute(Object obj, String attrName, Object value) { /** * 从对象中取值 * - * @param obj 对象 + * @param object 对象 * @param attrName 要取值的属性名 * @return 值 */ - public static Object getAttributeValue(Object obj, String attrName) { + public static Object getAttributeValue(Object object, String attrName) { try { - Class clazz = obj.getClass(); + Class clazz = object.getClass(); while (!clazz.equals(Object.class)) { try { Field f = clazz.getDeclaredField(attrName); f.setAccessible(true); - Object value = f.get(obj); + Object value = f.get(object); f.setAccessible(false); return value; } catch (NoSuchFieldException e) { @@ -1086,7 +1086,7 @@ public static Class getGeneric(Class clazz) { * @param bts 字节数据 * @return 对象 */ - public static T parseByteForObj(byte[] bts) { + public static T parseByteForObject(byte[] bts) { ByteArrayInputStream input = new ByteArrayInputStream(bts); ObjectInputStream objectInput = null; try { @@ -1111,15 +1111,15 @@ public static T parseByteForObj(byte[] bts) { /** * 将对象转换为byte数据 * - * @param obj 对象 + * @param object 对象 * @return byte数据 */ - public static byte[] parseObjForByte(Object obj) { + public static byte[] parseObjForByte(Object object) { java.io.ByteArrayOutputStream byteOut = new java.io.ByteArrayOutputStream(); ObjectOutputStream objOut = null; try { objOut = new ObjectOutputStream(byteOut); - objOut.writeObject(obj); + objOut.writeObject(object); return byteOut.toByteArray(); } catch (IOException e) { throw new InstrumentException(e); @@ -1255,7 +1255,7 @@ public static T CloneObject(T bean) { * @param baseData 基本数据 * @param newData 新数据 */ - public static void insertObj(Object baseData, Object newData) { + public static void insertObject(Object baseData, Object newData) { try { if (null == baseData || null == newData) { return; @@ -1287,7 +1287,7 @@ public static void cleanInitValue(T bean) { } try { Class clazz = bean.getClass(); - Object obj = clazz.newInstance(); + Object object = clazz.newInstance(); for (; !clazz.equals(Object.class); clazz = clazz.getSuperclass()) { Field[] fs = clazz.getDeclaredFields(); for (Field f : fs) { @@ -1295,7 +1295,7 @@ public static void cleanInitValue(T bean) { continue; } f.setAccessible(true); - Object initValue = f.get(obj); + Object initValue = f.get(object); Object oldValue = f.get(bean); if (null != initValue && initValue.equals(oldValue)) { f.set(bean, null); @@ -1527,15 +1527,15 @@ public static Object[] toObjectArray(Object source) { * 对象必须实现Serializable接口 * * @param 对象类型 - * @param obj 要被序列化的对象 + * @param object 要被序列化的对象 * @return 序列化后的字节码 */ - public static byte[] serialize(T obj) { - if (false == (obj instanceof Serializable)) { + public static byte[] serialize(T object) { + if (false == (object instanceof Serializable)) { return null; } final FastByteOutputStream byteOut = new FastByteOutputStream(); - IoKit.writeObjects(byteOut, false, (Serializable) obj); + IoKit.writeObjects(byteOut, false, (Serializable) object); return byteOut.toByteArray(); } @@ -1548,7 +1548,7 @@ public static byte[] serialize(T obj) { * @return 反序列化后的对象 */ public static T deserialize(byte[] bytes) { - return IoKit.readObj(new ByteArrayInputStream(bytes)); + return IoKit.readObject(new ByteArrayInputStream(bytes)); } } diff --git a/bus-core/src/main/java/org/aoju/bus/core/toolkit/PatternKit.java b/bus-core/src/main/java/org/aoju/bus/core/toolkit/PatternKit.java index dc7c378f04..0508baf1ca 100755 --- a/bus-core/src/main/java/org/aoju/bus/core/toolkit/PatternKit.java +++ b/bus-core/src/main/java/org/aoju/bus/core/toolkit/PatternKit.java @@ -239,18 +239,35 @@ public static List getAllGroups(Pattern pattern, CharSequence content) { * @return 匹配后得到的字符串数组,按照分组顺序依次列出,未匹配到返回空列表,任何一个参数为null返回null */ public static List getAllGroups(Pattern pattern, CharSequence content, boolean withGroup0) { + return getAllGroups(pattern, content, withGroup0, false); + } + + /** + * 获得匹配的字符串匹配到的所有分组 + * + * @param pattern 编译后的正则模式 + * @param content 被匹配的内容 + * @param withGroup0 是否包括分组0,此分组表示全匹配的信息 + * @param findAll 是否查找所有匹配到的内容,{@code false}表示只读取第一个匹配到的内容 + * @return 匹配后得到的字符串数组,按照分组顺序依次列出,未匹配到返回空列表,任何一个参数为null返回null + */ + public static List getAllGroups(Pattern pattern, CharSequence content, boolean withGroup0, boolean findAll) { if (null == content || null == pattern) { return null; } List result = new ArrayList<>(); final Matcher matcher = pattern.matcher(content); - if (matcher.find()) { + while (matcher.find()) { final int startGroup = withGroup0 ? 0 : 1; final int groupCount = matcher.groupCount(); for (int i = startGroup; i <= groupCount; i++) { result.add(matcher.group(i)); } + + if (false == findAll) { + break; + } } return result; } @@ -1044,17 +1061,17 @@ public int hashCode() { } @Override - public boolean equals(Object obj) { - if (this == obj) { + public boolean equals(Object object) { + if (this == object) { return true; } - if (null == obj) { + if (null == object) { return false; } - if (getClass() != obj.getClass()) { + if (getClass() != object.getClass()) { return false; } - RegexWithFlag other = (RegexWithFlag) obj; + RegexWithFlag other = (RegexWithFlag) object; if (flag != other.flag) { return false; } diff --git a/bus-core/src/main/java/org/aoju/bus/core/toolkit/ReflectKit.java b/bus-core/src/main/java/org/aoju/bus/core/toolkit/ReflectKit.java index 39b90fc814..35a70fb9c4 100755 --- a/bus-core/src/main/java/org/aoju/bus/core/toolkit/ReflectKit.java +++ b/bus-core/src/main/java/org/aoju/bus/core/toolkit/ReflectKit.java @@ -64,12 +64,11 @@ public class ReflectKit { * 调用Getter方法. * 支持多级,如:对象名.对象名.方法 * - * @param obj 对象 - * @param name 属性名 + * @param object 对象 + * @param name 属性名 * @return the object */ - public static Object invokeGetter(Object obj, String name) { - Object object = obj; + public static Object invokeGetter(Object object, String name) { for (String method : StringKit.splitToArray(name, Symbol.DOT)) { String getterMethodName = Normal.GET + StringKit.capitalize(method); object = invokeMethod(object, getterMethodName, new Class[]{}, new Object[]{}); @@ -81,12 +80,11 @@ public static Object invokeGetter(Object obj, String name) { * 调用Setter方法, 仅匹配方法名 * 支持多级,如:对象名.对象名.方法 * - * @param obj 对象 - * @param name 属性名 - * @param value 值 + * @param object 对象 + * @param name 属性名 + * @param value 值 */ - public static void invokeSetter(Object obj, String name, Object value) { - Object object = obj; + public static void invokeSetter(Object object, String name, Object value) { String[] names = StringKit.splitToArray(name, Symbol.DOT); for (int i = 0; i < names.length; i++) { if (i < names.length - 1) { @@ -99,9 +97,9 @@ public static void invokeSetter(Object obj, String name, Object value) { } } - public static Object convert(Object obj, Class type) { - if (obj instanceof Number) { - Number number = (Number) obj; + public static Object convert(Object object, Class type) { + if (object instanceof Number) { + Number number = (Number) object; if (type.equals(byte.class) || type.equals(Byte.class)) { return number.byteValue(); } @@ -122,9 +120,9 @@ public static Object convert(Object obj, Class type) { } } if (type.equals(String.class)) { - return null == obj ? Normal.EMPTY : obj.toString(); + return null == object ? Normal.EMPTY : object.toString(); } - return obj; + return object; } public static Object invokeMethod(Method method, Object target) { @@ -144,21 +142,21 @@ public static Object invokeMethod(Method method, Object target, Object... args) * 用于一次性调用的情况,否则应使用getAccessibleMethod()函数获得Method后反复调用. * 同时匹配方法名+参数类型, * - * @param obj 对象 - * @param name 方法名 - * @param types 参数类型 - * @param args 参数 + * @param object 对象 + * @param name 方法名 + * @param types 参数类型 + * @param args 参数 * @return the object */ - public static Object invokeMethod(final Object obj, final String name, final Class[] types, + public static Object invokeMethod(final Object object, final String name, final Class[] types, final Object[] args) { - Method method = getAccessibleMethod(obj, name, types); + Method method = getAccessibleMethod(object, name, types); if (null == method) { - throw new IllegalArgumentException("Could not find method [" + method + "] on target [" + obj + "]"); + throw new IllegalArgumentException("Could not find method [" + method + "] on target [" + object + "]"); } try { - return method.invoke(obj, args); + return method.invoke(object, args); } catch (Exception e) { throw convertReflectionExceptionToUnchecked(e); } @@ -169,19 +167,19 @@ public static Object invokeMethod(final Object obj, final String name, final Cla * 用于一次性调用的情况,否则应使用getAccessibleMethodByName()函数获得Method后反复调用. * 只匹配函数名,如果有多个同名函数调用第一个 * - * @param obj 对象 - * @param name 方法 - * @param args 参数 + * @param object 对象 + * @param name 方法 + * @param args 参数 * @return the object */ - public static Object invokeMethodByName(final Object obj, final String name, final Object[] args) { - Method method = getAccessibleMethodByName(obj, name); + public static Object invokeMethodByName(final Object object, final String name, final Object[] args) { + Method method = getAccessibleMethodByName(object, name); if (null == method) { - throw new IllegalArgumentException("Could not find method [" + name + "] on target [" + obj + "]"); + throw new IllegalArgumentException("Could not find method [" + name + "] on target [" + object + "]"); } try { - return method.invoke(obj, args); + return method.invoke(object, args); } catch (Exception e) { throw convertReflectionExceptionToUnchecked(e); } @@ -192,12 +190,12 @@ public static Object invokeMethodByName(final Object obj, final String name, fin *

    * 如向上转型到Object仍无法找到, 返回null. * - * @param obj 对象 - * @param name 列名 + * @param object 对象 + * @param name 列名 * @return the object */ - public static Field getAccessibleField(final Object obj, final String name) { - for (Class superClass = obj.getClass(); superClass != Object.class; superClass = superClass.getSuperclass()) { + public static Field getAccessibleField(final Object object, final String name) { + for (Class superClass = object.getClass(); superClass != Object.class; superClass = superClass.getSuperclass()) { try { Field field = superClass.getDeclaredField(name); makeAccessible(field); @@ -215,16 +213,17 @@ public static Field getAccessibleField(final Object obj, final String name) { * 如向上转型到Object仍无法找到, 返回null. * 匹配函数名+参数类型 *

    - * 用于方法需要被多次调用的情况. 先使用本函数先取得Method,然后调用Method.invoke(Object obj, Object... args) + * 用于方法需要被多次调用的情况. 先使用本函数先取得Method,然后调用Method.invoke(Object object, Object... args) * - * @param obj 对象 - * @param name 方法名 - * @param types 参数类型 + * @param object 对象 + * @param name 方法名 + * @param types 参数类型 * @return the object */ - public static Method getAccessibleMethod(final Object obj, final String name, + public static Method getAccessibleMethod(final Object object, + final String name, final Class... types) { - for (Class searchType = obj.getClass(); searchType != Object.class; searchType = searchType.getSuperclass()) { + for (Class searchType = object.getClass(); searchType != Object.class; searchType = searchType.getSuperclass()) { try { Method method = searchType.getDeclaredMethod(name, types); makeAccessible(method); @@ -242,14 +241,15 @@ public static Method getAccessibleMethod(final Object obj, final String name, * 如向上转型到Object仍无法找到, 返回null. * 只匹配函数名 *

    - * 用于方法需要被多次调用的情况. 先使用本函数先取得Method,然后调用Method.invoke(Object obj, Object... args) + * 用于方法需要被多次调用的情况. 先使用本函数先取得Method,然后调用Method.invoke(Object object, Object... args) * - * @param obj 对象 - * @param name 方法名 + * @param object 对象 + * @param name 方法名 * @return the object */ - public static Method getAccessibleMethodByName(final Object obj, final String name) { - for (Class searchType = obj.getClass(); searchType != Object.class; searchType = searchType.getSuperclass()) { + public static Method getAccessibleMethodByName(final Object object, + final String name) { + for (Class searchType = object.getClass(); searchType != Object.class; searchType = searchType.getSuperclass()) { Method[] methods = searchType.getDeclaredMethods(); for (Method method : methods) { if (method.getName().equals(name)) { @@ -357,13 +357,13 @@ public static RuntimeException convertReflectionExceptionToUnchecked(Exception e /** * 判断某个对象是否拥有某个属性 * - * @param obj 对象 + * @param object 对象 * @param fieldName 属性名 * @return 有属性返回true * 无属性返回false */ - public static boolean hasField(final Object obj, final String fieldName) { - Field field = getAccessibleField(obj, fieldName); + public static boolean hasField(final Object object, final String fieldName) { + Field field = getAccessibleField(object, fieldName); return null != field; } @@ -514,39 +514,39 @@ public static String getFieldName(Field field) { /** * 获取字段值 * - * @param obj 对象 + * @param object 对象 * @param fieldName 字段名 * @return 字段值 * @throws InstrumentException 包装IllegalAccessException异常 */ - public static Object getFieldValue(Object obj, String fieldName) throws InstrumentException { - if (null == obj || StringKit.isBlank(fieldName)) { + public static Object getFieldValue(Object object, String fieldName) throws InstrumentException { + if (null == object || StringKit.isBlank(fieldName)) { return null; } - return getFieldValue(obj, getField(obj instanceof Class ? (Class) obj : obj.getClass(), fieldName)); + return getFieldValue(object, getField(object instanceof Class ? (Class) object : object.getClass(), fieldName)); } /** * 获取字段值 * - * @param obj 对象 - * @param field 字段 + * @param object 对象 + * @param field 字段 * @return 字段值 * @throws InstrumentException 包装IllegalAccessException异常 */ - public static Object getFieldValue(Object obj, Field field) throws InstrumentException { + public static Object getFieldValue(Object object, Field field) throws InstrumentException { if (null == field) { return null; } - if (obj instanceof Class) { + if (object instanceof Class) { // 静态字段获取时对象为null - obj = null; + object = null; } setAccessible(field); Object result; try { - result = field.get(obj); + result = field.get(object); } catch (IllegalAccessException e) { throw new InstrumentException("IllegalAccess for {}.{}", field.getDeclaringClass(), field.getName()); } @@ -556,16 +556,16 @@ public static Object getFieldValue(Object obj, Field field) throws InstrumentExc /** * 获取所有字段的值 * - * @param obj bean对象,如果是static字段,此处为类class + * @param object bean对象,如果是static字段,此处为类class * @return 字段值数组 */ - public static Object[] getFieldsValue(Object obj) { - if (null != obj) { - final Field[] fields = getFields(obj instanceof Class ? (Class) obj : obj.getClass()); + public static Object[] getFieldsValue(Object object) { + if (null != object) { + final Field[] fields = getFields(object instanceof Class ? (Class) object : object.getClass()); if (null != fields) { final Object[] values = new Object[fields.length]; for (int i = 0; i < fields.length; i++) { - values[i] = getFieldValue(obj, fields[i]); + values[i] = getFieldValue(object, fields[i]); } return values; } @@ -576,30 +576,30 @@ public static Object[] getFieldsValue(Object obj) { /** * 设置字段值 * - * @param obj 对象,static字段则此处传Class + * @param object 对象,static字段则此处传Class * @param fieldName 字段名 * @param value 值,值类型必须与字段类型匹配,不会自动转换对象类型 * @throws InstrumentException 包装IllegalAccessException异常 */ - public static void setFieldValue(Object obj, String fieldName, Object value) throws InstrumentException { - Assert.notNull(obj); + public static void setFieldValue(Object object, String fieldName, Object value) throws InstrumentException { + Assert.notNull(object); Assert.notBlank(fieldName); - final Field field = getField((obj instanceof Class) ? (Class) obj : obj.getClass(), fieldName); - Assert.notNull(field, "Field [{}] is not exist in [{}]", fieldName, obj.getClass().getName()); - setFieldValue(obj, field, value); + final Field field = getField((object instanceof Class) ? (Class) object : object.getClass(), fieldName); + Assert.notNull(field, "Field [{}] is not exist in [{}]", fieldName, object.getClass().getName()); + setFieldValue(object, field, value); } /** * 设置字段值 * - * @param obj 对象,如果是static字段,此参数为null - * @param field 字段 - * @param value 值,值类型必须与字段类型匹配,不会自动转换对象类型 + * @param object 对象,如果是static字段,此参数为null + * @param field 字段 + * @param value 值,值类型必须与字段类型匹配,不会自动转换对象类型 * @throws InstrumentException UtilException 包装IllegalAccessException异常 */ - public static void setFieldValue(Object obj, Field field, Object value) throws InstrumentException { - Assert.notNull(field, "Field in [{}] not exist !", obj); + public static void setFieldValue(Object object, Field field, Object value) throws InstrumentException { + Assert.notNull(field, "Field in [{}] not exist !", object); final Class fieldType = field.getType(); if (null != value) { @@ -617,26 +617,26 @@ public static void setFieldValue(Object obj, Field field, Object value) throws I setAccessible(field); try { - field.set(obj instanceof Class ? null : obj, value); + field.set(object instanceof Class ? null : object, value); } catch (IllegalAccessException e) { - throw new InstrumentException("IllegalAccess for {}.{}", obj, field.getName()); + throw new InstrumentException("IllegalAccess for {}.{}", object, field.getName()); } } /** * 查找指定对象中的所有方法(包括非public方法),也包括父对象和Object类的方法 * - * @param obj 被查找的对象,如果为{@code null}返回{@code null} + * @param object 被查找的对象,如果为{@code null}返回{@code null} * @param methodName 方法名,如果为空字符串返回{@code null} * @param args 参数 * @return 方法 * @throws SecurityException 无访问权限抛出异常 */ - public static Method getMethodOfObj(Object obj, String methodName, Object... args) throws SecurityException { - if (null == obj || StringKit.isBlank(methodName)) { + public static Method getMethodOfObject(Object object, String methodName, Object... args) throws SecurityException { + if (null == object || StringKit.isBlank(methodName)) { return null; } - return getMethod(obj.getClass(), methodName, ClassKit.getClasses(args)); + return getMethod(object.getClass(), methodName, ClassKit.getClasses(args)); } /** @@ -918,22 +918,26 @@ public static T newInstance(String clazz) throws InstrumentException { */ public static T newInstance(Class clazz, Object... params) throws InstrumentException { if (ArrayKit.isEmpty(params)) { + final Constructor constructor = getConstructor(clazz); + if (null == constructor) { + throw new InstrumentException("No constructor for [{}]", clazz); + } try { - return clazz.newInstance(); - } catch (InstantiationException | IllegalAccessException e) { - throw new InstrumentException(StringKit.format("Instance class [{}] error!", clazz), e); + return constructor.newInstance(); + } catch (Exception e) { + throw new InstrumentException(e, "Instance class [{}] error!", clazz); } } final Class[] paramTypes = ClassKit.getClasses(params); - final Constructor constructor = getConstructor(clazz, paramTypes); + final Constructor constructor = getConstructor(clazz, paramTypes); if (null == constructor) { - throw new InstrumentException("No Constructor matched for parameter types: [" + new Object[]{paramTypes} + "]"); + throw new InstrumentException("No Constructor matched for parameter types: [{}]", new Object[]{paramTypes}); } try { - return getConstructor(clazz, paramTypes).newInstance(params); + return constructor.newInstance(params); } catch (Exception e) { - throw new InstrumentException(StringKit.format("Instance class [{}] error!", clazz), e); + throw new InstrumentException(e, "Instance class [{}] error!", clazz); } } @@ -1017,13 +1021,13 @@ public static T invokeStatic(Method method, Object... args) throws Instrumen * * * @param 返回对象类型 - * @param obj 对象,如果执行静态方法,此值为null + * @param object 对象,如果执行静态方法,此值为null * @param method 方法(对象方法或static方法都可) * @param args 参数对象 * @return 结果 * @throws InstrumentException 一些列异常的包装 */ - public static T invokeWithCheck(Object obj, Method method, Object... args) throws InstrumentException { + public static T invokeWithCheck(Object object, Method method, Object... args) throws InstrumentException { final Class[] types = method.getParameterTypes(); if (null != types && null != args) { Assert.isTrue(args.length == types.length, "Params length [{}] is not fit for param length [{}] of method !", args.length, types.length); @@ -1036,19 +1040,19 @@ public static T invokeWithCheck(Object obj, Method method, Object... args) t } } } - return invoke(obj, method, args); + return invoke(object, method, args); } /** * 执行方法 * * @param 返回对象类型 - * @param obj 对象,如果执行静态方法,此值为null + * @param object 对象,如果执行静态方法,此值为null * @param method 方法(对象方法或static方法都可) * @param args 参数对象 * @return 结果 */ - public static T invoke(Object obj, Method method, Object... args) { + public static T invoke(Object object, Method method, Object... args) { setAccessible(method); // 检查用户传入参数: @@ -1076,7 +1080,7 @@ public static T invoke(Object obj, Method method, Object... args) { } try { - return (T) method.invoke(ClassKit.isStatic(method) ? null : obj, actualArgs); + return (T) method.invoke(ClassKit.isStatic(method) ? null : object, actualArgs); } catch (Exception e) { throw new InstrumentException(e); } @@ -1086,17 +1090,17 @@ public static T invoke(Object obj, Method method, Object... args) { * 执行对象中指定方法 * * @param 返回对象类型 - * @param obj 方法所在对象 + * @param object 方法所在对象 * @param methodName 方法名 * @param args 参数列表 * @return 执行结果 */ - public static T invoke(Object obj, String methodName, Object... args) { - final Method method = getMethodOfObj(obj, methodName, args); + public static T invoke(Object object, String methodName, Object... args) { + final Method method = getMethodOfObject(object, methodName, args); if (null == method) { throw new InstrumentException(StringKit.format("No such method: [{}]", methodName)); } - return invoke(obj, method, args); + return invoke(object, method, args); } /** diff --git a/bus-core/src/main/java/org/aoju/bus/core/toolkit/RuntimeKit.java b/bus-core/src/main/java/org/aoju/bus/core/toolkit/RuntimeKit.java index b826ec182a..c831ffaa8d 100755 --- a/bus-core/src/main/java/org/aoju/bus/core/toolkit/RuntimeKit.java +++ b/bus-core/src/main/java/org/aoju/bus/core/toolkit/RuntimeKit.java @@ -26,7 +26,7 @@ package org.aoju.bus.core.toolkit; import org.aoju.bus.core.exception.InstrumentException; -import org.aoju.bus.core.io.streams.FastByteOutputStream; +import org.aoju.bus.core.io.stream.FastByteOutputStream; import org.aoju.bus.core.lang.Charset; import org.aoju.bus.core.lang.Normal; import org.aoju.bus.core.lang.Symbol; @@ -59,8 +59,8 @@ public class RuntimeKit { * @return 执行结果 * @throws InstrumentException IO异常 */ - public static String execForStr(String... cmds) throws InstrumentException { - return execForStr(Charset.systemCharset(), cmds); + public static String execForString(String... cmds) throws InstrumentException { + return execForString(Charset.systemCharset(), cmds); } /** @@ -71,7 +71,7 @@ public static String execForStr(String... cmds) throws InstrumentException { * @return 执行结果 * @throws InstrumentException 内部处理异常 */ - public static String execForStr(java.nio.charset.Charset charset, String... cmds) throws InstrumentException { + public static String execForString(java.nio.charset.Charset charset, String... cmds) throws InstrumentException { return getResult(exec(cmds), charset); } diff --git a/bus-core/src/main/java/org/aoju/bus/core/toolkit/StringKit.java b/bus-core/src/main/java/org/aoju/bus/core/toolkit/StringKit.java index c926fc0ba7..d0bacbd5af 100755 --- a/bus-core/src/main/java/org/aoju/bus/core/toolkit/StringKit.java +++ b/bus-core/src/main/java/org/aoju/bus/core/toolkit/StringKit.java @@ -53,14 +53,14 @@ public class StringKit extends CharsKit { * 2、为不可见字符(如空格) * 3、"" * - * @param obj 对象 + * @param object 对象 * @return 如果为字符串是否为空串 */ - public static boolean isBlank(Object obj) { - if (null == obj) { + public static boolean isBlank(Object object) { + if (null == object) { return true; - } else if (obj instanceof CharSequence) { - return CharsKit.isBlank((CharSequence) obj); + } else if (object instanceof CharSequence) { + return CharsKit.isBlank((CharSequence) object); } return false; } @@ -107,14 +107,14 @@ public static String trimToEmpty(final String text) { * 1、为null * 2、为"" * - * @param obj 对象 + * @param object 对象 * @return 如果为字符串是否为空串 */ - public static boolean emptyIfString(Object obj) { - if (null == obj) { + public static boolean emptyIfString(Object object) { + if (null == object) { return true; - } else if (obj instanceof CharSequence) { - return 0 == ((CharSequence) obj).length(); + } else if (object instanceof CharSequence) { + return 0 == ((CharSequence) object).length(); } return false; } @@ -141,11 +141,11 @@ public static boolean areNotEmpty(String... values) { * 1、Byte数组和ByteBuffer会被转换为对应字符串的数组 * 2、对象数组会调用Arrays.toString方法 * - * @param obj 对象 + * @param object 对象 * @return 字符串 */ - public static String toString(Object obj) { - return toString(obj, Charset.UTF_8); + public static String toString(Object object) { + return toString(object, Charset.UTF_8); } /** @@ -153,12 +153,12 @@ public static String toString(Object obj) { * 1、Byte数组和ByteBuffer会被转换为对应字符串的数组 * 2、对象数组会调用Arrays.toString方法 * - * @param obj 对象 + * @param object 对象 * @param charset 字符集 * @return 字符串 */ - public static String toString(Object obj, String charset) { - return toString(obj, java.nio.charset.Charset.forName(charset)); + public static String toString(Object object, String charset) { + return toString(object, java.nio.charset.Charset.forName(charset)); } /** @@ -182,28 +182,28 @@ public static String toString(final String text, final String defaultStr) { * 将对象转为字符串 * 1、Byte数组和ByteBuffer会被转换为对应字符串的数组 2、对象数组会调用Arrays.toString方法 * - * @param obj 对象 + * @param object 对象 * @param charset 字符集 * @return 字符串 */ - public static String toString(Object obj, java.nio.charset.Charset charset) { - if (ObjectKit.isEmpty(obj)) { + public static String toString(Object object, java.nio.charset.Charset charset) { + if (ObjectKit.isEmpty(object)) { return null; } - if (obj instanceof String) { - return (String) obj; - } else if (obj instanceof byte[]) { - return toString((byte[]) obj, charset); - } else if (obj instanceof Byte[]) { - return toString((Byte[]) obj, charset); - } else if (obj instanceof ByteBuffer) { - return toString((ByteBuffer) obj, charset); - } else if (ArrayKit.isArray(obj)) { - return ArrayKit.toString(obj); + if (object instanceof String) { + return (String) object; + } else if (object instanceof byte[]) { + return toString((byte[]) object, charset); + } else if (object instanceof Byte[]) { + return toString((Byte[]) object, charset); + } else if (object instanceof ByteBuffer) { + return toString((ByteBuffer) object, charset); + } else if (ArrayKit.isArray(object)) { + return ArrayKit.toString(object); } - return obj.toString(); + return object.toString(); } /** @@ -348,11 +348,11 @@ public static String toString(Class[] parameterTypes) { /** * 调用对象的toString方法,null会返回{@code null} * - * @param obj 对象 + * @param object 对象 * @return 字符串 or {@code null} */ - public static String toStringOrNull(Object obj) { - return null == obj ? null : obj.toString(); + public static String toStringOrNull(Object object) { + return null == object ? null : object.toString(); } /** diff --git a/bus-core/src/main/java/org/aoju/bus/core/toolkit/SwingKit.java b/bus-core/src/main/java/org/aoju/bus/core/toolkit/SwingKit.java index ab598adff6..2c65cbd234 100755 --- a/bus-core/src/main/java/org/aoju/bus/core/toolkit/SwingKit.java +++ b/bus-core/src/main/java/org/aoju/bus/core/toolkit/SwingKit.java @@ -157,7 +157,7 @@ public static void keyClick(int... keyCodes) { * @param text 字符串 */ public static void keyPressString(String text) { - setStr(text); + setString(text); keyPressWithCtrl(KeyEvent.VK_V);// 粘贴 delay(); } @@ -401,7 +401,7 @@ public static Object get(Transferable content, DataFlavor flavor) { * * @return 文本 */ - public static String getStr() { + public static String getString() { return (String) get(DataFlavor.stringFlavor); } @@ -410,7 +410,7 @@ public static String getStr() { * * @param text 字符串文本 */ - public static void setStr(String text) { + public static void setString(String text) { set(new StringSelection(text)); } @@ -420,7 +420,7 @@ public static void setStr(String text) { * @param content 内容 * @return 文本 */ - public static String getStr(Transferable content) { + public static String getString(Transferable content) { return (String) get(content, DataFlavor.stringFlavor); } diff --git a/bus-core/src/main/java/org/aoju/bus/core/toolkit/TextKit.java b/bus-core/src/main/java/org/aoju/bus/core/toolkit/TextKit.java index a7fc6b14fc..fcbc95b7db 100755 --- a/bus-core/src/main/java/org/aoju/bus/core/toolkit/TextKit.java +++ b/bus-core/src/main/java/org/aoju/bus/core/toolkit/TextKit.java @@ -216,11 +216,11 @@ private static String longestCommonSubstring(String strA, String strB) { /** * 追加对象,对象会被转换为字符串 * - * @param obj 对象 + * @param object 对象 * @return this */ - public TextKit append(Object obj) { - return insert(this.position, obj); + public TextKit append(Object object) { + return insert(this.position, object); } /** @@ -272,15 +272,15 @@ public TextKit append(CharSequence csq, int start, int end) { /** * 追加对象,对象会被转换为字符串 * - * @param index 位置 - * @param obj 对象 + * @param index 位置 + * @param object 对象 * @return this */ - public TextKit insert(int index, Object obj) { - if (obj instanceof CharSequence) { - return insert(index, (CharSequence) obj); + public TextKit insert(int index, Object object) { + if (object instanceof CharSequence) { + return insert(index, (CharSequence) object); } - return insert(index, Convert.toString(obj)); + return insert(index, Convert.toString(object)); } /** diff --git a/bus-core/src/main/java/org/aoju/bus/core/toolkit/ThreadKit.java b/bus-core/src/main/java/org/aoju/bus/core/toolkit/ThreadKit.java index c79f9afaae..2a22ab12a3 100755 --- a/bus-core/src/main/java/org/aoju/bus/core/toolkit/ThreadKit.java +++ b/bus-core/src/main/java/org/aoju/bus/core/toolkit/ThreadKit.java @@ -606,12 +606,12 @@ public static ThreadFactory newNamedThreadFactory(String prefix, ThreadGroup thr /** * 阻塞当前线程,保证在main方法中执行不被退出 * - * @param obj 对象所在线程 + * @param object 对象所在线程 */ - public static void sync(Object obj) { - synchronized (obj) { + public static void sync(Object object) { + synchronized (object) { try { - obj.wait(); + object.wait(); } catch (InterruptedException e) { Console.error(e.getMessage()); } diff --git a/bus-core/src/main/java/org/aoju/bus/core/toolkit/UriKit.java b/bus-core/src/main/java/org/aoju/bus/core/toolkit/UriKit.java index 5a3e4e4cf8..00bf980706 100755 --- a/bus-core/src/main/java/org/aoju/bus/core/toolkit/UriKit.java +++ b/bus-core/src/main/java/org/aoju/bus/core/toolkit/UriKit.java @@ -32,7 +32,6 @@ import java.io.*; import java.net.*; -import java.nio.charset.StandardCharsets; import java.util.*; import java.util.jar.JarFile; @@ -913,7 +912,7 @@ public static Map encodeUriVariables(Map uriVariables String key = entry.getKey(); Object value = entry.getValue(); String stringValue = (null != value ? value.toString() : Normal.EMPTY); - result.put(key, encode(stringValue, StandardCharsets.UTF_8)); + result.put(key, encode(stringValue, Charset.UTF_8)); } return result; } @@ -1256,7 +1255,7 @@ public static String decodeMap(Map paramMap, java.nio.charset.Charset * @return 参数Map */ public static Map decodeVal(String params, String charset) { - final Map> paramsMap = decodeObj(params, charset); + final Map> paramsMap = decodeObject(params, charset); final Map result = MapKit.newHashMap(paramsMap.size()); List list; for (Map.Entry> entry : paramsMap.entrySet()) { @@ -1273,7 +1272,7 @@ public static Map decodeVal(String params, String charset) { * @param charset 字符集 * @return 参数Map */ - public static Map> decodeObj(String params, String charset) { + public static Map> decodeObject(String params, String charset) { if (StringKit.isBlank(params)) { return Collections.emptyMap(); } @@ -1566,7 +1565,7 @@ public UriKit setPath(Path path) { * * @return 路径,例如/aa/bb/cc */ - public String getPathStr() { + public String getPathString() { return null == this.path ? Symbol.SLASH : this.path.build(charset); } @@ -1630,7 +1629,7 @@ public UriKit setQuery(Query query) { * * @return 查询语句,例如a=1&b=2 */ - public String getQueryStr() { + public String getQueryString() { return null == this.query ? null : this.query.build(this.charset); } @@ -1733,10 +1732,10 @@ public URL toURL(URLStreamHandler handler) { final StringBuilder fileBuilder = new StringBuilder(); // path - fileBuilder.append(StringKit.blankToDefault(getPathStr(), Symbol.SLASH)); + fileBuilder.append(StringKit.blankToDefault(getPathString(), Symbol.SLASH)); // query - final String query = getQueryStr(); + final String query = getQueryString(); if (StringKit.isNotBlank(query)) { fileBuilder.append(Symbol.C_QUESTION_MARK).append(query); } @@ -1763,8 +1762,8 @@ public URI toURI() { return new URI( getSchemeWithDefault(), getAuthority(), - getPathStr(), - getQueryStr(), + getPathString(), + getQueryString(), getFragmentEncoded()); } catch (URISyntaxException e) { return null; diff --git a/bus-core/src/main/java/org/aoju/bus/core/toolkit/WatchKit.java b/bus-core/src/main/java/org/aoju/bus/core/toolkit/WatchKit.java index 052ca2db47..efbab43953 100755 --- a/bus-core/src/main/java/org/aoju/bus/core/toolkit/WatchKit.java +++ b/bus-core/src/main/java/org/aoju/bus/core/toolkit/WatchKit.java @@ -25,8 +25,8 @@ ********************************************************************************/ package org.aoju.bus.core.toolkit; -import org.aoju.bus.core.io.watchers.WatchMonitor; -import org.aoju.bus.core.io.watchers.Watcher; +import org.aoju.bus.core.io.watcher.WatchMonitor; +import org.aoju.bus.core.io.watcher.Watcher; import java.io.File; import java.net.URI; diff --git a/bus-core/src/main/java/org/aoju/bus/core/toolkit/ZipKit.java b/bus-core/src/main/java/org/aoju/bus/core/toolkit/ZipKit.java index e5d03608ab..d118438caf 100755 --- a/bus-core/src/main/java/org/aoju/bus/core/toolkit/ZipKit.java +++ b/bus-core/src/main/java/org/aoju/bus/core/toolkit/ZipKit.java @@ -38,6 +38,7 @@ import java.nio.file.FileSystem; import java.nio.file.*; import java.util.ArrayList; +import java.util.Enumeration; import java.util.HashMap; import java.util.List; import java.util.function.Consumer; @@ -486,15 +487,38 @@ public static File unzip(File zipFile, File outFile, java.nio.charset.Charset ch * @throws InstrumentException IO异常 */ public static File unzip(ZipFile zipFile, File outFile) { + return unzip(zipFile, outFile, -1); + } + + /** + * 限制解压后文件大小 + * + * @param zipFile zip文件,附带编码信息,使用完毕自动关闭 + * @param outFile 解压到的目录 + * @param limit 限制解压文件大小(单位B) + * @return 解压的目录 + */ + public static File unzip(ZipFile zipFile, File outFile, long limit) { if (outFile.exists() && outFile.isFile()) { throw new IllegalArgumentException( StringKit.format("Target path [{}] exist!", outFile.getAbsolutePath())); } + if (limit > 0) { + final Enumeration zipEntries = zipFile.entries(); + long zipFileSize = 0L; + while (zipEntries.hasMoreElements()) { + ZipEntry zipEntry = zipEntries.nextElement(); + zipFileSize += zipEntry.getSize(); + if (zipFileSize > limit) { + throw new IllegalArgumentException("The file size exceeds the limit"); + } + } + } + try (final ZipReader reader = new ZipReader(zipFile)) { reader.readTo(outFile); } - return outFile; } diff --git a/bus-cron/pom.xml b/bus-cron/pom.xml index d846591a42..f64e8cbdb1 100755 --- a/bus-cron/pom.xml +++ b/bus-cron/pom.xml @@ -6,7 +6,7 @@ org.aoju bus-cron - 6.5.3 + 6.5.5 jar ${project.artifactId} diff --git a/bus-cron/src/main/java/org/aoju/bus/cron/factory/InvokeTask.java b/bus-cron/src/main/java/org/aoju/bus/cron/factory/InvokeTask.java index 446e496b07..d5f9fd0442 100644 --- a/bus-cron/src/main/java/org/aoju/bus/cron/factory/InvokeTask.java +++ b/bus-cron/src/main/java/org/aoju/bus/cron/factory/InvokeTask.java @@ -43,7 +43,7 @@ */ public class InvokeTask implements Task { - private final Object obj; + private final Object object; private final Method method; /** @@ -69,7 +69,7 @@ public InvokeTask(String classNameWithMethodName) { if (null == clazz) { throw new IllegalArgumentException("Load class with name of [" + className + "] fail !"); } - this.obj = ReflectKit.newInstanceIfPossible(clazz); + this.object = ReflectKit.newInstanceIfPossible(clazz); // 方法 final String methodName = classNameWithMethodName.substring(splitIndex + 1); @@ -85,7 +85,7 @@ public InvokeTask(String classNameWithMethodName) { @Override public void execute() { try { - ReflectKit.invoke(this.obj, this.method); + ReflectKit.invoke(this.object, this.method); } catch (CrontabException e) { throw new CrontabException(e.getCause()); } diff --git a/bus-cron/src/main/java/org/aoju/bus/cron/pattern/CronBuilder.java b/bus-cron/src/main/java/org/aoju/bus/cron/pattern/CronBuilder.java index bd76f5b5c9..1b1d6e61c1 100644 --- a/bus-cron/src/main/java/org/aoju/bus/cron/pattern/CronBuilder.java +++ b/bus-cron/src/main/java/org/aoju/bus/cron/pattern/CronBuilder.java @@ -64,7 +64,7 @@ public CronBuilder setValues(Part part, int... values) { for (int value : values) { part.checkValue(value); } - return set(part, ArrayKit.join(values, ",")); + return set(part, ArrayKit.join(Symbol.COMMA, values)); } /** diff --git a/bus-cron/src/main/java/org/aoju/bus/cron/pattern/parser/PartParser.java b/bus-cron/src/main/java/org/aoju/bus/cron/pattern/parser/PartParser.java index a3bb35f900..809b4a48db 100644 --- a/bus-cron/src/main/java/org/aoju/bus/cron/pattern/parser/PartParser.java +++ b/bus-cron/src/main/java/org/aoju/bus/cron/pattern/parser/PartParser.java @@ -84,7 +84,7 @@ public static PartParser of(Part part) { * @param value 被检查的值 * @return 是否为全匹配符 */ - private static boolean isMatchAllStr(String value) { + private static boolean isMatchAllString(String value) { return (1 == value.length()) && ("*".equals(value) || "?".equals(value)); } @@ -101,7 +101,7 @@ private static boolean isMatchAllStr(String value) { * @return {@link PartMatcher} */ public PartMatcher parse(String value) { - if (isMatchAllStr(value)) { + if (isMatchAllString(value)) { //兼容Quartz的"?"表达式,不会出现互斥情况,与"*"作用相同 return new AlwaysTrueMatcher(); } @@ -194,7 +194,7 @@ private List parseRange(String value, int step) { if (value.length() <= 2) { //根据步进的第一个数字确定起始时间,类似于 12/3则从12(秒、分等)开始 int minValue = part.getMin(); - if (false == isMatchAllStr(value)) { + if (false == isMatchAllString(value)) { minValue = Math.max(minValue, parseNumber(value)); } else { //在全匹配模式下,如果步进不存在,表示步进为1 diff --git a/bus-crypto/pom.xml b/bus-crypto/pom.xml index 9025ae65bf..559ea1a720 100755 --- a/bus-crypto/pom.xml +++ b/bus-crypto/pom.xml @@ -6,7 +6,7 @@ org.aoju bus-crypto - 6.5.3 + 6.5.5 jar ${project.artifactId} @@ -57,6 +57,12 @@ ${bouncycastle.version} true + + org.bouncycastle + bcpkix-jdk15on + ${bouncycastle.version} + true + diff --git a/bus-crypto/src/main/java/org/aoju/bus/crypto/Builder.java b/bus-crypto/src/main/java/org/aoju/bus/crypto/Builder.java index 53116651e3..0aab679ff8 100644 --- a/bus-crypto/src/main/java/org/aoju/bus/crypto/Builder.java +++ b/bus-crypto/src/main/java/org/aoju/bus/crypto/Builder.java @@ -28,7 +28,7 @@ import org.aoju.bus.core.codec.Base64; import org.aoju.bus.core.exception.CryptoException; import org.aoju.bus.core.instance.Instances; -import org.aoju.bus.core.io.streams.FastByteOutputStream; +import org.aoju.bus.core.io.stream.FastByteOutputStream; import org.aoju.bus.core.lang.*; import org.aoju.bus.core.toolkit.*; import org.aoju.bus.crypto.asymmetric.RSA; @@ -47,6 +47,7 @@ import org.bouncycastle.asn1.x509.SubjectPublicKeyInfo; import org.bouncycastle.asn1.x9.X9ECParameters; import org.bouncycastle.asn1.x9.X9ObjectIdentifiers; +import org.bouncycastle.cert.X509CertificateHolder; import org.bouncycastle.crypto.digests.SM3Digest; import org.bouncycastle.crypto.params.AsymmetricKeyParameter; import org.bouncycastle.crypto.params.ECDomainParameters; @@ -63,6 +64,15 @@ import org.bouncycastle.jce.spec.ECParameterSpec; import org.bouncycastle.math.ec.ECCurve; import org.bouncycastle.math.ec.FixedPointCombMultiplier; +import org.bouncycastle.openssl.*; +import org.bouncycastle.openssl.jcajce.JcaPEMKeyConverter; +import org.bouncycastle.openssl.jcajce.JceOpenSSLPKCS8DecryptorProviderBuilder; +import org.bouncycastle.openssl.jcajce.JcePEMDecryptorProviderBuilder; +import org.bouncycastle.operator.InputDecryptorProvider; +import org.bouncycastle.operator.OperatorCreationException; +import org.bouncycastle.pkcs.PKCS10CertificationRequest; +import org.bouncycastle.pkcs.PKCS8EncryptedPrivateKeyInfo; +import org.bouncycastle.pkcs.PKCSException; import org.bouncycastle.util.Arrays; import org.bouncycastle.util.BigIntegers; import org.bouncycastle.util.encoders.Hex; @@ -1299,7 +1309,7 @@ public static ASN1Object decode(InputStream in) { * @return {@link ASN1Object}的字符串表示形式 * @see ASN1Dump#dumpAsString(Object) */ - public static String getDumpStr(InputStream in) { + public static String getDumpString(InputStream in) { return ASN1Dump.dumpAsString(decode(in)); } @@ -2857,7 +2867,7 @@ public static PublicKey getRSAPublicKey(String modulus, String publicExponent) { * @return 密钥bytes */ public static byte[] readPem(InputStream keyStream) { - PemObject pemObject = readPemObject(keyStream); + final PemObject pemObject = readPemObject(keyStream); if (null != pemObject) { return pemObject.getContent(); } @@ -2886,17 +2896,28 @@ public static PublicKey getRSAPublicKey(BigInteger modulus, BigInteger publicExp * @param pemStream pem流 * @return {@link PrivateKey} */ - public static PrivateKey readPrivateKey(InputStream pemStream) { + public static PrivateKey readPemPrivateKey(InputStream pemStream) { return (PrivateKey) readPemKey(pemStream); } + /** + * 读取加密的 PEM 格式私钥 + * + * @param pemStream pem 流 + * @param password 私钥的密码 + * @return {@link PrivateKey} + */ + public static PrivateKey readPemPrivateKey(InputStream pemStream, final char[] password) { + return (PrivateKey) readPemKey(pemStream, password); + } + /** * 读取PEM格式的公钥 * * @param pemStream pem流 * @return {@link PublicKey} */ - public static PublicKey readPublicKey(InputStream pemStream) { + public static PublicKey readPemPublicKey(InputStream pemStream) { return (PublicKey) readPemKey(pemStream); } @@ -2908,51 +2929,57 @@ public static PublicKey readPublicKey(InputStream pemStream) { * @return {@link Key},null表示无法识别的密钥类型 */ public static Key readPemKey(InputStream keyStream) { - final PemObject object = readPemObject(keyStream); - final String type = object.getType(); - if (StringKit.isNotBlank(type)) { - // PRIVATE - if (type.endsWith("EC PRIVATE KEY")) { - return generatePrivateKey("EC", object.getContent()); - } - if (type.endsWith("PRIVATE KEY")) { - return generateRSAPrivateKey(object.getContent()); - } - - // PUBLIC - if (type.endsWith("EC PUBLIC KEY")) { - return generatePublicKey("EC", object.getContent()); - } else if (type.endsWith("PUBLIC KEY")) { - return generateRSAPublicKey(object.getContent()); - } else if (type.endsWith("CERTIFICATE")) { - return readPublicKeyFromCert(IoKit.toStream(object.getContent())); - } - } - - // 表示无法识别的密钥类型 - return null; - } - - /** - * 写出pem密钥(私钥、公钥、证书) - * - * @param type 密钥类型(私钥、公钥、证书) - * @param content 密钥内容,需为PKCS#1格式 - * @param keyStream pem流 - */ - public static void writePemObject(String type, byte[] content, OutputStream keyStream) { - writePemObject(new PemObject(type, content), keyStream); + return readPemKey(keyStream, null); } /** - * 写出pem密钥(私钥、公钥、证书) + * 从pem文件中读取公钥或私钥 + * 根据类型返回{@link PublicKey} 或者 {@link PrivateKey} * - * @param type 密钥类型(私钥、公钥、证书) - * @param content 密钥内容,需为PKCS#1格式 - * @param writer pemWriter + * @param keyStream pem 流 + * @param password 私钥密码 + * @return {@link Key},null 表示无法识别的密钥类型 */ - public static void writePemObject(String type, byte[] content, Writer writer) { - writePemObject(new PemObject(type, content), writer); + public static Key readPemKey(InputStream keyStream, final char[] password) { + final java.security.Provider provider = Instances.singletion(Holder.class).getProvider(); + try (PEMParser pemParser = new PEMParser(new InputStreamReader(keyStream))) { + Object keyObject = pemParser.readObject(); + JcaPEMKeyConverter pemKeyConverter = new JcaPEMKeyConverter().setProvider(provider); + if (keyObject instanceof PrivateKeyInfo) { + // PrivateKeyInfo + return pemKeyConverter.getPrivateKey((PrivateKeyInfo) keyObject); + } else if (keyObject instanceof PEMKeyPair) { + // PemKeyPair + return pemKeyConverter.getKeyPair((PEMKeyPair) keyObject).getPrivate(); + } else if (keyObject instanceof PKCS8EncryptedPrivateKeyInfo) { + // Encrypted PrivateKeyInfo + InputDecryptorProvider decryptProvider = new JceOpenSSLPKCS8DecryptorProviderBuilder().setProvider(provider).build(password); + PrivateKeyInfo privateKeyInfo = ((PKCS8EncryptedPrivateKeyInfo) keyObject).decryptPrivateKeyInfo(decryptProvider); + return pemKeyConverter.getPrivateKey(privateKeyInfo); + } else if (keyObject instanceof PEMEncryptedKeyPair) { + // Encrypted PemKeyPair + PEMDecryptorProvider decryptProvider = new JcePEMDecryptorProviderBuilder().setProvider(provider).build(password); + PrivateKeyInfo privateKeyInfo = ((PEMEncryptedKeyPair) keyObject).decryptKeyPair(decryptProvider).getPrivateKeyInfo(); + return pemKeyConverter.getPrivateKey(privateKeyInfo); + } else if (keyObject instanceof SubjectPublicKeyInfo) { + // SubjectPublicKeyInfo + return pemKeyConverter.getPublicKey((SubjectPublicKeyInfo) keyObject); + } else if (keyObject instanceof X509CertificateHolder) { + // X509 Certificate + return pemKeyConverter.getPublicKey(((X509CertificateHolder) keyObject).getSubjectPublicKeyInfo()); + } else if (keyObject instanceof X509TrustedCertificateBlock) { + // X509 Trusted Certificate + return pemKeyConverter.getPublicKey(((X509TrustedCertificateBlock) keyObject).getCertificateHolder().getSubjectPublicKeyInfo()); + } else if (keyObject instanceof PKCS10CertificationRequest) { + // PKCS#10 CSR + return pemKeyConverter.getPublicKey(((PKCS10CertificationRequest) keyObject).getSubjectPublicKeyInfo()); + } else { + // 表示无法识别的密钥类型 + return null; + } + } catch (IOException | OperatorCreationException | PKCSException e) { + throw new RuntimeException(e); + } } /** @@ -2983,20 +3010,6 @@ public static PemObject readPemObject(Reader reader) { } } - /** - * 读取OpenSSL生成的ANS1格式的Pem私钥文件,必须为PKCS#1格式 - * - * @param keyStream 私钥pem流 - * @return {@link PrivateKey} - */ - public static PrivateKey readSm2PemPrivateKey(InputStream keyStream) { - try { - return generatePrivateKey(Algorithm.SM2.getValue(), createOpenSSHPrivateKeySpec(readPem(keyStream))); - } finally { - IoKit.close(keyStream); - } - } - /** * 将私钥或公钥转换为PEM格式的字符串 * @@ -3010,6 +3023,28 @@ public static String toPem(String type, byte[] content) { return stringWriter.toString(); } + /** + * 写出pem密钥(私钥、公钥、证书) + * + * @param type 密钥类型(私钥、公钥、证书) + * @param content 密钥内容,需为PKCS#1格式 + * @param keyStream pem流 + */ + public static void writePemObject(String type, byte[] content, OutputStream keyStream) { + writePemObject(new PemObject(type, content), keyStream); + } + + /** + * 写出pem密钥(私钥、公钥、证书) + * + * @param type 密钥类型(私钥、公钥、证书) + * @param content 密钥内容,需为PKCS#1格式 + * @param writer pemWriter + */ + public static void writePemObject(String type, byte[] content, Writer writer) { + writePemObject(new PemObject(type, content), writer); + } + /** * 写出pem密钥(私钥、公钥、证书) * diff --git a/bus-crypto/src/main/java/org/aoju/bus/crypto/asymmetric/Crypto.java b/bus-crypto/src/main/java/org/aoju/bus/crypto/asymmetric/Crypto.java index a476803a9f..4580f346a6 100644 --- a/bus-crypto/src/main/java/org/aoju/bus/crypto/asymmetric/Crypto.java +++ b/bus-crypto/src/main/java/org/aoju/bus/crypto/asymmetric/Crypto.java @@ -27,7 +27,7 @@ import org.aoju.bus.core.codec.Base64; import org.aoju.bus.core.exception.CryptoException; -import org.aoju.bus.core.io.streams.FastByteOutputStream; +import org.aoju.bus.core.io.stream.FastByteOutputStream; import org.aoju.bus.core.lang.Algorithm; import org.aoju.bus.crypto.Builder; import org.aoju.bus.crypto.Ciphers; diff --git a/bus-crypto/src/main/java/org/aoju/bus/crypto/asymmetric/Decryptor.java b/bus-crypto/src/main/java/org/aoju/bus/crypto/asymmetric/Decryptor.java index 17d8b1d1aa..a553bcda7f 100644 --- a/bus-crypto/src/main/java/org/aoju/bus/crypto/asymmetric/Decryptor.java +++ b/bus-crypto/src/main/java/org/aoju/bus/crypto/asymmetric/Decryptor.java @@ -89,7 +89,7 @@ default byte[] decrypt(String data, KeyType keyType) { * @param charset 加密前编码 * @return 解密后的密文 */ - default String decryptStr(String data, KeyType keyType, Charset charset) { + default String decryptString(String data, KeyType keyType, Charset charset) { return StringKit.toString(decrypt(data, keyType), charset); } @@ -100,8 +100,8 @@ default String decryptStr(String data, KeyType keyType, Charset charset) { * @param keyType 密钥类型 * @return 解密后的密文 */ - default String decryptStr(String data, KeyType keyType) { - return decryptStr(data, keyType, org.aoju.bus.core.lang.Charset.UTF_8); + default String decryptString(String data, KeyType keyType) { + return decryptString(data, keyType, org.aoju.bus.core.lang.Charset.UTF_8); } /** diff --git a/bus-crypto/src/main/java/org/aoju/bus/crypto/asymmetric/Encryptor.java b/bus-crypto/src/main/java/org/aoju/bus/crypto/asymmetric/Encryptor.java index d382508579..e493519602 100644 --- a/bus-crypto/src/main/java/org/aoju/bus/crypto/asymmetric/Encryptor.java +++ b/bus-crypto/src/main/java/org/aoju/bus/crypto/asymmetric/Encryptor.java @@ -215,7 +215,7 @@ default String encryptBcd(String data, KeyType keyType) { * @return 加密后的密文 */ default String encryptBcd(String data, KeyType keyType, Charset charset) { - return BCD.bcdToStr(encrypt(data, charset, keyType)); + return BCD.bcdToString(encrypt(data, charset, keyType)); } } diff --git a/bus-crypto/src/main/java/org/aoju/bus/crypto/asymmetric/SM2.java b/bus-crypto/src/main/java/org/aoju/bus/crypto/asymmetric/SM2.java index f5c9d9cab3..b821e998a4 100644 --- a/bus-crypto/src/main/java/org/aoju/bus/crypto/asymmetric/SM2.java +++ b/bus-crypto/src/main/java/org/aoju/bus/crypto/asymmetric/SM2.java @@ -88,11 +88,11 @@ public SM2() { * 私钥和公钥同时为空时生成一对新的私钥和公钥 * 私钥和公钥可以单独传入一个,如此则只能使用此钥匙来做加密或者解密 * - * @param privateKeyStr 私钥Hex或Base64表示,必须使用PKCS#8规范 - * @param publicKeyStr 公钥Hex或Base64表示,必须使用X509规范 + * @param privateKey 私钥Hex或Base64表示,必须使用PKCS#8规范 + * @param publicKey 公钥Hex或Base64表示,必须使用X509规范 */ - public SM2(String privateKeyStr, String publicKeyStr) { - this(Builder.decode(privateKeyStr), Builder.decode(publicKeyStr)); + public SM2(String privateKey, String publicKey) { + this(Builder.decode(privateKey), Builder.decode(publicKey)); } /** @@ -133,12 +133,12 @@ public SM2(PrivateKey privateKey, PublicKey publicKey) { * 私钥和公钥同时为空时生成一对新的私钥和公钥 * 私钥和公钥可以单独传入一个,如此则只能使用此钥匙来做加密或者解密 * - * @param privateKeyHex 私钥16进制 - * @param publicKeyPointXHex 公钥X16进制 - * @param publicKeyPointYHex 公钥Y16进制 + * @param privateKey 私钥16进制 + * @param publicKeyPointX 公钥X16进制 + * @param publicKeyPointY 公钥Y16进制 */ - public SM2(String privateKeyHex, String publicKeyPointXHex, String publicKeyPointYHex) { - this(Builder.toSm2Params(privateKeyHex), Builder.toSm2Params(publicKeyPointXHex, publicKeyPointYHex)); + public SM2(String privateKey, String publicKeyPointX, String publicKeyPointY) { + this(Builder.toSm2Params(privateKey), Builder.toSm2Params(publicKeyPointX, publicKeyPointY)); } /** diff --git a/bus-crypto/src/main/java/org/aoju/bus/crypto/symmetric/Decryptor.java b/bus-crypto/src/main/java/org/aoju/bus/crypto/symmetric/Decryptor.java index 4194a9636d..6b3bfc8b4a 100644 --- a/bus-crypto/src/main/java/org/aoju/bus/crypto/symmetric/Decryptor.java +++ b/bus-crypto/src/main/java/org/aoju/bus/crypto/symmetric/Decryptor.java @@ -71,7 +71,7 @@ public interface Decryptor { * @param charset 解密后的charset * @return 解密后的String */ - default String decryptStr(byte[] bytes, Charset charset) { + default String decryptString(byte[] bytes, Charset charset) { return StringKit.toString(decrypt(bytes), charset); } @@ -81,8 +81,8 @@ default String decryptStr(byte[] bytes, Charset charset) { * @param bytes 被解密的bytes * @return 解密后的String */ - default String decryptStr(byte[] bytes) { - return decryptStr(bytes, org.aoju.bus.core.lang.Charset.UTF_8); + default String decryptString(byte[] bytes) { + return decryptString(bytes, org.aoju.bus.core.lang.Charset.UTF_8); } /** @@ -102,7 +102,7 @@ default byte[] decrypt(String data) { * @param charset 解密后的charset * @return 解密后的String */ - default String decryptStr(String data, Charset charset) { + default String decryptString(String data, Charset charset) { return StringKit.toString(decrypt(data), charset); } @@ -112,8 +112,8 @@ default String decryptStr(String data, Charset charset) { * @param data 被解密的String * @return 解密后的String */ - default String decryptStr(String data) { - return decryptStr(data, org.aoju.bus.core.lang.Charset.UTF_8); + default String decryptString(String data) { + return decryptString(data, org.aoju.bus.core.lang.Charset.UTF_8); } /** @@ -134,7 +134,7 @@ default byte[] decrypt(InputStream data) throws CryptoException { * @param charset 解密后的charset * @return 解密后的String */ - default String decryptStr(InputStream data, Charset charset) { + default String decryptString(InputStream data, Charset charset) { return StringKit.toString(decrypt(data), charset); } @@ -144,8 +144,8 @@ default String decryptStr(InputStream data, Charset charset) { * @param data 被解密的InputStream * @return 解密后的String */ - default String decryptStr(InputStream data) { - return decryptStr(data, org.aoju.bus.core.lang.Charset.UTF_8); + default String decryptString(InputStream data) { + return decryptString(data, org.aoju.bus.core.lang.Charset.UTF_8); } } diff --git a/bus-extra/pom.xml b/bus-extra/pom.xml index 1ccbd09522..d4d04d43e0 100644 --- a/bus-extra/pom.xml +++ b/bus-extra/pom.xml @@ -6,7 +6,7 @@ org.aoju bus-extra - 6.5.3 + 6.5.5 jar ${project.artifactId} diff --git a/bus-extra/src/main/java/org/aoju/bus/extra/ftp/Ftp.java b/bus-extra/src/main/java/org/aoju/bus/extra/ftp/Ftp.java index 184af090b5..735a20536f 100755 --- a/bus-extra/src/main/java/org/aoju/bus/extra/ftp/Ftp.java +++ b/bus-extra/src/main/java/org/aoju/bus/extra/ftp/Ftp.java @@ -44,7 +44,6 @@ import java.io.InputStream; import java.io.OutputStream; import java.nio.charset.Charset; -import java.nio.charset.StandardCharsets; import java.util.ArrayList; import java.util.List; @@ -645,7 +644,7 @@ public void download(String path, String fileName, OutputStream out, java.nio.ch } if (null != charset) { - fileName = new String(fileName.getBytes(charset), StandardCharsets.ISO_8859_1); + fileName = new String(fileName.getBytes(charset), org.aoju.bus.core.lang.Charset.ISO_8859_1); } try { client.setFileType(FTPClient.BINARY_FILE_TYPE); diff --git a/bus-extra/src/main/java/org/aoju/bus/extra/json/provider/GsonProvider.java b/bus-extra/src/main/java/org/aoju/bus/extra/json/provider/GsonProvider.java index f9fb509c5b..667b6047bc 100644 --- a/bus-extra/src/main/java/org/aoju/bus/extra/json/provider/GsonProvider.java +++ b/bus-extra/src/main/java/org/aoju/bus/extra/json/provider/GsonProvider.java @@ -54,11 +54,11 @@ public GsonProvider() { JsonObject jsonObject = jsonElement.getAsJsonObject(); Set> entrySet = jsonObject.entrySet(); for (Map.Entry entry : entrySet) { - Object obj = entry.getValue(); - if (obj instanceof JsonPrimitive) { - map.put(entry.getKey(), ((JsonPrimitive) obj).getAsString()); + Object object = entry.getValue(); + if (object instanceof JsonPrimitive) { + map.put(entry.getKey(), ((JsonPrimitive) object).getAsString()); } else { - map.put(entry.getKey(), obj); + map.put(entry.getKey(), object); } } return map; diff --git a/bus-extra/src/main/java/org/aoju/bus/extra/qrcode/QrConfig.java b/bus-extra/src/main/java/org/aoju/bus/extra/qrcode/QrConfig.java index 8fb965082b..3ab6f37edf 100755 --- a/bus-extra/src/main/java/org/aoju/bus/extra/qrcode/QrConfig.java +++ b/bus-extra/src/main/java/org/aoju/bus/extra/qrcode/QrConfig.java @@ -27,6 +27,7 @@ import com.google.zxing.BarcodeFormat; import com.google.zxing.EncodeHintType; +import com.google.zxing.datamatrix.encoder.SymbolShapeHint; import com.google.zxing.qrcode.decoder.ErrorCorrectionLevel; import org.aoju.bus.core.lang.Charset; import org.aoju.bus.core.toolkit.FileKit; @@ -89,6 +90,11 @@ public class QrConfig { */ protected Integer qrVersion; + /** + * DATA_MATRIX的符号形状 + */ + protected SymbolShapeHint shapeHint = SymbolShapeHint.FORCE_NONE; + /** * 构造,默认长宽为300 */ @@ -322,6 +328,17 @@ public QrConfig setRatio(int ratio) { return this; } + /** + * 设置DATA_MATRIX的符号形状 + * + * @param shapeHint DATA_MATRIX的符号形状 + * @return this; + */ + public QrConfig setShapeHint(SymbolShapeHint shapeHint) { + this.shapeHint = shapeHint; + return this; + } + /** * 设置二维码中的信息量,可设置0-40的整数,二维码图片也会根据qrVersion而变化,0表示根据传入信息自动变化 * @@ -373,6 +390,7 @@ public HashMap toHints(BarcodeFormat format) { } hints.put(EncodeHintType.ERROR_CORRECTION, value); + hints.put(EncodeHintType.DATA_MATRIX_SHAPE, shapeHint); } if (null != this.margin) { hints.put(EncodeHintType.MARGIN, this.margin); diff --git a/bus-gitlab/README.md b/bus-gitlab/README.md index a1a93304c0..6e6c8b3ee2 100755 --- a/bus-gitlab/README.md +++ b/bus-gitlab/README.md @@ -70,7 +70,7 @@ dependencies { org.aoju bus-gitlab - 6.5.3 + 6.5.5 ``` diff --git a/bus-gitlab/pom.xml b/bus-gitlab/pom.xml index 4a0a07e23c..e0f044374f 100755 --- a/bus-gitlab/pom.xml +++ b/bus-gitlab/pom.xml @@ -6,7 +6,7 @@ org.aoju bus-gitlab - 6.5.3 + 6.5.5 jar ${project.artifactId} diff --git a/bus-gitlab/src/main/java/org/aoju/bus/gitlab/AbstractApi.java b/bus-gitlab/src/main/java/org/aoju/bus/gitlab/AbstractApi.java index 0687af030c..e6cb49326f 100644 --- a/bus-gitlab/src/main/java/org/aoju/bus/gitlab/AbstractApi.java +++ b/bus-gitlab/src/main/java/org/aoju/bus/gitlab/AbstractApi.java @@ -55,26 +55,26 @@ public AbstractApi(GitLabApi gitLabApi) { /** * Returns the project ID or path from the provided Integer, String, or Project instance. * - * @param obj the object to determine the ID or path from + * @param object the object to determine the ID or path from * @return the project ID or path from the provided Long, String, or Project instance * @throws GitLabApiException if any exception occurs during execution */ - public Object getProjectIdOrPath(Object obj) throws GitLabApiException { + public Object getProjectIdOrPath(Object object) throws GitLabApiException { - if (obj == null) { + if (object == null) { throw (new RuntimeException("Cannot determine ID or path from null object")); - } else if (obj instanceof Long) { - return (obj); - } else if (obj instanceof String) { - return (urlEncode(((String) obj).trim())); - } else if (obj instanceof Project) { + } else if (object instanceof Long) { + return (object); + } else if (object instanceof String) { + return (urlEncode(((String) object).trim())); + } else if (object instanceof Project) { - Long id = ((Project) obj).getId(); + Long id = ((Project) object).getId(); if (id != null && id.longValue() > 0) { return (id); } - String path = ((Project) obj).getPathWithNamespace(); + String path = ((Project) object).getPathWithNamespace(); if (path != null && path.trim().length() > 0) { return (urlEncode(path.trim())); } @@ -82,7 +82,7 @@ public Object getProjectIdOrPath(Object obj) throws GitLabApiException { throw (new RuntimeException("Cannot determine ID or path from provided Project instance")); } else { - throw (new RuntimeException("Cannot determine ID or path from provided " + obj.getClass().getSimpleName() + + throw (new RuntimeException("Cannot determine ID or path from provided " + object.getClass().getSimpleName() + " instance, must be Long, String, or a Project instance")); } } @@ -90,26 +90,25 @@ public Object getProjectIdOrPath(Object obj) throws GitLabApiException { /** * Returns the group ID or path from the provided Integer, String, or Group instance. * - * @param obj the object to determine the ID or path from + * @param object the object to determine the ID or path from * @return the group ID or path from the provided Long, String, or Group instance * @throws GitLabApiException if any exception occurs during execution */ - public Object getGroupIdOrPath(Object obj) throws GitLabApiException { - - if (obj == null) { + public Object getGroupIdOrPath(Object object) throws GitLabApiException { + if (object == null) { throw (new RuntimeException("Cannot determine ID or path from null object")); - } else if (obj instanceof Long) { - return (obj); - } else if (obj instanceof String) { - return (urlEncode(((String) obj).trim())); - } else if (obj instanceof Group) { + } else if (object instanceof Long) { + return (object); + } else if (object instanceof String) { + return (urlEncode(((String) object).trim())); + } else if (object instanceof Group) { - Long id = ((Group) obj).getId(); + Long id = ((Group) object).getId(); if (id != null && id.longValue() > 0) { return (id); } - String path = ((Group) obj).getFullPath(); + String path = ((Group) object).getFullPath(); if (path != null && path.trim().length() > 0) { return (urlEncode(path.trim())); } @@ -117,7 +116,7 @@ public Object getGroupIdOrPath(Object obj) throws GitLabApiException { throw (new RuntimeException("Cannot determine ID or path from provided Group instance")); } else { - throw (new RuntimeException("Cannot determine ID or path from provided " + obj.getClass().getSimpleName() + + throw (new RuntimeException("Cannot determine ID or path from provided " + object.getClass().getSimpleName() + " instance, must be Long, String, or a Group instance")); } } @@ -125,26 +124,25 @@ public Object getGroupIdOrPath(Object obj) throws GitLabApiException { /** * Returns the user ID or path from the provided Integer, String, or User instance. * - * @param obj the object to determine the ID or username from + * @param object the object to determine the ID or username from * @return the user ID or username from the provided Integer, String, or User instance * @throws GitLabApiException if any exception occurs during execution */ - public Object getUserIdOrUsername(Object obj) throws GitLabApiException { - - if (obj == null) { + public Object getUserIdOrUsername(Object object) throws GitLabApiException { + if (object == null) { throw (new RuntimeException("Cannot determine ID or username from null object")); - } else if (obj instanceof Long) { - return (obj); - } else if (obj instanceof String) { - return (urlEncode(((String) obj).trim())); - } else if (obj instanceof User) { + } else if (object instanceof Long) { + return (object); + } else if (object instanceof String) { + return (urlEncode(((String) object).trim())); + } else if (object instanceof User) { - Long id = ((User) obj).getId(); + Long id = ((User) object).getId(); if (id != null && id.longValue() > 0) { return (id); } - String username = ((User) obj).getUsername(); + String username = ((User) object).getUsername(); if (username != null && username.trim().length() > 0) { return (urlEncode(username.trim())); } @@ -152,7 +150,7 @@ public Object getUserIdOrUsername(Object obj) throws GitLabApiException { throw (new RuntimeException("Cannot determine ID or username from provided User instance")); } else { - throw (new RuntimeException("Cannot determine ID or username from provided " + obj.getClass().getSimpleName() + + throw (new RuntimeException("Cannot determine ID or username from provided " + object.getClass().getSimpleName() + " instance, must be Integer, String, or a User instance")); } } @@ -160,26 +158,25 @@ public Object getUserIdOrUsername(Object obj) throws GitLabApiException { /** * Returns the label ID or name from the provided Integer, String, or Label instance. * - * @param obj the object to determine the ID or name from + * @param object the object to determine the ID or name from * @return the user ID or name from the provided Integer, String, or Label instance * @throws GitLabApiException if any exception occurs during execution */ - public Object getLabelIdOrName(Object obj) throws GitLabApiException { - - if (obj == null) { + public Object getLabelIdOrName(Object object) throws GitLabApiException { + if (object == null) { throw (new RuntimeException("Cannot determine ID or name from null object")); - } else if (obj instanceof Long) { - return (obj); - } else if (obj instanceof String) { - return (urlEncode(((String) obj).trim())); - } else if (obj instanceof Label) { + } else if (object instanceof Long) { + return (object); + } else if (object instanceof String) { + return (urlEncode(((String) object).trim())); + } else if (object instanceof Label) { - Long id = ((Label) obj).getId(); + Long id = ((Label) object).getId(); if (id != null && id.longValue() > 0) { return (id); } - String name = ((Label) obj).getName(); + String name = ((Label) object).getName(); if (name != null && name.trim().length() > 0) { return (urlEncode(name.trim())); } @@ -187,7 +184,7 @@ public Object getLabelIdOrName(Object obj) throws GitLabApiException { throw (new RuntimeException("Cannot determine ID or name from provided Label instance")); } else { - throw (new RuntimeException("Cannot determine ID or name from provided " + obj.getClass().getSimpleName() + + throw (new RuntimeException("Cannot determine ID or name from provided " + object.getClass().getSimpleName() + " instance, must be Integer, String, or a Label instance")); } } diff --git a/bus-gitlab/src/main/java/org/aoju/bus/gitlab/GitLabApiException.java b/bus-gitlab/src/main/java/org/aoju/bus/gitlab/GitLabApiException.java index 2319d90f07..99e67115e1 100755 --- a/bus-gitlab/src/main/java/org/aoju/bus/gitlab/GitLabApiException.java +++ b/bus-gitlab/src/main/java/org/aoju/bus/gitlab/GitLabApiException.java @@ -227,21 +227,21 @@ public int hashCode() { } @Override - public boolean equals(Object obj) { + public boolean equals(Object object) { - if (this == obj) { + if (this == object) { return true; } - if (obj == null) { + if (object == null) { return false; } - if (getClass() != obj.getClass()) { + if (getClass() != object.getClass()) { return false; } - GitLabApiException other = (GitLabApiException) obj; + GitLabApiException other = (GitLabApiException) object; if (httpStatus != other.httpStatus) { return false; } diff --git a/bus-gitlab/src/main/java/org/aoju/bus/gitlab/support/Oauth2LoginStreamingOutput.java b/bus-gitlab/src/main/java/org/aoju/bus/gitlab/support/Oauth2LoginStreamingOutput.java index 82a3a3bbaf..aedb57d675 100644 --- a/bus-gitlab/src/main/java/org/aoju/bus/gitlab/support/Oauth2LoginStreamingOutput.java +++ b/bus-gitlab/src/main/java/org/aoju/bus/gitlab/support/Oauth2LoginStreamingOutput.java @@ -25,10 +25,11 @@ ********************************************************************************/ package org.aoju.bus.gitlab.support; +import org.aoju.bus.core.lang.Charset; + import javax.ws.rs.WebApplicationException; import javax.ws.rs.core.StreamingOutput; import java.io.*; -import java.nio.charset.StandardCharsets; /** * This StreamingOutput implementation is utilized to send a OAuth2 token request @@ -53,7 +54,7 @@ public Oauth2LoginStreamingOutput(String username, char[] password) { @Override public void write(OutputStream output) throws IOException, WebApplicationException { - Writer writer = new BufferedWriter(new OutputStreamWriter(output, StandardCharsets.UTF_8)); + Writer writer = new BufferedWriter(new OutputStreamWriter(output, Charset.UTF_8)); writer.write("{ "); writer.write("\"grant_type\": \"password\", "); writer.write("\"username\": \"" + username + "\", "); diff --git a/bus-goalie/pom.xml b/bus-goalie/pom.xml index 5108155671..2229639970 100644 --- a/bus-goalie/pom.xml +++ b/bus-goalie/pom.xml @@ -6,7 +6,7 @@ org.aoju bus-goalie - 6.5.3 + 6.5.5 jar ${project.artifactId} diff --git a/bus-goalie/src/main/java/org/aoju/bus/goalie/Provider.java b/bus-goalie/src/main/java/org/aoju/bus/goalie/Provider.java index ac7cf33c95..77ce0f49e3 100644 --- a/bus-goalie/src/main/java/org/aoju/bus/goalie/Provider.java +++ b/bus-goalie/src/main/java/org/aoju/bus/goalie/Provider.java @@ -36,9 +36,9 @@ public interface Provider { /** * 序列化 * - * @param obj 对象 + * @param object 对象 * @return 返回序列化后的结果 */ - String serialize(Object obj); + String serialize(Object object); } diff --git a/bus-goalie/src/main/java/org/aoju/bus/goalie/filter/DecryptFilter.java b/bus-goalie/src/main/java/org/aoju/bus/goalie/filter/DecryptFilter.java index 19d28e930a..da9d1afa39 100644 --- a/bus-goalie/src/main/java/org/aoju/bus/goalie/filter/DecryptFilter.java +++ b/bus-goalie/src/main/java/org/aoju/bus/goalie/filter/DecryptFilter.java @@ -88,7 +88,7 @@ private void doDecrypt(Map map) { } map.forEach((k, v) -> { if (StringKit.isNotBlank(v)) { - map.put(k, crypto.decryptStr(v.replaceAll(Symbol.SPACE, Symbol.PLUS), Charset.UTF_8)); + map.put(k, crypto.decryptString(v.replaceAll(Symbol.SPACE, Symbol.PLUS), Charset.UTF_8)); } }); } diff --git a/bus-goalie/src/main/java/org/aoju/bus/goalie/filter/EncryptFilter.java b/bus-goalie/src/main/java/org/aoju/bus/goalie/filter/EncryptFilter.java index a560ee880e..89f3d3433a 100644 --- a/bus-goalie/src/main/java/org/aoju/bus/goalie/filter/EncryptFilter.java +++ b/bus-goalie/src/main/java/org/aoju/bus/goalie/filter/EncryptFilter.java @@ -50,7 +50,6 @@ import javax.annotation.PostConstruct; import java.nio.CharBuffer; -import java.nio.charset.StandardCharsets; /** * 数据加密 @@ -106,7 +105,7 @@ public Mono writeWith(Publisher body) { if (isSign) { Flux flux = Flux.from(body); return super.writeWith(DataBufferUtils.join(flux).map(dataBuffer -> { - CharBuffer charBuffer = StandardCharsets.UTF_8.decode(dataBuffer.asByteBuffer()); + CharBuffer charBuffer = Charset.UTF_8.decode(dataBuffer.asByteBuffer()); DataBufferUtils.release(dataBuffer); Message message = JsonKit.toPojo(charBuffer.toString(), Message.class); doEncrypt(message); diff --git a/bus-goalie/src/main/java/org/aoju/bus/goalie/handler/ApiPermissionHandler.java b/bus-goalie/src/main/java/org/aoju/bus/goalie/handler/ApiPermissionHandler.java index af164957c1..feeefed579 100644 --- a/bus-goalie/src/main/java/org/aoju/bus/goalie/handler/ApiPermissionHandler.java +++ b/bus-goalie/src/main/java/org/aoju/bus/goalie/handler/ApiPermissionHandler.java @@ -35,7 +35,7 @@ public class ApiPermissionHandler extends AbstractApiHandler { @Override - public boolean preHandle(ServerHttpRequest request, ServerHttpResponse response, Object obj, Object args) { + public boolean preHandle(ServerHttpRequest request, ServerHttpResponse response, Object object, Object args) { return true; } diff --git a/bus-goalie/src/main/java/org/aoju/bus/goalie/handler/ApiVersionRequestCondition.java b/bus-goalie/src/main/java/org/aoju/bus/goalie/handler/ApiVersionRequestCondition.java index d7227c9c2f..e4fb19229f 100644 --- a/bus-goalie/src/main/java/org/aoju/bus/goalie/handler/ApiVersionRequestCondition.java +++ b/bus-goalie/src/main/java/org/aoju/bus/goalie/handler/ApiVersionRequestCondition.java @@ -172,7 +172,7 @@ public String getVersion() { public String toString() { StringBuilder builder = new StringBuilder(); if (null != terminals && terminals.length != 0) { - builder.append(ArrayKit.join(terminals, Symbol.COMMA)); + builder.append(ArrayKit.join(Symbol.COMMA, terminals)); } else { builder.append("*"); } @@ -184,13 +184,13 @@ public String toString() { } @Override - public boolean equals(Object obj) { - if (this == obj) { + public boolean equals(Object object) { + if (this == object) { return true; } - if (null != obj && obj instanceof TerminalVersionExpression) { + if (null != object && object instanceof TerminalVersionExpression) { // 暂定最终的表达式结果一致确定唯一性,后期有需要调整 - return this.toString().equalsIgnoreCase(obj.toString()); + return this.toString().equalsIgnoreCase(object.toString()); } return false; } diff --git a/bus-goalie/src/main/java/org/aoju/bus/goalie/metric/Limiter.java b/bus-goalie/src/main/java/org/aoju/bus/goalie/metric/Limiter.java index 8e5e887e63..b1373ba90f 100644 --- a/bus-goalie/src/main/java/org/aoju/bus/goalie/metric/Limiter.java +++ b/bus-goalie/src/main/java/org/aoju/bus/goalie/metric/Limiter.java @@ -73,5 +73,4 @@ public double acquire() { return fetchRateLimiter().acquire(); } - } diff --git a/bus-goalie/src/main/java/org/aoju/bus/goalie/support/JsonProvider.java b/bus-goalie/src/main/java/org/aoju/bus/goalie/support/JsonProvider.java index 315773cb64..7714643a91 100644 --- a/bus-goalie/src/main/java/org/aoju/bus/goalie/support/JsonProvider.java +++ b/bus-goalie/src/main/java/org/aoju/bus/goalie/support/JsonProvider.java @@ -37,8 +37,8 @@ public class JsonProvider implements Provider { @Override - public String serialize(Object obj) { - return JsonKit.toJsonString(obj); + public String serialize(Object object) { + return JsonKit.toJsonString(object); } } diff --git a/bus-goalie/src/main/java/org/aoju/bus/goalie/support/XmlProvider.java b/bus-goalie/src/main/java/org/aoju/bus/goalie/support/XmlProvider.java index 6bb0b4ffd9..369b333bb5 100644 --- a/bus-goalie/src/main/java/org/aoju/bus/goalie/support/XmlProvider.java +++ b/bus-goalie/src/main/java/org/aoju/bus/goalie/support/XmlProvider.java @@ -41,11 +41,11 @@ public class XmlProvider implements Provider { @Override - public String serialize(Object obj) { + public String serialize(Object object) { try { StringBuffer buffer = new StringBuffer(); buffer.append(""); - Map map = JsonKit.getProvider().toMap(obj); + Map map = JsonKit.getProvider().toMap(object); XmlKit.toXml(map, buffer); return buffer.toString(); } catch (Exception e) { diff --git a/bus-health/pom.xml b/bus-health/pom.xml index cfd7b55d4c..0629a34e9d 100755 --- a/bus-health/pom.xml +++ b/bus-health/pom.xml @@ -6,7 +6,7 @@ org.aoju bus-health - 6.5.3 + 6.5.5 jar ${project.artifactId} diff --git a/bus-health/src/main/java/org/aoju/bus/health/Builder.java b/bus-health/src/main/java/org/aoju/bus/health/Builder.java index 4af09f84b3..c08850eab8 100644 --- a/bus-health/src/main/java/org/aoju/bus/health/Builder.java +++ b/bus-health/src/main/java/org/aoju/bus/health/Builder.java @@ -33,6 +33,7 @@ import com.sun.jna.platform.unix.LibCAPI; import org.aoju.bus.core.annotation.ThreadSafe; import org.aoju.bus.core.convert.Convert; +import org.aoju.bus.core.lang.Charset; import org.aoju.bus.core.lang.Normal; import org.aoju.bus.core.lang.RegEx; import org.aoju.bus.core.lang.Symbol; @@ -48,7 +49,6 @@ import java.net.UnknownHostException; import java.nio.ByteBuffer; import java.nio.ByteOrder; -import java.nio.charset.StandardCharsets; import java.nio.file.*; import java.time.Instant; import java.time.LocalTime; @@ -302,7 +302,7 @@ public static byte[] hexStringToByteArray(String digits) { * string length, will be filled with zeroes. */ public static byte[] asciiStringToByteArray(String text, int length) { - return Arrays.copyOf(text.getBytes(StandardCharsets.US_ASCII), length); + return Arrays.copyOf(text.getBytes(Charset.US_ASCII), length); } /** @@ -337,7 +337,7 @@ public static byte[] longToByteArray(long value, int valueSize, int length) { * a byte */ public static long strToLong(String text, int size) { - return byteArrayToLong(text.getBytes(StandardCharsets.US_ASCII), size); + return byteArrayToLong(text.getBytes(Charset.US_ASCII), size); } /** @@ -1271,7 +1271,7 @@ public static List parseByteArrayToStrings(byte[] bytes) { } // Otherwise add string and reset start // Intentionally using platform default charset - strList.add(new String(bytes, start, end - start, StandardCharsets.UTF_8)); + strList.add(new String(bytes, start, end - start, Charset.UTF_8)); start = end + 1; } } while (end++ < bytes.length); @@ -1304,11 +1304,11 @@ public static Map parseByteArrayToStringMap(byte[] bytes) { } // Otherwise add string (possibly empty) and reset start // Intentionally using platform default charset - strMap.put(key, new String(bytes, start, end - start, StandardCharsets.UTF_8)); + strMap.put(key, new String(bytes, start, end - start, Charset.UTF_8)); key = null; start = end + 1; } else if (bytes[end] == '=' && key == null) { - key = new String(bytes, start, end - start, StandardCharsets.UTF_8); + key = new String(bytes, start, end - start, Charset.UTF_8); start = end + 1; } } while (end++ < bytes.length); @@ -1514,7 +1514,7 @@ public static List readFile(String filename, boolean reportError) { Logger.debug(READING_LOG, filename); } try { - return Files.readAllLines(Paths.get(filename), StandardCharsets.UTF_8); + return Files.readAllLines(Paths.get(filename), Charset.UTF_8); } catch (IOException e) { if (reportError) { Logger.error("Error reading file {}. {}", filename, e.getMessage()); diff --git a/bus-health/src/main/java/org/aoju/bus/health/Formats.java b/bus-health/src/main/java/org/aoju/bus/health/Formats.java index 40481bfcf2..4a550f3af8 100644 --- a/bus-health/src/main/java/org/aoju/bus/health/Formats.java +++ b/bus-health/src/main/java/org/aoju/bus/health/Formats.java @@ -26,12 +26,12 @@ package org.aoju.bus.health; import org.aoju.bus.core.annotation.ThreadSafe; +import org.aoju.bus.core.lang.Charset; import org.aoju.bus.logger.Logger; import java.math.BigInteger; import java.nio.ByteBuffer; import java.nio.ByteOrder; -import java.nio.charset.StandardCharsets; import java.util.Arrays; import java.util.concurrent.TimeUnit; @@ -425,7 +425,7 @@ public static String getDescriptorRangeLimits(byte[] desc) { * @return Plain text starting at the 4th byte */ public static String getDescriptorText(byte[] desc) { - return new String(Arrays.copyOfRange(desc, 4, 18), StandardCharsets.US_ASCII).trim(); + return new String(Arrays.copyOfRange(desc, 4, 18), Charset.US_ASCII).trim(); } /** diff --git a/bus-health/src/main/java/org/aoju/bus/health/Platform.java b/bus-health/src/main/java/org/aoju/bus/health/Platform.java index 9689ec4cc9..20c2aac709 100644 --- a/bus-health/src/main/java/org/aoju/bus/health/Platform.java +++ b/bus-health/src/main/java/org/aoju/bus/health/Platform.java @@ -63,15 +63,13 @@ */ public class Platform { - // The platform isn't going to change, and making this static enables easy - // access from outside this class - private static final OS CURRENT_PLATFORM = OS.getValue(com.sun.jna.Platform.getOSType()); + public static final OS CURRENT_PLATFORM = OS.getValue(com.sun.jna.Platform.getOSType()); - private static final String NOT_SUPPORTED = "Operating system not supported: "; + public static final String NOT_SUPPORTED = "Operating system not supported: "; - private final Supplier os = Memoize.memoize(Platform::createOperatingSystem); + public static final Supplier os = Memoize.memoize(Platform::createOperatingSystem); - private final Supplier hardware = Memoize.memoize(Platform::createHardware); + public static final Supplier hardware = Memoize.memoize(Platform::createHardware); public static int getOSType() { return com.sun.jna.Platform.getOSType(); @@ -431,7 +429,7 @@ public static OS getCurrentPlatform() { return CURRENT_PLATFORM; } - private static OperatingSystem createOperatingSystem() { + public static OperatingSystem createOperatingSystem() { switch (CURRENT_PLATFORM) { case WINDOWS: return new WindowsOperatingSystem(); @@ -452,7 +450,7 @@ private static OperatingSystem createOperatingSystem() { } } - private static HardwareAbstractionLayer createHardware() { + public static HardwareAbstractionLayer createHardware() { switch (CURRENT_PLATFORM) { case WINDOWS: return new WindowsHardwareAbstractionLayer(); @@ -479,7 +477,7 @@ private static HardwareAbstractionLayer createHardware() { * * @return A new instance of {@link OperatingSystem}. */ - public OperatingSystem getOperatingSystem() { + public static OperatingSystem getOperatingSystem() { return os.get(); } @@ -489,7 +487,7 @@ public OperatingSystem getOperatingSystem() { * * @return A new instance of {@link HardwareAbstractionLayer}. */ - public HardwareAbstractionLayer getHardware() { + public static HardwareAbstractionLayer getHardware() { return hardware.get(); } @@ -552,7 +550,7 @@ public enum OS { */ UNKNOWN("Unknown"); - private final String name; + public final String name; OS(String name) { this.name = name; diff --git a/bus-health/src/main/java/org/aoju/bus/health/linux/software/LinuxNetworkParams.java b/bus-health/src/main/java/org/aoju/bus/health/linux/software/LinuxNetworkParams.java index 499b488ed6..210dfc1839 100644 --- a/bus-health/src/main/java/org/aoju/bus/health/linux/software/LinuxNetworkParams.java +++ b/bus-health/src/main/java/org/aoju/bus/health/linux/software/LinuxNetworkParams.java @@ -50,7 +50,7 @@ * @since Java 17+ */ @ThreadSafe -final class LinuxNetworkParams extends AbstractNetworkParams { +public class LinuxNetworkParams extends AbstractNetworkParams { private static final LinuxLibc LIBC = LinuxLibc.INSTANCE; @@ -65,7 +65,7 @@ public String getDomainName() { try { hostname = InetAddress.getLocalHost().getHostName(); } catch (UnknownHostException e) { - Logger.error("Unknown host exception when getting address of local host: {}", e.getMessage()); + Logger.warn("Unknown host exception when getting address of local host: {}", e.getMessage()); return Normal.EMPTY; } try (ByRef.CloseablePointerByReference ptr = new ByRef.CloseablePointerByReference()) { @@ -76,10 +76,9 @@ public String getDomainName() { } return Normal.EMPTY; } - CLibrary.Addrinfo info = new CLibrary.Addrinfo(ptr.getValue()); - String canonname = info.ai_canonname.trim(); - LIBC.freeaddrinfo(ptr.getValue()); - return canonname; + try (CLibrary.Addrinfo info = new CLibrary.Addrinfo(ptr.getValue())) { + return info.ai_canonname == null ? hostname : info.ai_canonname.trim(); + } } } } diff --git a/bus-health/src/main/java/org/aoju/bus/health/mac/SysctlKit.java b/bus-health/src/main/java/org/aoju/bus/health/mac/SysctlKit.java index e7b7186655..3eede20948 100644 --- a/bus-health/src/main/java/org/aoju/bus/health/mac/SysctlKit.java +++ b/bus-health/src/main/java/org/aoju/bus/health/mac/SysctlKit.java @@ -74,7 +74,7 @@ public static long sysctl(String name, long def) { try (Memory p = new Memory(uint64Size); ByRef.CloseableSizeTByReference size = new ByRef.CloseableSizeTByReference(uint64Size)) { if (0 != SystemB.INSTANCE.sysctlbyname(name, p, size, null, size_t.ZERO)) { - Logger.error(SYSCTL_FAIL, name, Native.getLastError()); + Logger.warn(SYSCTL_FAIL, name, Native.getLastError()); return def; } return p.getLong(0); @@ -92,13 +92,13 @@ public static String sysctl(String name, String def) { // Call first time with null pointer to get value of size try (ByRef.CloseableSizeTByReference size = new ByRef.CloseableSizeTByReference()) { if (0 != SystemB.INSTANCE.sysctlbyname(name, null, size, null, size_t.ZERO)) { - Logger.error(SYSCTL_FAIL, name, Native.getLastError()); + Logger.warn(SYSCTL_FAIL, name, Native.getLastError()); return def; } // Add 1 to size for null terminated string try (Memory p = new Memory(size.longValue() + 1L)) { if (0 != SystemB.INSTANCE.sysctlbyname(name, p, size, null, size_t.ZERO)) { - Logger.error(SYSCTL_FAIL, name, Native.getLastError()); + Logger.warn(SYSCTL_FAIL, name, Native.getLastError()); return def; } return p.getString(0); @@ -116,7 +116,7 @@ public static String sysctl(String name, String def) { public static boolean sysctl(String name, Structure struct) { try (ByRef.CloseableSizeTByReference size = new ByRef.CloseableSizeTByReference(struct.size())) { if (0 != SystemB.INSTANCE.sysctlbyname(name, struct.getPointer(), size, null, size_t.ZERO)) { - Logger.error(SYSCTL_FAIL, name, Native.getLastError()); + Logger.warn(SYSCTL_FAIL, name, Native.getLastError()); return false; } } @@ -134,12 +134,12 @@ public static boolean sysctl(String name, Structure struct) { public static Memory sysctl(String name) { try (ByRef.CloseableSizeTByReference size = new ByRef.CloseableSizeTByReference()) { if (0 != SystemB.INSTANCE.sysctlbyname(name, null, size, null, size_t.ZERO)) { - Logger.error(SYSCTL_FAIL, name, Native.getLastError()); + Logger.warn(SYSCTL_FAIL, name, Native.getLastError()); return null; } Memory m = new Memory(size.longValue()); if (0 != SystemB.INSTANCE.sysctlbyname(name, m, size, null, size_t.ZERO)) { - Logger.error(SYSCTL_FAIL, name, Native.getLastError()); + Logger.warn(SYSCTL_FAIL, name, Native.getLastError()); m.close(); return null; } diff --git a/bus-health/src/main/java/org/aoju/bus/health/mac/drivers/Who.java b/bus-health/src/main/java/org/aoju/bus/health/mac/drivers/Who.java index f155e6d3f2..89668cdeea 100644 --- a/bus-health/src/main/java/org/aoju/bus/health/mac/drivers/Who.java +++ b/bus-health/src/main/java/org/aoju/bus/health/mac/drivers/Who.java @@ -27,12 +27,12 @@ import com.sun.jna.Native; import org.aoju.bus.core.annotation.ThreadSafe; +import org.aoju.bus.core.lang.Charset; import org.aoju.bus.health.builtin.software.OSSession; import org.aoju.bus.health.mac.SystemB; import org.aoju.bus.health.mac.SystemB.MacUtmpx; import org.aoju.bus.health.unix.CLibrary; -import java.nio.charset.StandardCharsets; import java.util.ArrayList; import java.util.List; @@ -60,9 +60,9 @@ public static synchronized List queryUtxent() { try { // Iterate while ((ut = SYS.getutxent()) != null) { if (ut.ut_type == CLibrary.USER_PROCESS || ut.ut_type == CLibrary.LOGIN_PROCESS) { - String user = Native.toString(ut.ut_user, StandardCharsets.US_ASCII); - String device = Native.toString(ut.ut_line, StandardCharsets.US_ASCII); - String host = Native.toString(ut.ut_host, StandardCharsets.US_ASCII); + String user = Native.toString(ut.ut_user, Charset.US_ASCII); + String device = Native.toString(ut.ut_line, Charset.US_ASCII); + String host = Native.toString(ut.ut_host, Charset.US_ASCII); long loginTime = ut.ut_tv.tv_sec.longValue() * 1000L + ut.ut_tv.tv_usec / 1000L; // Sanity check. If errors, default to who command line if (user.isEmpty() || device.isEmpty() || loginTime < 0 || loginTime > System.currentTimeMillis()) { diff --git a/bus-health/src/main/java/org/aoju/bus/health/mac/drivers/disk/Fsstat.java b/bus-health/src/main/java/org/aoju/bus/health/mac/drivers/disk/Fsstat.java index 587547dd4e..202627de15 100644 --- a/bus-health/src/main/java/org/aoju/bus/health/mac/drivers/disk/Fsstat.java +++ b/bus-health/src/main/java/org/aoju/bus/health/mac/drivers/disk/Fsstat.java @@ -29,8 +29,8 @@ import com.sun.jna.platform.mac.SystemB; import com.sun.jna.platform.mac.SystemB.Statfs; import org.aoju.bus.core.annotation.ThreadSafe; +import org.aoju.bus.core.lang.Charset; -import java.nio.charset.StandardCharsets; import java.util.HashMap; import java.util.Map; @@ -62,8 +62,8 @@ public static Map queryPartitionToMountMap() { // Iterate all mounted file systems for (Statfs f : fs) { - String mntFrom = Native.toString(f.f_mntfromname, StandardCharsets.UTF_8); - mountPointMap.put(mntFrom.replace("/dev/", ""), Native.toString(f.f_mntonname, StandardCharsets.UTF_8)); + String mntFrom = Native.toString(f.f_mntfromname, Charset.UTF_8); + mountPointMap.put(mntFrom.replace("/dev/", ""), Native.toString(f.f_mntonname, Charset.UTF_8)); } return mountPointMap; } diff --git a/bus-health/src/main/java/org/aoju/bus/health/mac/hardware/MacBaseboard.java b/bus-health/src/main/java/org/aoju/bus/health/mac/hardware/MacBaseboard.java index a6d861036e..0e4adb3fa7 100644 --- a/bus-health/src/main/java/org/aoju/bus/health/mac/hardware/MacBaseboard.java +++ b/bus-health/src/main/java/org/aoju/bus/health/mac/hardware/MacBaseboard.java @@ -29,13 +29,13 @@ import com.sun.jna.platform.mac.IOKit.IORegistryEntry; import com.sun.jna.platform.mac.IOKitUtil; import org.aoju.bus.core.annotation.Immutable; +import org.aoju.bus.core.lang.Charset; import org.aoju.bus.core.lang.Normal; import org.aoju.bus.core.lang.tuple.Quartet; import org.aoju.bus.core.toolkit.StringKit; import org.aoju.bus.health.Memoize; import org.aoju.bus.health.builtin.hardware.AbstractBaseboard; -import java.nio.charset.StandardCharsets; import java.util.function.Supplier; /** @@ -60,25 +60,25 @@ private static Quartet queryPlatform() { if (platformExpert != null) { byte[] data = platformExpert.getByteArrayProperty("manufacturer"); if (data != null) { - manufacturer = Native.toString(data, StandardCharsets.UTF_8); + manufacturer = Native.toString(data, Charset.UTF_8); } data = platformExpert.getByteArrayProperty("board-id"); if (data != null) { - model = Native.toString(data, StandardCharsets.UTF_8); + model = Native.toString(data, Charset.UTF_8); } if (StringKit.isBlank(model)) { data = platformExpert.getByteArrayProperty("model-number"); if (data != null) { - model = Native.toString(data, StandardCharsets.UTF_8); + model = Native.toString(data, Charset.UTF_8); } } data = platformExpert.getByteArrayProperty("version"); if (data != null) { - version = Native.toString(data, StandardCharsets.UTF_8); + version = Native.toString(data, Charset.UTF_8); } data = platformExpert.getByteArrayProperty("mlb-serial-number"); if (data != null) { - serialNumber = Native.toString(data, StandardCharsets.UTF_8); + serialNumber = Native.toString(data, Charset.UTF_8); } if (StringKit.isBlank(serialNumber)) { serialNumber = platformExpert.getStringProperty("IOPlatformSerialNumber"); diff --git a/bus-health/src/main/java/org/aoju/bus/health/mac/hardware/MacCentralProcessor.java b/bus-health/src/main/java/org/aoju/bus/health/mac/hardware/MacCentralProcessor.java index aa58be466a..3b2da35004 100644 --- a/bus-health/src/main/java/org/aoju/bus/health/mac/hardware/MacCentralProcessor.java +++ b/bus-health/src/main/java/org/aoju/bus/health/mac/hardware/MacCentralProcessor.java @@ -33,7 +33,6 @@ import org.aoju.bus.core.annotation.ThreadSafe; import org.aoju.bus.core.lang.Normal; import org.aoju.bus.core.lang.tuple.Pair; -import org.aoju.bus.core.lang.tuple.Quartet; import org.aoju.bus.core.toolkit.StringKit; import org.aoju.bus.health.Builder; import org.aoju.bus.health.Formats; @@ -41,7 +40,6 @@ import org.aoju.bus.health.builtin.ByRef; import org.aoju.bus.health.builtin.Struct; import org.aoju.bus.health.builtin.hardware.AbstractCentralProcessor; -import org.aoju.bus.health.builtin.hardware.CentralProcessor; import org.aoju.bus.health.mac.SysctlKit; import org.aoju.bus.logger.Logger; @@ -57,13 +55,20 @@ * @since Java 17+ */ @ThreadSafe -final class MacCentralProcessor extends AbstractCentralProcessor { +public class MacCentralProcessor extends AbstractCentralProcessor { - private static final int ROSETTA_CPUTYPE = 0x00000007; - private static final int ROSETTA_CPUFAMILY = 0x573b5eec; - private static final int M1_CPUTYPE = 0x0100000C; + private static final int ARM_CPUTYPE = 0x0100000C; private static final int M1_CPUFAMILY = 0x1b588bb3; + private static final int M2_CPUFAMILY = 0xda33d83d; + private static final long DEFAULT_FREQUENCY = 2_400_000_000L; + private final Supplier vendor = Memoize.memoize(MacCentralProcessor::platformExpert); + private final boolean isArmCpu = isArmCpu(); + + // Equivalents of hw.cpufrequency on Apple Silicon, defaulting to Rosetta value + // Will update during initialization + private long performanceCoreFrequency = DEFAULT_FREQUENCY; + private long efficiencyCoreFrequency = DEFAULT_FREQUENCY; private static String platformExpert() { String manufacturer = null; @@ -79,87 +84,77 @@ private static String platformExpert() { return StringKit.isBlank(manufacturer) ? "Apple Inc." : manufacturer; } - private static Quartet> queryArmCpu() { - int type = ROSETTA_CPUTYPE; - int family = ROSETTA_CPUFAMILY; - long freq = 0L; + // Called by initProcessorCount in the constructor + // These populate the physical processor id strings + private static Map queryCompatibleStrings() { Map compatibleStrMap = new HashMap<>(); // All CPUs are an IOPlatformDevice // Iterate each CPU and save frequency and "compatible" strings IOIterator iter = IOKitUtil.getMatchingServices("IOPlatformDevice"); if (iter != null) { - Set compatibleStrSet = new HashSet<>(); IORegistryEntry cpu = iter.next(); while (cpu != null) { if (cpu.getName().toLowerCase().startsWith("cpu")) { int procId = Builder.getFirstIntValue(cpu.getName()); - // Accurate CPU vendor frequency in kHz as little-endian byte array - byte[] data = cpu.getByteArrayProperty("clock-frequency"); - if (data != null) { - long cpuFreq = Builder.byteArrayToLong(data, data.length, false) * 1000L; - if (cpuFreq > freq) { - freq = cpuFreq; - } - } // Compatible key is null-delimited C string array in byte array - data = cpu.getByteArrayProperty("compatible"); + byte[] data = cpu.getByteArrayProperty("compatible"); if (data != null) { - for (String s : new String(data, StandardCharsets.UTF_8).split("\0")) { - if (!s.isEmpty()) { - compatibleStrSet.add(s); - if (compatibleStrMap.containsKey(procId)) { - compatibleStrMap.put(procId, compatibleStrMap.get(procId) + " " + s); - } else { - compatibleStrMap.put(procId, s); - } - } - } + // Byte array is null delimited + compatibleStrMap.put(procId, new String(data, StandardCharsets.UTF_8).replace('\0', ' ')); } } cpu.release(); cpu = iter.next(); } iter.release(); - // Match strings in "compatible" field with expectation for M1 chip - // Hard coded for M1 for now. Need to update and make more configurable for M1X, - // M2, etc. - List m1compatible = Arrays.asList("ARM,v8", "apple,firestorm", "apple,icestorm"); - compatibleStrSet.retainAll(m1compatible); - if (compatibleStrSet.size() == m1compatible.size()) { - type = M1_CPUTYPE; - family = M1_CPUFAMILY; + } + return compatibleStrMap; + } + + @Override + public long[] querySystemCpuLoadTicks() { + long[] ticks = new long[TickType.values().length]; + int machPort = SystemB.INSTANCE.mach_host_self(); + try (Struct.CloseableHostCpuLoadInfo cpuLoadInfo = new Struct.CloseableHostCpuLoadInfo(); + ByRef.CloseableIntByReference size = new ByRef.CloseableIntByReference(cpuLoadInfo.size())) { + if (0 != SystemB.INSTANCE.host_statistics(machPort, SystemB.HOST_CPU_LOAD_INFO, cpuLoadInfo, size)) { + Logger.error("Failed to get System CPU ticks. Error code: {} ", Native.getLastError()); + return ticks; } + + ticks[TickType.USER.getIndex()] = cpuLoadInfo.cpu_ticks[SystemB.CPU_STATE_USER]; + ticks[TickType.NICE.getIndex()] = cpuLoadInfo.cpu_ticks[SystemB.CPU_STATE_NICE]; + ticks[TickType.SYSTEM.getIndex()] = cpuLoadInfo.cpu_ticks[SystemB.CPU_STATE_SYSTEM]; + ticks[TickType.IDLE.getIndex()] = cpuLoadInfo.cpu_ticks[SystemB.CPU_STATE_IDLE]; } - return new Quartet<>(type, family, freq, compatibleStrMap); + // Leave IOWait and IRQ values as 0 + return ticks; } @Override - protected CentralProcessor.ProcessorIdentifier queryProcessorId() { + protected ProcessorIdentifier queryProcessorId() { String cpuName = SysctlKit.sysctl("machdep.cpu.brand_string", Normal.EMPTY); String cpuVendor; String cpuStepping; String cpuModel; String cpuFamily; String processorID; - long cpuFreq = 0L; + // Initial M1 chips said "Apple Processor". Later branding includes M1, M1 Pro, + // M1 Max, M2, etc. So if it starts with Apple it's M-something. if (cpuName.startsWith("Apple")) { // Processing an M1 chip cpuVendor = vendor.get(); cpuStepping = "0"; // No correlation yet cpuModel = "0"; // No correlation yet - int type = SysctlKit.sysctl("hw.cputype", 0); - int family = SysctlKit.sysctl("hw.cpufamily", 0); - // M1 should have hw.cputype 0x0100000C (ARM64) and hw.cpufamily 0x1b588bb3 for - // an ARM SoC. However, under Rosetta 2, low level cpuid calls in the translated - // environment report hw.cputype for x86 (0x00000007) and hw.cpufamily for an - // Intel Westmere chip (0x573b5eec), family 6, model 44, stepping 0. - // Test if under Rosetta and generate correct chip - Quartet> armCpu = queryArmCpu(); - if (family == ROSETTA_CPUFAMILY) { - type = armCpu.getA(); - family = armCpu.getB(); + int type; + int family; + if (isArmCpu) { + type = ARM_CPUTYPE; + family = cpuName.contains("M2") ? M2_CPUFAMILY : M1_CPUFAMILY; + } else { + type = SysctlKit.sysctl("hw.cputype", 0); + family = SysctlKit.sysctl("hw.cpufamily", 0); } - cpuFreq = armCpu.getC(); // Translate to output cpuFamily = String.format("0x%08x", family); // Processor ID is an intel concept but CPU type + family conveys same info @@ -178,72 +173,45 @@ protected CentralProcessor.ProcessorIdentifier queryProcessorId() { processorIdBits |= (SysctlKit.sysctl("machdep.cpu.feature_bits", 0L) & 0xffffffff) << 32; processorID = String.format("%016x", processorIdBits); } - if (cpuFreq == 0) { - cpuFreq = SysctlKit.sysctl("hw.cpufrequency", 0L); + if (isArmCpu) { + calculateNominalFrequencies(); } + long cpuFreq = isArmCpu ? performanceCoreFrequency : SysctlKit.sysctl("hw.cpufrequency", 0L); boolean cpu64bit = SysctlKit.sysctl("hw.cpu64bit_capable", 0) != 0; - return new CentralProcessor.ProcessorIdentifier(cpuVendor, cpuName, cpuFamily, cpuModel, cpuStepping, processorID, cpu64bit, + return new ProcessorIdentifier(cpuVendor, cpuName, cpuFamily, cpuModel, cpuStepping, processorID, cpu64bit, cpuFreq); } @Override - protected Pair, List> initProcessorCounts() { + protected Pair, List> initProcessorCounts() { int logicalProcessorCount = SysctlKit.sysctl("hw.logicalcpu", 1); int physicalProcessorCount = SysctlKit.sysctl("hw.physicalcpu", 1); int physicalPackageCount = SysctlKit.sysctl("hw.packages", 1); - List logProcs = new ArrayList<>(logicalProcessorCount); + List logProcs = new ArrayList<>(logicalProcessorCount); Set pkgCoreKeys = new HashSet<>(); for (int i = 0; i < logicalProcessorCount; i++) { int coreId = i * physicalProcessorCount / logicalProcessorCount; int pkgId = i * physicalPackageCount / logicalProcessorCount; - logProcs.add(new CentralProcessor.LogicalProcessor(i, coreId, pkgId)); + logProcs.add(new LogicalProcessor(i, coreId, pkgId)); pkgCoreKeys.add((pkgId << 16) + coreId); } - Map compatMap = queryArmCpu().getD(); - List physProcs = pkgCoreKeys.stream().sorted().map(k -> { - String compat = compatMap.getOrDefault(k, Normal.EMPTY); - int efficiency = 0; // default, for E-core icestorm - if (compat.toLowerCase().contains("firestorm")) { + Map compatMap = queryCompatibleStrings(); + List physProcs = pkgCoreKeys.stream().sorted().map(k -> { + String compat = compatMap.getOrDefault(k, "").toLowerCase(); + int efficiency = 0; // default, for E-core icestorm or blizzard + if (compat.contains("firestorm") || compat.contains("avalanche")) { + // This is brittle. A better long term solution is to use sysctls + // hw.perflevel1.physicalcpu: 2 + // hw.perflevel0.physicalcpu: 8 + // Note the 1 and 0 values are reversed from OSHI API definition efficiency = 1; // P-core, more performance } - return new CentralProcessor.PhysicalProcessor(k >> 16, k & 0xffff, efficiency, compat); + return new PhysicalProcessor(k >> 16, k & 0xffff, efficiency, compat); }).collect(Collectors.toList()); return Pair.of(logProcs, physProcs); } - @Override - public long[] querySystemCpuLoadTicks() { - long[] ticks = new long[TickType.values().length]; - int machPort = SystemB.INSTANCE.mach_host_self(); - try (Struct.CloseableHostCpuLoadInfo cpuLoadInfo = new Struct.CloseableHostCpuLoadInfo(); - ByRef.CloseableIntByReference size = new ByRef.CloseableIntByReference(cpuLoadInfo.size())) { - if (0 != SystemB.INSTANCE.host_statistics(machPort, SystemB.HOST_CPU_LOAD_INFO, cpuLoadInfo, size)) { - Logger.error("Failed to get System CPU ticks. Error code: {} ", Native.getLastError()); - return ticks; - } - - ticks[TickType.USER.getIndex()] = cpuLoadInfo.cpu_ticks[SystemB.CPU_STATE_USER]; - ticks[TickType.NICE.getIndex()] = cpuLoadInfo.cpu_ticks[SystemB.CPU_STATE_NICE]; - ticks[TickType.SYSTEM.getIndex()] = cpuLoadInfo.cpu_ticks[SystemB.CPU_STATE_SYSTEM]; - ticks[TickType.IDLE.getIndex()] = cpuLoadInfo.cpu_ticks[SystemB.CPU_STATE_IDLE]; - } - // Leave IOWait and IRQ values as 0 - return ticks; - } - - @Override - public long[] queryCurrentFreq() { - long[] freq = new long[1]; - freq[0] = SysctlKit.sysctl("hw.cpufrequency", getProcessorIdentifier().getVendorFreq()); - return freq; - } - - @Override - public long queryMaxFreq() { - return SysctlKit.sysctl("hw.cpufrequency_max", getProcessorIdentifier().getVendorFreq()); - } - @Override public double[] getSystemLoadAverage(int nelem) { if (nelem < 1 || nelem > 3) { @@ -303,4 +271,68 @@ public long queryInterrupts() { return 0L; } + @Override + public long[] queryCurrentFreq() { + if (isArmCpu) { + Map physFreqMap = new HashMap<>(); + getPhysicalProcessors().stream().forEach(p -> physFreqMap.put(p.getPhysicalProcessorNumber(), + p.getEfficiency() > 0 ? performanceCoreFrequency : efficiencyCoreFrequency)); + return getLogicalProcessors().stream().map(LogicalProcessor::getPhysicalProcessorNumber) + .map(p -> physFreqMap.getOrDefault(p, performanceCoreFrequency)).mapToLong(f -> f).toArray(); + } + return new long[]{getProcessorIdentifier().getVendorFreq()}; + } + + @Override + public long queryMaxFreq() { + if (isArmCpu) { + return performanceCoreFrequency; + } + return SysctlKit.sysctl("hw.cpufrequency_max", getProcessorIdentifier().getVendorFreq()); + } + + // Called when initiating instance variables which occurs after constructor has + // populated physical processors + private boolean isArmCpu() { + // M1 / M2 chips will have an efficiency > 0 + return getPhysicalProcessors().stream().map(PhysicalProcessor::getEfficiency).anyMatch(e -> e > 0); + } + + private void calculateNominalFrequencies() { + IOIterator iter = IOKitUtil.getMatchingServices("AppleARMIODevice"); + if (iter != null) { + try { + IORegistryEntry device = iter.next(); + try { + while (device != null) { + if ("pmgr".equalsIgnoreCase(device.getName())) { + performanceCoreFrequency = getMaxFreqFromByteArray( + device.getByteArrayProperty("voltage-states5-sram")); + efficiencyCoreFrequency = getMaxFreqFromByteArray( + device.getByteArrayProperty("voltage-states1-sram")); + return; + } + device.release(); + device = iter.next(); + } + } finally { + if (device != null) { + device.release(); + } + } + } finally { + iter.release(); + } + } + } + + private long getMaxFreqFromByteArray(byte[] data) { + // Max freq is 8 bytes from the end of the array + if (data != null && data.length >= 8) { + byte[] freqData = Arrays.copyOfRange(data, data.length - 8, data.length - 4); + return Builder.byteArrayToLong(freqData, 4, false); + } + return DEFAULT_FREQUENCY; + } + } diff --git a/bus-health/src/main/java/org/aoju/bus/health/mac/hardware/MacComputerSystem.java b/bus-health/src/main/java/org/aoju/bus/health/mac/hardware/MacComputerSystem.java index e86c43efcb..0620a0b963 100644 --- a/bus-health/src/main/java/org/aoju/bus/health/mac/hardware/MacComputerSystem.java +++ b/bus-health/src/main/java/org/aoju/bus/health/mac/hardware/MacComputerSystem.java @@ -29,6 +29,7 @@ import com.sun.jna.platform.mac.IOKit.IORegistryEntry; import com.sun.jna.platform.mac.IOKitUtil; import org.aoju.bus.core.annotation.Immutable; +import org.aoju.bus.core.lang.Charset; import org.aoju.bus.core.lang.Normal; import org.aoju.bus.core.lang.tuple.Quartet; import org.aoju.bus.core.toolkit.StringKit; @@ -37,7 +38,6 @@ import org.aoju.bus.health.builtin.hardware.Baseboard; import org.aoju.bus.health.builtin.hardware.Firmware; -import java.nio.charset.StandardCharsets; import java.util.function.Supplier; /** @@ -61,11 +61,11 @@ private static Quartet platformExpert() { if (platformExpert != null) { byte[] data = platformExpert.getByteArrayProperty("manufacturer"); if (data != null) { - manufacturer = Native.toString(data, StandardCharsets.UTF_8); + manufacturer = Native.toString(data, Charset.UTF_8); } data = platformExpert.getByteArrayProperty("model"); if (data != null) { - model = Native.toString(data, StandardCharsets.UTF_8); + model = Native.toString(data, Charset.UTF_8); } serialNumber = platformExpert.getStringProperty("IOPlatformSerialNumber"); uuid = platformExpert.getStringProperty("IOPlatformUUID"); diff --git a/bus-health/src/main/java/org/aoju/bus/health/mac/hardware/MacFirmware.java b/bus-health/src/main/java/org/aoju/bus/health/mac/hardware/MacFirmware.java index fd57040c64..30219b03bc 100644 --- a/bus-health/src/main/java/org/aoju/bus/health/mac/hardware/MacFirmware.java +++ b/bus-health/src/main/java/org/aoju/bus/health/mac/hardware/MacFirmware.java @@ -30,13 +30,13 @@ import com.sun.jna.platform.mac.IOKit.IORegistryEntry; import com.sun.jna.platform.mac.IOKitUtil; import org.aoju.bus.core.annotation.Immutable; +import org.aoju.bus.core.lang.Charset; import org.aoju.bus.core.lang.Normal; import org.aoju.bus.core.lang.tuple.Quintet; import org.aoju.bus.core.toolkit.StringKit; import org.aoju.bus.health.Memoize; import org.aoju.bus.health.builtin.hardware.AbstractFirmware; -import java.nio.charset.StandardCharsets; import java.util.function.Supplier; /** @@ -69,27 +69,27 @@ private static Quintet queryEfi() { case "rom": data = entry.getByteArrayProperty("vendor"); if (data != null) { - manufacturer = Native.toString(data, StandardCharsets.UTF_8); + manufacturer = Native.toString(data, Charset.UTF_8); } data = entry.getByteArrayProperty("version"); if (data != null) { - version = Native.toString(data, StandardCharsets.UTF_8); + version = Native.toString(data, Charset.UTF_8); } data = entry.getByteArrayProperty("release-date"); if (data != null) { - releaseDate = Native.toString(data, StandardCharsets.UTF_8); + releaseDate = Native.toString(data, Charset.UTF_8); } break; case "chosen": data = entry.getByteArrayProperty("booter-name"); if (data != null) { - name = Native.toString(data, StandardCharsets.UTF_8); + name = Native.toString(data, Charset.UTF_8); } break; case "efi": data = entry.getByteArrayProperty("firmware-abi"); if (data != null) { - description = Native.toString(data, StandardCharsets.UTF_8); + description = Native.toString(data, Charset.UTF_8); } break; default: @@ -106,19 +106,19 @@ private static Quintet queryEfi() { if (StringKit.isBlank(manufacturer)) { data = platformExpert.getByteArrayProperty("manufacturer"); if (data != null) { - manufacturer = Native.toString(data, StandardCharsets.UTF_8); + manufacturer = Native.toString(data, Charset.UTF_8); } } if (StringKit.isBlank(version)) { data = platformExpert.getByteArrayProperty("target-type"); if (data != null) { - version = Native.toString(data, StandardCharsets.UTF_8); + version = Native.toString(data, Charset.UTF_8); } } if (StringKit.isBlank(name)) { data = platformExpert.getByteArrayProperty("device_type"); if (data != null) { - name = Native.toString(data, StandardCharsets.UTF_8); + name = Native.toString(data, Charset.UTF_8); } } platformExpert.release(); diff --git a/bus-health/src/main/java/org/aoju/bus/health/mac/hardware/MacPowerSource.java b/bus-health/src/main/java/org/aoju/bus/health/mac/hardware/MacPowerSource.java index 77f937d048..17b677e1ee 100644 --- a/bus-health/src/main/java/org/aoju/bus/health/mac/hardware/MacPowerSource.java +++ b/bus-health/src/main/java/org/aoju/bus/health/mac/hardware/MacPowerSource.java @@ -160,13 +160,13 @@ public static List getPowerSources() { } psPowerUsageRate = psVoltage * psAmperage; - Boolean bool = smartBattery.getBooleanProperty("ExternalConnected"); - if (bool != null) { - psPowerOnLine = bool; + Boolean value = smartBattery.getBooleanProperty("ExternalConnected"); + if (value != null) { + psPowerOnLine = value; } - bool = smartBattery.getBooleanProperty("IsCharging"); - if (bool != null) { - psCharging = bool; + value = smartBattery.getBooleanProperty("IsCharging"); + if (value != null) { + psCharging = value; } psDischarging = !psCharging; diff --git a/bus-health/src/main/java/org/aoju/bus/health/mac/software/MacFileSystem.java b/bus-health/src/main/java/org/aoju/bus/health/mac/software/MacFileSystem.java index bfe88f35ba..f290561fbe 100644 --- a/bus-health/src/main/java/org/aoju/bus/health/mac/software/MacFileSystem.java +++ b/bus-health/src/main/java/org/aoju/bus/health/mac/software/MacFileSystem.java @@ -40,6 +40,7 @@ import com.sun.jna.platform.mac.SystemB; import com.sun.jna.platform.mac.SystemB.Statfs; import org.aoju.bus.core.annotation.ThreadSafe; +import org.aoju.bus.core.lang.Charset; import org.aoju.bus.core.lang.Normal; import org.aoju.bus.health.Builder; import org.aoju.bus.health.builtin.software.AbstractFileSystem; @@ -49,7 +50,6 @@ import org.aoju.bus.logger.Logger; import java.io.File; -import java.nio.charset.StandardCharsets; import java.nio.file.PathMatcher; import java.util.ArrayList; import java.util.HashMap; @@ -169,9 +169,9 @@ private static List getFileStoreMatching(String nameToMatch, boolea // Byte arrays are null-terminated strings // Get volume and path name, and type - String volume = Native.toString(fs[f].f_mntfromname, StandardCharsets.UTF_8); - String path = Native.toString(fs[f].f_mntonname, StandardCharsets.UTF_8); - String type = Native.toString(fs[f].f_fstypename, StandardCharsets.UTF_8); + String volume = Native.toString(fs[f].f_mntfromname, Charset.UTF_8); + String path = Native.toString(fs[f].f_mntonname, Charset.UTF_8); + String type = Native.toString(fs[f].f_fstypename, Charset.UTF_8); // Skip non-local drives if requested, skip system types final int flags = fs[f].f_flags; diff --git a/bus-health/src/main/java/org/aoju/bus/health/mac/software/MacOSProcess.java b/bus-health/src/main/java/org/aoju/bus/health/mac/software/MacOSProcess.java index d31f797314..9b890829d8 100644 --- a/bus-health/src/main/java/org/aoju/bus/health/mac/software/MacOSProcess.java +++ b/bus-health/src/main/java/org/aoju/bus/health/mac/software/MacOSProcess.java @@ -32,6 +32,7 @@ import com.sun.jna.platform.mac.SystemB.Passwd; import com.sun.jna.platform.unix.LibCAPI.size_t; import org.aoju.bus.core.annotation.ThreadSafe; +import org.aoju.bus.core.lang.Charset; import org.aoju.bus.core.lang.Normal; import org.aoju.bus.core.lang.tuple.Pair; import org.aoju.bus.health.Memoize; @@ -43,7 +44,6 @@ import org.aoju.bus.health.mac.drivers.ThreadInfo; import org.aoju.bus.logger.Logger; -import java.nio.charset.StandardCharsets; import java.util.*; import java.util.function.Supplier; @@ -359,7 +359,7 @@ public boolean updateAttributes() { } if (this.name.isEmpty()) { // pbi_comm contains first 16 characters of name - this.name = Native.toString(taskAllInfo.pbsd.pbi_comm, StandardCharsets.UTF_8); + this.name = Native.toString(taskAllInfo.pbsd.pbi_comm, Charset.UTF_8); } switch (taskAllInfo.pbsd.pbi_status) { @@ -421,7 +421,7 @@ public boolean updateAttributes() { } try (Struct.CloseableVnodePathInfo vpi = new Struct.CloseableVnodePathInfo()) { if (0 < SystemB.INSTANCE.proc_pidinfo(getProcessID(), SystemB.PROC_PIDVNODEPATHINFO, 0, vpi, vpi.size())) { - this.currentWorkingDirectory = Native.toString(vpi.pvi_cdir.vip_path, StandardCharsets.US_ASCII); + this.currentWorkingDirectory = Native.toString(vpi.pvi_cdir.vip_path, Charset.US_ASCII); } } return true; diff --git a/bus-health/src/main/java/org/aoju/bus/health/unix/freebsd/drivers/Who.java b/bus-health/src/main/java/org/aoju/bus/health/unix/freebsd/drivers/Who.java index 2d8bc7314a..c61b8c1a92 100644 --- a/bus-health/src/main/java/org/aoju/bus/health/unix/freebsd/drivers/Who.java +++ b/bus-health/src/main/java/org/aoju/bus/health/unix/freebsd/drivers/Who.java @@ -27,11 +27,11 @@ import com.sun.jna.Native; import org.aoju.bus.core.annotation.ThreadSafe; +import org.aoju.bus.core.lang.Charset; import org.aoju.bus.health.builtin.software.OSSession; import org.aoju.bus.health.unix.CLibrary; import org.aoju.bus.health.unix.FreeBsdLibc; -import java.nio.charset.StandardCharsets; import java.util.ArrayList; import java.util.List; @@ -60,9 +60,9 @@ public static synchronized List queryUtxent() { // Iterate while ((ut = LIBC.getutxent()) != null) { if (ut.ut_type == CLibrary.USER_PROCESS || ut.ut_type == CLibrary.LOGIN_PROCESS) { - String user = Native.toString(ut.ut_user, StandardCharsets.US_ASCII); - String device = Native.toString(ut.ut_line, StandardCharsets.US_ASCII); - String host = Native.toString(ut.ut_host, StandardCharsets.US_ASCII); + String user = Native.toString(ut.ut_user, Charset.US_ASCII); + String device = Native.toString(ut.ut_line, Charset.US_ASCII); + String host = Native.toString(ut.ut_host, Charset.US_ASCII); long loginTime = ut.ut_tv.tv_sec * 1000L + ut.ut_tv.tv_usec / 1000L; // Sanity check. If errors, default to who command line if (user.isEmpty() || device.isEmpty() || loginTime < 0 || loginTime > System.currentTimeMillis()) { diff --git a/bus-health/src/main/java/org/aoju/bus/health/unix/solaris/KstatKit.java b/bus-health/src/main/java/org/aoju/bus/health/unix/solaris/KstatKit.java index f68f9c6a40..dfd1b4f65d 100644 --- a/bus-health/src/main/java/org/aoju/bus/health/unix/solaris/KstatKit.java +++ b/bus-health/src/main/java/org/aoju/bus/health/unix/solaris/KstatKit.java @@ -38,12 +38,12 @@ import com.sun.jna.platform.unix.solaris.LibKstat.KstatNamed; import org.aoju.bus.core.annotation.GuardeBy; import org.aoju.bus.core.annotation.ThreadSafe; +import org.aoju.bus.core.lang.Charset; import org.aoju.bus.core.toolkit.ThreadKit; import org.aoju.bus.health.Formats; import org.aoju.bus.health.unix.solaris.software.SolarisOperatingSystem; import org.aoju.bus.logger.Logger; -import java.nio.charset.StandardCharsets; import java.util.ArrayList; import java.util.Arrays; import java.util.List; @@ -69,6 +69,103 @@ private KstatKit() { } + /** + * Convenience method for {@link LibKstat#kstat_data_lookup} with String return + * values. Searches the kstat's data section for the record with the specified + * name. This operation is valid only for kstat types which have named data + * records. Currently, only the KSTAT_TYPE_NAMED and KSTAT_TYPE_TIMER kstats + * have named data records. + * + * @param ksp The kstat to search + * @param name The key for the name-value pair, or name of the timer as + * applicable + * @return The value as a String. + */ + public static String dataLookupString(Kstat ksp, String name) { + if (ksp.ks_type != LibKstat.KSTAT_TYPE_NAMED && ksp.ks_type != LibKstat.KSTAT_TYPE_TIMER) { + throw new IllegalArgumentException("Not a kstat_named or kstat_timer kstat."); + } + Pointer p = LibKstat.INSTANCE.kstat_data_lookup(ksp, name); + if (p == null) { + Logger.debug("Failed to lookup kstat value for key {}", name); + return ""; + } + KstatNamed data = new KstatNamed(p); + switch (data.data_type) { + case LibKstat.KSTAT_DATA_CHAR: + return Native.toString(data.value.charc, Charset.UTF_8); + case LibKstat.KSTAT_DATA_INT32: + return Integer.toString(data.value.i32); + case LibKstat.KSTAT_DATA_UINT32: + return Formats.toUnsignedString(data.value.ui32); + case LibKstat.KSTAT_DATA_INT64: + return Long.toString(data.value.i64); + case LibKstat.KSTAT_DATA_UINT64: + return Formats.toUnsignedString(data.value.ui64); + case LibKstat.KSTAT_DATA_STRING: + return data.value.str.addr.getString(0); + default: + Logger.error("Unimplemented kstat data type {}", data.data_type); + return ""; + } + } + + /** + * Lock the Kstat chain for use by this object until it's closed. + * + * @return A locked copy of the chain. It should be unlocked/released when you + * are done with it with {@link KstatChain#close()}. + */ + public static synchronized KstatChain openChain() { + CHAIN.lock(); + if (kstatCtl == null) { + kstatCtl = LibKstat.INSTANCE.kstat_open(); + } + return new KstatChain(kstatCtl); + } + + /** + * Convenience method for {@link LibKstat#kstat_data_lookup} with numeric return + * values. Searches the kstat's data section for the record with the specified + * name. This operation is valid only for kstat types which have named data + * records. Currently, only the KSTAT_TYPE_NAMED and KSTAT_TYPE_TIMER kstats + * have named data records. + * + * @param ksp The kstat to search + * @param name The key for the name-value pair, or name of the timer as + * applicable + * @return The value as a long. If the data type is a character or string type, + * returns 0 and logs an error. + */ + public static long dataLookupLong(Kstat ksp, String name) { + if (ksp.ks_type != LibKstat.KSTAT_TYPE_NAMED && ksp.ks_type != LibKstat.KSTAT_TYPE_TIMER) { + throw new IllegalArgumentException("Not a kstat_named or kstat_timer kstat."); + } + Pointer p = LibKstat.INSTANCE.kstat_data_lookup(ksp, name); + if (p == null) { + if (Logger.isDebug()) { + Logger.debug("Failed lo lookup kstat value on {}:{}:{} for key {}", + Native.toString(ksp.ks_module, Charset.US_ASCII), ksp.ks_instance, + Native.toString(ksp.ks_name, Charset.US_ASCII), name); + } + return 0L; + } + KstatNamed data = new KstatNamed(p); + switch (data.data_type) { + case LibKstat.KSTAT_DATA_INT32: + return data.value.i32; + case LibKstat.KSTAT_DATA_UINT32: + return Formats.getUnsignedInt(data.value.ui32); + case LibKstat.KSTAT_DATA_INT64: + return data.value.i64; + case LibKstat.KSTAT_DATA_UINT64: + return data.value.ui64; + default: + Logger.error("Unimplemented or non-numeric kstat data type {}", data.data_type); + return 0L; + } + } + /** * A copy of the Kstat chain, encapsulating a {@code kstat_ctl_t} object. Only * one thread may actively use this object at any time. @@ -108,8 +205,8 @@ public boolean read(Kstat ksp) { if (LibKstat.EAGAIN != Native.getLastError() || 5 <= ++retry) { if (Logger.isDebug()) { Logger.debug("Failed to read kstat {}:{}:{}", - Native.toString(ksp.ks_module, StandardCharsets.US_ASCII), ksp.ks_instance, - Native.toString(ksp.ks_name, StandardCharsets.US_ASCII)); + Native.toString(ksp.ks_module, Charset.US_ASCII), ksp.ks_instance, + Native.toString(ksp.ks_name, Charset.US_ASCII)); } return false; } @@ -155,9 +252,9 @@ public List lookupAll(String module, int instance, String name) { List kstats = new ArrayList<>(); for (Kstat ksp = LibKstat.INSTANCE.kstat_lookup(localCtlRef, module, instance, name); ksp != null; ksp = ksp .next()) { - if ((module == null || module.equals(Native.toString(ksp.ks_module, StandardCharsets.US_ASCII))) + if ((module == null || module.equals(Native.toString(ksp.ks_module, Charset.US_ASCII))) && (instance < 0 || instance == ksp.ks_instance) - && (name == null || name.equals(Native.toString(ksp.ks_name, StandardCharsets.US_ASCII)))) { + && (name == null || name.equals(Native.toString(ksp.ks_name, Charset.US_ASCII)))) { kstats.add(ksp); } } @@ -188,103 +285,6 @@ public void close() { } } - /** - * Lock the Kstat chain for use by this object until it's closed. - * - * @return A locked copy of the chain. It should be unlocked/released when you - * are done with it with {@link KstatChain#close()}. - */ - public static synchronized KstatChain openChain() { - CHAIN.lock(); - if (kstatCtl == null) { - kstatCtl = LibKstat.INSTANCE.kstat_open(); - } - return new KstatChain(kstatCtl); - } - - /** - * Convenience method for {@link LibKstat#kstat_data_lookup} with String return - * values. Searches the kstat's data section for the record with the specified - * name. This operation is valid only for kstat types which have named data - * records. Currently, only the KSTAT_TYPE_NAMED and KSTAT_TYPE_TIMER kstats - * have named data records. - * - * @param ksp The kstat to search - * @param name The key for the name-value pair, or name of the timer as - * applicable - * @return The value as a String. - */ - public static String dataLookupString(Kstat ksp, String name) { - if (ksp.ks_type != LibKstat.KSTAT_TYPE_NAMED && ksp.ks_type != LibKstat.KSTAT_TYPE_TIMER) { - throw new IllegalArgumentException("Not a kstat_named or kstat_timer kstat."); - } - Pointer p = LibKstat.INSTANCE.kstat_data_lookup(ksp, name); - if (p == null) { - Logger.debug("Failed to lookup kstat value for key {}", name); - return ""; - } - KstatNamed data = new KstatNamed(p); - switch (data.data_type) { - case LibKstat.KSTAT_DATA_CHAR: - return Native.toString(data.value.charc, StandardCharsets.UTF_8); - case LibKstat.KSTAT_DATA_INT32: - return Integer.toString(data.value.i32); - case LibKstat.KSTAT_DATA_UINT32: - return Formats.toUnsignedString(data.value.ui32); - case LibKstat.KSTAT_DATA_INT64: - return Long.toString(data.value.i64); - case LibKstat.KSTAT_DATA_UINT64: - return Formats.toUnsignedString(data.value.ui64); - case LibKstat.KSTAT_DATA_STRING: - return data.value.str.addr.getString(0); - default: - Logger.error("Unimplemented kstat data type {}", data.data_type); - return ""; - } - } - - /** - * Convenience method for {@link LibKstat#kstat_data_lookup} with numeric return - * values. Searches the kstat's data section for the record with the specified - * name. This operation is valid only for kstat types which have named data - * records. Currently, only the KSTAT_TYPE_NAMED and KSTAT_TYPE_TIMER kstats - * have named data records. - * - * @param ksp The kstat to search - * @param name The key for the name-value pair, or name of the timer as - * applicable - * @return The value as a long. If the data type is a character or string type, - * returns 0 and logs an error. - */ - public static long dataLookupLong(Kstat ksp, String name) { - if (ksp.ks_type != LibKstat.KSTAT_TYPE_NAMED && ksp.ks_type != LibKstat.KSTAT_TYPE_TIMER) { - throw new IllegalArgumentException("Not a kstat_named or kstat_timer kstat."); - } - Pointer p = LibKstat.INSTANCE.kstat_data_lookup(ksp, name); - if (p == null) { - if (Logger.isDebug()) { - Logger.debug("Failed lo lookup kstat value on {}:{}:{} for key {}", - Native.toString(ksp.ks_module, StandardCharsets.US_ASCII), ksp.ks_instance, - Native.toString(ksp.ks_name, StandardCharsets.US_ASCII), name); - } - return 0L; - } - KstatNamed data = new KstatNamed(p); - switch (data.data_type) { - case LibKstat.KSTAT_DATA_INT32: - return data.value.i32; - case LibKstat.KSTAT_DATA_UINT32: - return Formats.getUnsignedInt(data.value.ui32); - case LibKstat.KSTAT_DATA_INT64: - return data.value.i64; - case LibKstat.KSTAT_DATA_UINT64: - return data.value.ui64; - default: - Logger.error("Unimplemented or non-numeric kstat data type {}", data.data_type); - return 0L; - } - } - /** * Query Kstat2 with a single map * diff --git a/bus-health/src/main/java/org/aoju/bus/health/unix/solaris/drivers/Who.java b/bus-health/src/main/java/org/aoju/bus/health/unix/solaris/drivers/Who.java index c779c0a380..965035dca8 100644 --- a/bus-health/src/main/java/org/aoju/bus/health/unix/solaris/drivers/Who.java +++ b/bus-health/src/main/java/org/aoju/bus/health/unix/solaris/drivers/Who.java @@ -27,11 +27,11 @@ import com.sun.jna.Native; import org.aoju.bus.core.annotation.ThreadSafe; +import org.aoju.bus.core.lang.Charset; import org.aoju.bus.health.builtin.software.OSSession; import org.aoju.bus.health.unix.CLibrary; import org.aoju.bus.health.unix.SolarisLibc; -import java.nio.charset.StandardCharsets; import java.util.ArrayList; import java.util.List; @@ -60,9 +60,9 @@ public static synchronized List queryUtxent() { // Iterate while ((ut = LIBC.getutxent()) != null) { if (ut.ut_type == CLibrary.USER_PROCESS || ut.ut_type == CLibrary.LOGIN_PROCESS) { - String user = Native.toString(ut.ut_user, StandardCharsets.US_ASCII); - String device = Native.toString(ut.ut_line, StandardCharsets.US_ASCII); - String host = Native.toString(ut.ut_host, StandardCharsets.US_ASCII); + String user = Native.toString(ut.ut_user, Charset.US_ASCII); + String device = Native.toString(ut.ut_line, Charset.US_ASCII); + String host = Native.toString(ut.ut_host, Charset.US_ASCII); long loginTime = ut.ut_tv.tv_sec.longValue() * 1000L + ut.ut_tv.tv_usec.longValue() / 1000L; // Sanity check. If errors, default to who command line if (user.isEmpty() || device.isEmpty() || loginTime < 0 || loginTime > System.currentTimeMillis()) { diff --git a/bus-health/src/main/java/org/aoju/bus/health/windows/WmiKit.java b/bus-health/src/main/java/org/aoju/bus/health/windows/WmiKit.java index aa7f0172ce..2ab8462a36 100644 --- a/bus-health/src/main/java/org/aoju/bus/health/windows/WmiKit.java +++ b/bus-health/src/main/java/org/aoju/bus/health/windows/WmiKit.java @@ -30,6 +30,7 @@ import com.sun.jna.platform.win32.COM.WbemcliUtil.WmiResult; import com.sun.jna.platform.win32.Variant; import org.aoju.bus.core.annotation.ThreadSafe; +import org.aoju.bus.core.lang.Normal; import org.aoju.bus.health.Builder; import java.time.OffsetDateTime; @@ -84,7 +85,7 @@ public static > String queryToString(WmiQuery query) { */ public static > String getString(WmiResult result, T property, int index) { if (result.getCIMType(property) == Wbemcli.CIM_STRING) { - return getStr(result, property, index); + return getObject(result, property, index); } throw new ClassCastException(String.format(CLASS_CAST_MSG, property.name(), "String", result.getCIMType(property), result.getVtType(property))); @@ -104,7 +105,7 @@ public static > String getDateString(WmiResult result, T pr OffsetDateTime dateTime = getDateTime(result, property, index); // Null result returns the Epoch if (dateTime.equals(Builder.UNIX_EPOCH)) { - return ""; + return Normal.EMPTY; } return dateTime.toLocalDate().toString(); } @@ -122,7 +123,7 @@ public static > String getDateString(WmiResult result, T pr */ public static > OffsetDateTime getDateTime(WmiResult result, T property, int index) { if (result.getCIMType(property) == Wbemcli.CIM_DATETIME) { - return Builder.parseCimDateTimeToOffset(getStr(result, property, index)); + return Builder.parseCimDateTimeToOffset(getObject(result, property, index)); } throw new ClassCastException(String.format(CLASS_CAST_MSG, property.name(), "DateTime", result.getCIMType(property), result.getVtType(property))); @@ -140,16 +141,16 @@ public static > OffsetDateTime getDateTime(WmiResult result */ public static > String getRefString(WmiResult result, T property, int index) { if (result.getCIMType(property) == Wbemcli.CIM_REFERENCE) { - return getStr(result, property, index); + return getObject(result, property, index); } throw new ClassCastException(String.format(CLASS_CAST_MSG, property.name(), "Reference", result.getCIMType(property), result.getVtType(property))); } - private static > String getStr(WmiResult result, T property, int index) { + public static > String getObject(WmiResult result, T property, int index) { Object o = result.getValue(property, index); if (o == null) { - return ""; + return Normal.EMPTY; } else if (result.getVtType(property) == Variant.VT_BSTR) { return (String) o; } diff --git a/bus-health/src/main/java/org/aoju/bus/health/windows/drivers/registry/HkeyPerformanceData.java b/bus-health/src/main/java/org/aoju/bus/health/windows/drivers/registry/HkeyPerformanceData.java index a41ad72a49..c0c7ca41f5 100644 --- a/bus-health/src/main/java/org/aoju/bus/health/windows/drivers/registry/HkeyPerformanceData.java +++ b/bus-health/src/main/java/org/aoju/bus/health/windows/drivers/registry/HkeyPerformanceData.java @@ -111,7 +111,7 @@ public static & PerfCounterWildcardQuery.PdhCounterWildcardPr // Iterate object types. long perfObjectOffset = perfData.HeaderLength; - for (int obj = 0; obj < perfData.NumObjectTypes; obj++) { + for (int i = 0; i < perfData.NumObjectTypes; i++) { PERF_OBJECT_TYPE perfObject = new PERF_OBJECT_TYPE(pPerfData.share(perfObjectOffset)); // Some counters will require multiple objects so we iterate until we find the // right one. e.g. Process (230) is by itself but Thread (232) has Process @@ -150,8 +150,8 @@ public static & PerfCounterWildcardQuery.PdhCounterWildcardPr // purposes counterMap.put(counterKeys[0], pPerfData.getWideString(perfInstanceOffset + perfInstance.NameOffset)); - for (int i = 1; i < counterKeys.length; i++) { - T key = counterKeys[i]; + for (int j = 1; j < counterKeys.length; j++) { + T key = counterKeys[j]; int keyIndex = COUNTER_INDEX_MAP.get(key.getCounter()); // All entries in size map have corresponding entry in offset map int size = counterSizeMap.getOrDefault(keyIndex, 0); diff --git a/bus-health/src/main/java/org/aoju/bus/health/windows/hardware/WindowsPowerSource.java b/bus-health/src/main/java/org/aoju/bus/health/windows/hardware/WindowsPowerSource.java index ef7b5fa8dc..87fa216cb5 100644 --- a/bus-health/src/main/java/org/aoju/bus/health/windows/hardware/WindowsPowerSource.java +++ b/bus-health/src/main/java/org/aoju/bus/health/windows/hardware/WindowsPowerSource.java @@ -34,6 +34,7 @@ import com.sun.jna.platform.win32.WinNT.HANDLE; import com.sun.jna.win32.W32APITypeMapper; import org.aoju.bus.core.annotation.ThreadSafe; +import org.aoju.bus.core.lang.Charset; import org.aoju.bus.core.lang.Normal; import org.aoju.bus.health.builtin.ByRef; import org.aoju.bus.health.builtin.Struct; @@ -41,7 +42,6 @@ import org.aoju.bus.health.builtin.hardware.PowerSource; import org.aoju.bus.health.windows.PowrProf; -import java.nio.charset.StandardCharsets; import java.time.LocalDate; import java.util.Arrays; import java.util.List; @@ -202,7 +202,7 @@ private static WindowsPowerSource getPowerSource(String name) { psCapacityUnits = CapacityUnits.MWH; } psChemistry = Native.toString(bi.Chemistry, - StandardCharsets.US_ASCII); + Charset.US_ASCII); psDesignCapacity = bi.DesignedCapacity; psMaxCapacity = bi.FullChargedCapacity; psCycleCount = bi.CycleCount; diff --git a/bus-health/src/main/java/org/aoju/bus/health/windows/software/WindowsNetworkParams.java b/bus-health/src/main/java/org/aoju/bus/health/windows/software/WindowsNetworkParams.java index c5a8a43dec..56260ad9f1 100644 --- a/bus-health/src/main/java/org/aoju/bus/health/windows/software/WindowsNetworkParams.java +++ b/bus-health/src/main/java/org/aoju/bus/health/windows/software/WindowsNetworkParams.java @@ -34,6 +34,7 @@ import com.sun.jna.platform.win32.Kernel32Util; import com.sun.jna.platform.win32.WinError; import org.aoju.bus.core.annotation.ThreadSafe; +import org.aoju.bus.core.lang.Charset; import org.aoju.bus.core.lang.Normal; import org.aoju.bus.core.lang.RegEx; import org.aoju.bus.health.Executor; @@ -41,7 +42,6 @@ import org.aoju.bus.health.builtin.software.AbstractNetworkParams; import org.aoju.bus.logger.Logger; -import java.nio.charset.StandardCharsets; import java.util.ArrayList; import java.util.List; @@ -112,7 +112,7 @@ public String[] getDnsServers() { while (dns != null) { // a char array of size 16. // This array holds an IPv4 address in dotted decimal notation. - String addr = Native.toString(dns.IpAddress.String, StandardCharsets.US_ASCII); + String addr = Native.toString(dns.IpAddress.String, Charset.US_ASCII); int nullPos = addr.indexOf(0); if (nullPos != -1) { addr = addr.substring(0, nullPos); diff --git a/bus-health/src/main/resources/META-INF/health/bus.health.architecture.properties b/bus-health/src/main/resources/META-INF/health/bus.health.architecture.properties index 7c90535fc6..efded80bf8 100644 --- a/bus-health/src/main/resources/META-INF/health/bus.health.architecture.properties +++ b/bus-health/src/main/resources/META-INF/health/bus.health.architecture.properties @@ -1,7 +1,9 @@ # Mapping of family and model to architecture/core + # Intel # See https://en.wikichip.org/wiki/intel/cpuid 15=Netburst + 11.1=Knights Corner 11.0=Knights Ferry 6.167=Rocket Lake @@ -34,7 +36,7 @@ 6.90=Silvermont 6.87=Knights Landing 6.86=Broadwell (Server) -6.85.10=Cooper Lake +6.85.10 Cooper Lake 6.85.7=Cascade Lake 6.85.6=Cascade Lake 6.85.5=Cascade Lake @@ -259,4 +261,5 @@ arm.0xd44=Cortex-X1 arm.0xd49=Neoverse-N2 # Apple apple.0x1b588bb3=ARM64 SoC: Firestorm + Icestorm -apple.0x573b5eec=x86_64 Rosetta 2 (Virtual Westmere) +apple.0xda33d83d=ARM64 SoC: Avalanche + Blizzard +apple.0x573b5eec=x86_64 Rosetta 2 (Virtual Westmere) \ No newline at end of file diff --git a/bus-http/README.md b/bus-http/README.md index c24aba4e40..05f5c63eaf 100644 --- a/bus-http/README.md +++ b/bus-http/README.md @@ -357,7 +357,7 @@ interceptor的使用以及它们各自的优缺点 ```java Httpv http=Httpv.builder() .baseUrl("http://api.example.com") - .addMsgConvertor(new GsonMsgConvertor()); + .addMsgConvertor(new GsonMsgConvertor()) .build(); ``` @@ -445,7 +445,7 @@ Websocket 方法: * `webSocket(Request request, WebSocketListener listener)` Httpv 原生 WebSocket 连接 ```java -Httpv.async("https://api.aoju.org/auth/login") +http.async("https://api.aoju.org/auth/login") .addBodyPara("username","jack") .addBodyPara("password","xxxx") .setOnResponse((HttpResult result)->{ @@ -818,9 +818,9 @@ HttpCall call=http.async("/upload") ```java String url = "https://www.xxx.com"; - byte[] imageContent = FileKit.readBytes("/tmp/test.png"); - Response delegate = FastHttpClient.post() - .url(url) + byte[]imageContent=FileKit.readBytes("/tmp/test.png"); + Response delegate=Httpz.post() + .url(url) .addFile("file", "b.jpg", imageContent) .build() .execute(); diff --git a/bus-http/pom.xml b/bus-http/pom.xml index 23cbb12f28..aaa399cf5b 100755 --- a/bus-http/pom.xml +++ b/bus-http/pom.xml @@ -6,7 +6,7 @@ org.aoju bus-http - 6.5.3 + 6.5.5 jar ${project.artifactId} @@ -43,8 +43,8 @@ UTF-8 17 1.18.24 - 1.2.11 1.7.36 + 1.2.11 @@ -59,6 +59,24 @@ ${lombok.version} true + + ch.qos.logback + logback-classic + ${logback.version} + true + + + slf4j-api + org.slf4j + + + + + org.slf4j + slf4j-api + ${slf4j.version} + true + diff --git a/bus-http/src/main/java/org/aoju/bus/http/Builder.java b/bus-http/src/main/java/org/aoju/bus/http/Builder.java index 40479b921a..533b035da2 100644 --- a/bus-http/src/main/java/org/aoju/bus/http/Builder.java +++ b/bus-http/src/main/java/org/aoju/bus/http/Builder.java @@ -25,7 +25,11 @@ ********************************************************************************/ package org.aoju.bus.http; -import org.aoju.bus.core.io.*; +import org.aoju.bus.core.io.Blending; +import org.aoju.bus.core.io.ByteString; +import org.aoju.bus.core.io.buffer.Buffer; +import org.aoju.bus.core.io.source.BufferSource; +import org.aoju.bus.core.io.source.Source; import org.aoju.bus.core.lang.Normal; import org.aoju.bus.core.lang.Symbol; import org.aoju.bus.http.bodys.ResponseBody; @@ -74,7 +78,7 @@ public class Builder { /** * Byte order marks. */ - private static final AbstractBlending UNICODE_BOMS = AbstractBlending.of( + private static final Blending UNICODE_BOMS = Blending.of( ByteString.decodeHex("efbbbf"), // UTF-8 ByteString.decodeHex("feff"), // UTF-16BE ByteString.decodeHex("fffe"), // UTF-16LE diff --git a/bus-http/src/main/java/org/aoju/bus/http/Callback.java b/bus-http/src/main/java/org/aoju/bus/http/Callback.java index 33e711d592..106b42706c 100644 --- a/bus-http/src/main/java/org/aoju/bus/http/Callback.java +++ b/bus-http/src/main/java/org/aoju/bus/http/Callback.java @@ -44,7 +44,20 @@ public interface Callback { * @param call 调用者信息 * @param ex 异常信息 */ - void onFailure(NewCall call, IOException ex); + default void onFailure(NewCall call, IOException ex) { + + } + + /** + * 失败回调信息 + * + * @param newCall 回调信息 + * @param exception 异常 + * @param id 当前请求标识 + */ + default void onFailure(NewCall newCall, Exception exception, String id) { + + } /** * 当远程服务器成功返回HTTP响应时调用。回调可以继续使用{@link Response#body}读取响应体响应仍然是 @@ -56,16 +69,7 @@ public interface Callback { * @param response 响应体 * @throws IOException 异常信息 */ - void onResponse(NewCall call, Response response) throws IOException; - - /** - * 失败回调信息 - * - * @param newCall 回调信息 - * @param exception 异常 - * @param id 当前请求标识 - */ - default void onFailure(NewCall newCall, Exception exception, String id) { + default void onResponse(NewCall call, Response response) throws IOException { } diff --git a/bus-http/src/main/java/org/aoju/bus/http/Headers.java b/bus-http/src/main/java/org/aoju/bus/http/Headers.java index 7439c1e4ee..e9c35e4c0f 100644 --- a/bus-http/src/main/java/org/aoju/bus/http/Headers.java +++ b/bus-http/src/main/java/org/aoju/bus/http/Headers.java @@ -25,8 +25,8 @@ ********************************************************************************/ package org.aoju.bus.http; -import org.aoju.bus.core.io.Buffer; import org.aoju.bus.core.io.ByteString; +import org.aoju.bus.core.io.buffer.Buffer; import org.aoju.bus.core.lang.Http; import org.aoju.bus.core.lang.Normal; import org.aoju.bus.core.lang.Symbol; diff --git a/bus-http/src/main/java/org/aoju/bus/http/Httpd.java b/bus-http/src/main/java/org/aoju/bus/http/Httpd.java index f64ddfe571..d0494e4902 100644 --- a/bus-http/src/main/java/org/aoju/bus/http/Httpd.java +++ b/bus-http/src/main/java/org/aoju/bus/http/Httpd.java @@ -25,8 +25,8 @@ ********************************************************************************/ package org.aoju.bus.http; -import org.aoju.bus.core.io.Sink; -import org.aoju.bus.core.io.Source; +import org.aoju.bus.core.io.sink.Sink; +import org.aoju.bus.core.io.source.Source; import org.aoju.bus.http.accord.ConnectionPool; import org.aoju.bus.http.accord.ConnectionSuite; import org.aoju.bus.http.accord.Exchange; diff --git a/bus-http/src/main/java/org/aoju/bus/http/NewCall.java b/bus-http/src/main/java/org/aoju/bus/http/NewCall.java index 1632cdebd5..41de51ada5 100644 --- a/bus-http/src/main/java/org/aoju/bus/http/NewCall.java +++ b/bus-http/src/main/java/org/aoju/bus/http/NewCall.java @@ -25,7 +25,7 @@ ********************************************************************************/ package org.aoju.bus.http; -import org.aoju.bus.core.io.Timeout; +import org.aoju.bus.core.io.timout.Timeout; import org.aoju.bus.http.bodys.ResponseBody; import java.io.IOException; diff --git a/bus-http/src/main/java/org/aoju/bus/http/RealCall.java b/bus-http/src/main/java/org/aoju/bus/http/RealCall.java index a2c1ecdb3e..51c5a7b454 100644 --- a/bus-http/src/main/java/org/aoju/bus/http/RealCall.java +++ b/bus-http/src/main/java/org/aoju/bus/http/RealCall.java @@ -25,7 +25,7 @@ ********************************************************************************/ package org.aoju.bus.http; -import org.aoju.bus.core.io.Timeout; +import org.aoju.bus.core.io.timout.Timeout; import org.aoju.bus.core.lang.Normal; import org.aoju.bus.core.toolkit.IoKit; import org.aoju.bus.http.accord.ConnectInterceptor; diff --git a/bus-http/src/main/java/org/aoju/bus/http/Response.java b/bus-http/src/main/java/org/aoju/bus/http/Response.java index d8fe964791..86aae2404b 100644 --- a/bus-http/src/main/java/org/aoju/bus/http/Response.java +++ b/bus-http/src/main/java/org/aoju/bus/http/Response.java @@ -25,8 +25,8 @@ ********************************************************************************/ package org.aoju.bus.http; -import org.aoju.bus.core.io.Buffer; -import org.aoju.bus.core.io.BufferSource; +import org.aoju.bus.core.io.buffer.Buffer; +import org.aoju.bus.core.io.source.BufferSource; import org.aoju.bus.core.lang.Header; import org.aoju.bus.core.lang.Http; import org.aoju.bus.core.lang.Symbol; diff --git a/bus-http/src/main/java/org/aoju/bus/http/UnoUrl.java b/bus-http/src/main/java/org/aoju/bus/http/UnoUrl.java index 58a32f8098..6ca48ac452 100644 --- a/bus-http/src/main/java/org/aoju/bus/http/UnoUrl.java +++ b/bus-http/src/main/java/org/aoju/bus/http/UnoUrl.java @@ -25,7 +25,7 @@ ********************************************************************************/ package org.aoju.bus.http; -import org.aoju.bus.core.io.Buffer; +import org.aoju.bus.core.io.buffer.Buffer; import org.aoju.bus.core.lang.Charset; import org.aoju.bus.core.lang.Http; import org.aoju.bus.core.lang.Normal; diff --git a/bus-http/src/main/java/org/aoju/bus/http/accord/Exchange.java b/bus-http/src/main/java/org/aoju/bus/http/accord/Exchange.java index b7e5acee21..3d82a4a4ac 100644 --- a/bus-http/src/main/java/org/aoju/bus/http/accord/Exchange.java +++ b/bus-http/src/main/java/org/aoju/bus/http/accord/Exchange.java @@ -25,7 +25,11 @@ ********************************************************************************/ package org.aoju.bus.http.accord; -import org.aoju.bus.core.io.*; +import org.aoju.bus.core.io.buffer.Buffer; +import org.aoju.bus.core.io.sink.AssignSink; +import org.aoju.bus.core.io.sink.Sink; +import org.aoju.bus.core.io.source.AssignSource; +import org.aoju.bus.core.io.source.Source; import org.aoju.bus.core.toolkit.IoKit; import org.aoju.bus.http.Headers; import org.aoju.bus.http.NewCall; @@ -221,7 +225,7 @@ public void noRequestBody() { /** * 完成时触发事件的请求正文 */ - private class RequestBodySink extends DelegateSink { + private class RequestBodySink extends AssignSink { private boolean completed; /** * 要写入的确切字节数,如果未知,则为 -1L @@ -284,7 +288,7 @@ private IOException complete(IOException e) { /** * 完成时触发事件的响应主体 */ - class ResponseBodySource extends DelegateSource { + class ResponseBodySource extends AssignSource { private final long contentLength; private long bytesReceived; private boolean completed; diff --git a/bus-http/src/main/java/org/aoju/bus/http/accord/RealConnection.java b/bus-http/src/main/java/org/aoju/bus/http/accord/RealConnection.java index 5f6e697864..26939ebf77 100644 --- a/bus-http/src/main/java/org/aoju/bus/http/accord/RealConnection.java +++ b/bus-http/src/main/java/org/aoju/bus/http/accord/RealConnection.java @@ -27,8 +27,8 @@ import org.aoju.bus.core.Version; import org.aoju.bus.core.exception.RevisedException; -import org.aoju.bus.core.io.BufferSink; -import org.aoju.bus.core.io.BufferSource; +import org.aoju.bus.core.io.sink.BufferSink; +import org.aoju.bus.core.io.source.BufferSource; import org.aoju.bus.core.lang.Header; import org.aoju.bus.core.lang.Http; import org.aoju.bus.core.lang.Symbol; diff --git a/bus-http/src/main/java/org/aoju/bus/http/accord/Transmitter.java b/bus-http/src/main/java/org/aoju/bus/http/accord/Transmitter.java index 8241f66d75..f709b0dd91 100644 --- a/bus-http/src/main/java/org/aoju/bus/http/accord/Transmitter.java +++ b/bus-http/src/main/java/org/aoju/bus/http/accord/Transmitter.java @@ -25,8 +25,8 @@ ********************************************************************************/ package org.aoju.bus.http.accord; -import org.aoju.bus.core.io.AsyncTimeout; -import org.aoju.bus.core.io.Timeout; +import org.aoju.bus.core.io.timout.AsyncTimeout; +import org.aoju.bus.core.io.timout.Timeout; import org.aoju.bus.core.toolkit.IoKit; import org.aoju.bus.http.*; import org.aoju.bus.http.accord.platform.Platform; diff --git a/bus-http/src/main/java/org/aoju/bus/http/accord/platform/AndroidPlatform.java b/bus-http/src/main/java/org/aoju/bus/http/accord/platform/AndroidPlatform.java index f93d49fd31..4fcfef12d0 100644 --- a/bus-http/src/main/java/org/aoju/bus/http/accord/platform/AndroidPlatform.java +++ b/bus-http/src/main/java/org/aoju/bus/http/accord/platform/AndroidPlatform.java @@ -401,14 +401,14 @@ public X509Certificate findByIssuerAndSignature(X509Certificate cert) { } @Override - public boolean equals(Object obj) { - if (obj == this) { + public boolean equals(Object object) { + if (object == this) { return true; } - if (!(obj instanceof CustomTrustRootIndex)) { + if (!(object instanceof CustomTrustRootIndex)) { return false; } - CustomTrustRootIndex that = (CustomTrustRootIndex) obj; + CustomTrustRootIndex that = (CustomTrustRootIndex) object; return trustManager.equals(that.trustManager) && findByIssuerAndSignatureMethod.equals(that.findByIssuerAndSignatureMethod); } diff --git a/bus-http/src/main/java/org/aoju/bus/http/accord/platform/Platform.java b/bus-http/src/main/java/org/aoju/bus/http/accord/platform/Platform.java index 50712d621e..ef0242c771 100644 --- a/bus-http/src/main/java/org/aoju/bus/http/accord/platform/Platform.java +++ b/bus-http/src/main/java/org/aoju/bus/http/accord/platform/Platform.java @@ -25,7 +25,7 @@ ********************************************************************************/ package org.aoju.bus.http.accord.platform; -import org.aoju.bus.core.io.Buffer; +import org.aoju.bus.core.io.buffer.Buffer; import org.aoju.bus.core.lang.Http; import org.aoju.bus.http.Protocol; import org.aoju.bus.http.secure.BasicCertificateChainCleaner; diff --git a/bus-http/src/main/java/org/aoju/bus/http/bodys/FormBody.java b/bus-http/src/main/java/org/aoju/bus/http/bodys/FormBody.java index 6711bb4c96..df4e3c7434 100644 --- a/bus-http/src/main/java/org/aoju/bus/http/bodys/FormBody.java +++ b/bus-http/src/main/java/org/aoju/bus/http/bodys/FormBody.java @@ -25,8 +25,8 @@ ********************************************************************************/ package org.aoju.bus.http.bodys; -import org.aoju.bus.core.io.Buffer; -import org.aoju.bus.core.io.BufferSink; +import org.aoju.bus.core.io.buffer.Buffer; +import org.aoju.bus.core.io.sink.BufferSink; import org.aoju.bus.core.lang.MediaType; import org.aoju.bus.core.lang.Symbol; import org.aoju.bus.http.UnoUrl; diff --git a/bus-http/src/main/java/org/aoju/bus/http/bodys/MultipartBody.java b/bus-http/src/main/java/org/aoju/bus/http/bodys/MultipartBody.java index cd5cdaf78e..2d68ca4cf2 100644 --- a/bus-http/src/main/java/org/aoju/bus/http/bodys/MultipartBody.java +++ b/bus-http/src/main/java/org/aoju/bus/http/bodys/MultipartBody.java @@ -25,9 +25,9 @@ ********************************************************************************/ package org.aoju.bus.http.bodys; -import org.aoju.bus.core.io.Buffer; -import org.aoju.bus.core.io.BufferSink; import org.aoju.bus.core.io.ByteString; +import org.aoju.bus.core.io.buffer.Buffer; +import org.aoju.bus.core.io.sink.BufferSink; import org.aoju.bus.core.lang.Header; import org.aoju.bus.core.lang.MediaType; import org.aoju.bus.core.lang.Symbol; diff --git a/bus-http/src/main/java/org/aoju/bus/http/bodys/RealResponseBody.java b/bus-http/src/main/java/org/aoju/bus/http/bodys/RealResponseBody.java index cc83c3ed5a..a41af8cbf4 100644 --- a/bus-http/src/main/java/org/aoju/bus/http/bodys/RealResponseBody.java +++ b/bus-http/src/main/java/org/aoju/bus/http/bodys/RealResponseBody.java @@ -25,7 +25,7 @@ ********************************************************************************/ package org.aoju.bus.http.bodys; -import org.aoju.bus.core.io.BufferSource; +import org.aoju.bus.core.io.source.BufferSource; import org.aoju.bus.core.lang.MediaType; /** diff --git a/bus-http/src/main/java/org/aoju/bus/http/bodys/RequestBody.java b/bus-http/src/main/java/org/aoju/bus/http/bodys/RequestBody.java index 22a8d494d1..1dd2b56c01 100644 --- a/bus-http/src/main/java/org/aoju/bus/http/bodys/RequestBody.java +++ b/bus-http/src/main/java/org/aoju/bus/http/bodys/RequestBody.java @@ -25,9 +25,9 @@ ********************************************************************************/ package org.aoju.bus.http.bodys; -import org.aoju.bus.core.io.BufferSink; import org.aoju.bus.core.io.ByteString; -import org.aoju.bus.core.io.Source; +import org.aoju.bus.core.io.sink.BufferSink; +import org.aoju.bus.core.io.source.Source; import org.aoju.bus.core.lang.Charset; import org.aoju.bus.core.lang.MediaType; import org.aoju.bus.core.toolkit.IoKit; diff --git a/bus-http/src/main/java/org/aoju/bus/http/bodys/ResponseBody.java b/bus-http/src/main/java/org/aoju/bus/http/bodys/ResponseBody.java index f4468621d5..1292159099 100644 --- a/bus-http/src/main/java/org/aoju/bus/http/bodys/ResponseBody.java +++ b/bus-http/src/main/java/org/aoju/bus/http/bodys/ResponseBody.java @@ -25,9 +25,9 @@ ********************************************************************************/ package org.aoju.bus.http.bodys; -import org.aoju.bus.core.io.Buffer; -import org.aoju.bus.core.io.BufferSource; import org.aoju.bus.core.io.ByteString; +import org.aoju.bus.core.io.buffer.Buffer; +import org.aoju.bus.core.io.source.BufferSource; import org.aoju.bus.core.lang.Charset; import org.aoju.bus.core.lang.MediaType; import org.aoju.bus.core.toolkit.IoKit; diff --git a/bus-http/src/main/java/org/aoju/bus/http/cache/Cache.java b/bus-http/src/main/java/org/aoju/bus/http/cache/Cache.java index 0f56911019..31b0a392bd 100644 --- a/bus-http/src/main/java/org/aoju/bus/http/cache/Cache.java +++ b/bus-http/src/main/java/org/aoju/bus/http/cache/Cache.java @@ -25,7 +25,14 @@ ********************************************************************************/ package org.aoju.bus.http.cache; -import org.aoju.bus.core.io.*; +import org.aoju.bus.core.io.ByteString; +import org.aoju.bus.core.io.buffer.Buffer; +import org.aoju.bus.core.io.sink.AssignSink; +import org.aoju.bus.core.io.sink.BufferSink; +import org.aoju.bus.core.io.sink.Sink; +import org.aoju.bus.core.io.source.AssignSource; +import org.aoju.bus.core.io.source.BufferSource; +import org.aoju.bus.core.io.source.Source; import org.aoju.bus.core.lang.Header; import org.aoju.bus.core.lang.Http; import org.aoju.bus.core.lang.MediaType; @@ -108,11 +115,7 @@ public void trackResponse(CacheStrategy cacheStrategy) { * @param maxSize 缓存的最大大小(以字节为单位) */ public Cache(File directory, long maxSize) { - this(directory, maxSize, FileSystem.SYSTEM); - } - - Cache(File directory, long maxSize, FileSystem fileSystem) { - this.cache = DiskLruCache.create(fileSystem, directory, VERSION, ENTRY_COUNT, maxSize); + this.cache = DiskLruCache.create(directory, VERSION, ENTRY_COUNT, maxSize); } public static String key(UnoUrl url) { @@ -625,7 +628,7 @@ private static class CacheResponseBody extends ResponseBody { this.contentLength = contentLength; Source source = snapshot.getSource(ENTRY_BODY); - bodySource = IoKit.buffer(new DelegateSource(source) { + bodySource = IoKit.buffer(new AssignSource(source) { @Override public void close() throws IOException { snapshot.close(); @@ -663,7 +666,7 @@ private class CacheRequestImpl implements CacheRequest { CacheRequestImpl(final DiskLruCache.Editor editor) { this.editor = editor; this.cacheOut = editor.newSink(ENTRY_BODY); - this.body = new DelegateSink(cacheOut) { + this.body = new AssignSink(cacheOut) { @Override public void close() throws IOException { synchronized (Cache.this) { diff --git a/bus-http/src/main/java/org/aoju/bus/http/cache/CacheInterceptor.java b/bus-http/src/main/java/org/aoju/bus/http/cache/CacheInterceptor.java index 3846d4f8f0..b9d8e7cd64 100644 --- a/bus-http/src/main/java/org/aoju/bus/http/cache/CacheInterceptor.java +++ b/bus-http/src/main/java/org/aoju/bus/http/cache/CacheInterceptor.java @@ -25,7 +25,12 @@ ********************************************************************************/ package org.aoju.bus.http.cache; -import org.aoju.bus.core.io.*; +import org.aoju.bus.core.io.buffer.Buffer; +import org.aoju.bus.core.io.sink.BufferSink; +import org.aoju.bus.core.io.sink.Sink; +import org.aoju.bus.core.io.source.BufferSource; +import org.aoju.bus.core.io.source.Source; +import org.aoju.bus.core.io.timout.Timeout; import org.aoju.bus.core.lang.Header; import org.aoju.bus.core.lang.Http; import org.aoju.bus.core.lang.Symbol; diff --git a/bus-http/src/main/java/org/aoju/bus/http/cache/CacheRequest.java b/bus-http/src/main/java/org/aoju/bus/http/cache/CacheRequest.java index c68afd9e67..921e5ee791 100644 --- a/bus-http/src/main/java/org/aoju/bus/http/cache/CacheRequest.java +++ b/bus-http/src/main/java/org/aoju/bus/http/cache/CacheRequest.java @@ -25,7 +25,7 @@ ********************************************************************************/ package org.aoju.bus.http.cache; -import org.aoju.bus.core.io.Sink; +import org.aoju.bus.core.io.sink.Sink; import java.io.IOException; diff --git a/bus-http/src/main/java/org/aoju/bus/http/cache/DiskLruCache.java b/bus-http/src/main/java/org/aoju/bus/http/cache/DiskLruCache.java index 69e9c3598c..b3fb61c405 100644 --- a/bus-http/src/main/java/org/aoju/bus/http/cache/DiskLruCache.java +++ b/bus-http/src/main/java/org/aoju/bus/http/cache/DiskLruCache.java @@ -25,8 +25,11 @@ ********************************************************************************/ package org.aoju.bus.http.cache; -import org.aoju.bus.core.io.FileSystem; -import org.aoju.bus.core.io.*; +import org.aoju.bus.core.io.sink.BufferSink; +import org.aoju.bus.core.io.sink.FaultHideSink; +import org.aoju.bus.core.io.sink.Sink; +import org.aoju.bus.core.io.source.BufferSource; +import org.aoju.bus.core.io.source.Source; import org.aoju.bus.core.lang.Normal; import org.aoju.bus.core.lang.Symbol; import org.aoju.bus.core.toolkit.IoKit; @@ -63,8 +66,6 @@ public class DiskLruCache implements Closeable, Flushable { private static final String DIRTY = "DIRTY"; private static final String REMOVE = "REMOVE"; private static final String READ = "READ"; - - final FileSystem fileSystem; /** * 缓存存储其数据的目录 */ @@ -100,9 +101,8 @@ public class DiskLruCache implements Closeable, Flushable { */ private long nextSequenceNumber = 0; - DiskLruCache(FileSystem fileSystem, File directory, int appVersion, int valueCount, long maxSize, + DiskLruCache(File directory, int appVersion, int valueCount, long maxSize, Executor executor) { - this.fileSystem = fileSystem; this.directory = directory; this.appVersion = appVersion; this.journalFile = new File(directory, JOURNAL_FILE); @@ -116,15 +116,16 @@ public class DiskLruCache implements Closeable, Flushable { /** * 创建一个驻留在{@code directory}中的缓存。此缓存在第一次访问时惰性初始化,如果它不存在,将创建它. * - * @param fileSystem 读写文件 * @param directory 一个可写目录 * @param appVersion 版本信息 * @param valueCount 每个缓存条目的值数目. * @param maxSize 此缓存应用于存储的最大字节数 * @return the disk cache */ - public static DiskLruCache create(FileSystem fileSystem, File directory, int appVersion, - int valueCount, long maxSize) { + public static DiskLruCache create(File directory, + int appVersion, + int valueCount, + long maxSize) { if (maxSize <= 0) { throw new IllegalArgumentException("maxSize <= 0"); } @@ -135,7 +136,7 @@ public static DiskLruCache create(FileSystem fileSystem, File directory, int app Executor executor = new ThreadPoolExecutor(0, 1, 60L, TimeUnit.SECONDS, new LinkedBlockingQueue<>(), Builder.threadFactory("Httpd DiskLruCache", true)); - return new DiskLruCache(fileSystem, directory, appVersion, valueCount, maxSize, executor); + return new DiskLruCache(directory, appVersion, valueCount, maxSize, executor); } public synchronized void initialize() throws IOException { @@ -146,16 +147,17 @@ public synchronized void initialize() throws IOException { } // 如果存在bkp文件,就使用它 - if (fileSystem.exists(journalFileBackup)) { + if (journalFileBackup.exists()) { // 如果日志文件也存在,删除备份文件 - if (fileSystem.exists(journalFile)) { - fileSystem.delete(journalFileBackup); + if (journalFile.exists()) { + journalFileBackup.delete(); } else { - fileSystem.rename(journalFileBackup, journalFile); + journalFile.delete(); + journalFileBackup.renameTo(journalFile); } } - if (fileSystem.exists(journalFile)) { + if (journalFile.exists()) { try { readJournal(); processJournal(); @@ -181,7 +183,7 @@ public synchronized void initialize() throws IOException { } private void readJournal() throws IOException { - try (BufferSource source = IoKit.buffer(fileSystem.source(journalFile))) { + try (BufferSource source = IoKit.buffer(IoKit.source(journalFile))) { String magic = source.readUtf8LineStrict(); String version = source.readUtf8LineStrict(); String appVersionString = source.readUtf8LineStrict(); @@ -256,7 +258,7 @@ private void readJournalLine(String line) throws IOException { } private BufferSink newJournalWriter() throws FileNotFoundException { - Sink fileSink = fileSystem.appendingSink(journalFile); + Sink fileSink = IoKit.appendingSink(journalFile); Sink faultHidingSink = new FaultHideSink(fileSink) { @Override protected void onException(IOException e) { @@ -273,7 +275,7 @@ protected void onException(IOException e) { * @throws IOException 异常 */ private void processJournal() throws IOException { - fileSystem.delete(journalFileTmp); + journalFileTmp.delete(); for (Iterator i = lruEntries.values().iterator(); i.hasNext(); ) { Entry entry = i.next(); if (null == entry.currentEditor) { @@ -283,8 +285,8 @@ private void processJournal() throws IOException { } else { entry.currentEditor = null; for (int t = 0; t < valueCount; t++) { - fileSystem.delete(entry.cleanFiles[t]); - fileSystem.delete(entry.dirtyFiles[t]); + entry.cleanFiles[t].delete(); + entry.dirtyFiles[t].delete(); } i.remove(); } @@ -301,7 +303,7 @@ synchronized void rebuildJournal() throws IOException { journalWriter.close(); } - try (BufferSink writer = IoKit.buffer(fileSystem.sink(journalFileTmp))) { + try (BufferSink writer = IoKit.buffer(IoKit.sink(journalFileTmp))) { writer.writeUtf8(MAGIC).writeByte(Symbol.C_LF); writer.writeUtf8(VERSION_1).writeByte(Symbol.C_LF); writer.writeDecimalLong(appVersion).writeByte(Symbol.C_LF); @@ -322,11 +324,19 @@ synchronized void rebuildJournal() throws IOException { } } - if (fileSystem.exists(journalFile)) { - fileSystem.rename(journalFile, journalFileBackup); + if (journalFile.exists()) { + journalFileBackup.delete(); + if (!journalFile.renameTo(journalFileBackup)) { + throw new IOException("failed to rename " + journalFile + " to " + journalFileBackup); + } + } + + journalFile.delete(); + if (!journalFileTmp.renameTo(journalFile)) { + throw new IOException("failed to rename " + journalFileTmp + " to " + journalFile); } - fileSystem.rename(journalFileTmp, journalFile); - fileSystem.delete(journalFileBackup); + + journalFileBackup.delete(); journalWriter = newJournalWriter(); hasJournalErrors = false; @@ -447,198 +457,91 @@ public void close() { } } - public class Editor { - final Entry entry; - final boolean[] written; - private boolean done; - - Editor(Entry entry) { - this.entry = entry; - this.written = (entry.readable) ? null : new boolean[valueCount]; - } - - void detach() { - if (entry.currentEditor == this) { - for (int i = 0; i < valueCount; i++) { - try { - fileSystem.delete(entry.dirtyFiles[i]); - } catch (IOException e) { - - } - } - entry.currentEditor = null; - } + synchronized void completeEdit(Editor editor, boolean success) throws IOException { + Entry entry = editor.entry; + if (entry.currentEditor != editor) { + throw new IllegalStateException(); } - public Source newSource(int index) { - synchronized (DiskLruCache.this) { - if (done) { - throw new IllegalStateException(); - } - if (!entry.readable || entry.currentEditor != this) { - return null; + // 如果这个编辑是第一次创建条目,那么每个索引必须有一个值 + if (success && !entry.readable) { + for (int i = 0; i < valueCount; i++) { + if (!editor.written[i]) { + editor.abort(); + throw new IllegalStateException("Newly created entry didn't create value for index " + i); } - try { - return fileSystem.source(entry.cleanFiles[index]); - } catch (FileNotFoundException e) { - return null; + if (!entry.dirtyFiles[i].exists()) { + editor.abort(); + return; } } } - public Sink newSink(int index) { - synchronized (DiskLruCache.this) { - if (done) { - throw new IllegalStateException(); - } - if (entry.currentEditor != this) { - return IoKit.blackhole(); - } - if (!entry.readable) { - written[index] = true; - } - File dirtyFile = entry.dirtyFiles[index]; - Sink sink; - try { - sink = fileSystem.sink(dirtyFile); - } catch (FileNotFoundException e) { - return IoKit.blackhole(); - } - return new FaultHideSink(sink) { - @Override - protected void onException(IOException e) { - synchronized (DiskLruCache.this) { - detach(); + for (int i = 0; i < valueCount; i++) { + File dirty = entry.dirtyFiles[i]; + if (success) { + if (dirty.exists()) { + File clean = entry.cleanFiles[i]; + if (journalFile.exists()) { + clean.delete(); + if (!dirty.renameTo(clean)) { + throw new IOException("failed to rename " + dirty + " to " + clean); } } - }; - } - } - - public void commit() throws IOException { - synchronized (DiskLruCache.this) { - if (done) { - throw new IllegalStateException(); - } - if (entry.currentEditor == this) { - completeEdit(this, true); + long oldLength = entry.lengths[i]; + long newLength = clean.length(); + entry.lengths[i] = newLength; + size = size - oldLength + newLength; } - done = true; + } else { + dirty.delete(); } } - /** - * 中止这个编辑。这释放了编辑锁,因此可以在同一个键上启动另一个编辑 - * - * @throws IOException 异常 - */ - public void abort() throws IOException { - synchronized (DiskLruCache.this) { - if (done) { - throw new IllegalStateException(); - } - if (entry.currentEditor == this) { - completeEdit(this, false); - } - done = true; + redundantOpCount++; + entry.currentEditor = null; + if (entry.readable | success) { + entry.readable = true; + journalWriter.writeUtf8(CLEAN).writeByte(Symbol.C_SPACE); + journalWriter.writeUtf8(entry.key); + entry.writeLengths(journalWriter); + journalWriter.writeByte(Symbol.C_LF); + if (success) { + entry.sequenceNumber = nextSequenceNumber++; } + } else { + lruEntries.remove(entry.key); + journalWriter.writeUtf8(REMOVE).writeByte(Symbol.C_SPACE); + journalWriter.writeUtf8(entry.key); + journalWriter.writeByte(Symbol.C_LF); } + journalWriter.flush(); - public void abortUnlessCommitted() { - synchronized (DiskLruCache.this) { - if (!done && entry.currentEditor == this) { - try { - completeEdit(this, false); - } catch (IOException ignored) { - } - } - } + if (size > maxSize || journalRebuildRequired()) { + executor.execute(cleanupRunnable); } } - private class Entry { - final String key; - - /** - * Lengths of this entry's files. - */ - final long[] lengths; - final File[] cleanFiles; - final File[] dirtyFiles; - - boolean readable; - - Editor currentEditor; - - long sequenceNumber; - - Entry(String key) { - this.key = key; - - lengths = new long[valueCount]; - cleanFiles = new File[valueCount]; - dirtyFiles = new File[valueCount]; - - StringBuilder fileBuilder = new StringBuilder(key).append(Symbol.C_DOT); - int truncateTo = fileBuilder.length(); - for (int i = 0; i < valueCount; i++) { - fileBuilder.append(i); - cleanFiles[i] = new File(directory, fileBuilder.toString()); - fileBuilder.append(".tmp"); - dirtyFiles[i] = new File(directory, fileBuilder.toString()); - fileBuilder.setLength(truncateTo); - } + boolean removeEntry(Entry entry) throws IOException { + if (null != entry.currentEditor) { + entry.currentEditor.detach(); } - void setLengths(String[] strings) throws IOException { - if (strings.length != valueCount) { - throw invalidLengths(strings); - } - - try { - for (int i = 0; i < strings.length; i++) { - lengths[i] = Long.parseLong(strings[i]); - } - } catch (NumberFormatException e) { - throw invalidLengths(strings); - } + for (int i = 0; i < valueCount; i++) { + entry.cleanFiles[i].delete(); + size -= entry.lengths[i]; + entry.lengths[i] = 0; } - void writeLengths(BufferSink writer) throws IOException { - for (long length : lengths) { - writer.writeByte(Symbol.C_SPACE).writeDecimalLong(length); - } - } + redundantOpCount++; + journalWriter.writeUtf8(REMOVE).writeByte(Symbol.C_SPACE).writeUtf8(entry.key).writeByte(Symbol.C_LF); + lruEntries.remove(entry.key); - private IOException invalidLengths(String[] strings) throws IOException { - throw new IOException("unexpected journal line: " + Arrays.toString(strings)); + if (journalRebuildRequired()) { + executor.execute(cleanupRunnable); } - Snapshot snapshot() { - if (!Thread.holdsLock(DiskLruCache.this)) throw new AssertionError(); - - Source[] sources = new Source[valueCount]; - long[] lengths = this.lengths.clone(); - try { - for (int i = 0; i < valueCount; i++) { - sources[i] = fileSystem.source(cleanFiles[i]); - } - return new Snapshot(key, sequenceNumber, sources, lengths); - } catch (FileNotFoundException e) { - for (int i = 0; i < valueCount; i++) { - if (null != sources[i]) { - IoKit.close(sources[i]); - } else { - break; - } - } - try { - removeEntry(this); - } catch (IOException ignored) { - } - return null; - } - } + return true; } private final Runnable cleanupRunnable = new Runnable() { @@ -770,64 +673,14 @@ public synchronized long size() throws IOException { return size; } - synchronized void completeEdit(Editor editor, boolean success) throws IOException { - Entry entry = editor.entry; - if (entry.currentEditor != editor) { - throw new IllegalStateException(); - } - - // 如果这个编辑是第一次创建条目,那么每个索引必须有一个值 - if (success && !entry.readable) { - for (int i = 0; i < valueCount; i++) { - if (!editor.written[i]) { - editor.abort(); - throw new IllegalStateException("Newly created entry didn't create value for index " + i); - } - if (!fileSystem.exists(entry.dirtyFiles[i])) { - editor.abort(); - return; - } - } - } - - for (int i = 0; i < valueCount; i++) { - File dirty = entry.dirtyFiles[i]; - if (success) { - if (fileSystem.exists(dirty)) { - File clean = entry.cleanFiles[i]; - fileSystem.rename(dirty, clean); - long oldLength = entry.lengths[i]; - long newLength = fileSystem.size(clean); - entry.lengths[i] = newLength; - size = size - oldLength + newLength; - } - } else { - fileSystem.delete(dirty); - } - } - - redundantOpCount++; - entry.currentEditor = null; - if (entry.readable | success) { - entry.readable = true; - journalWriter.writeUtf8(CLEAN).writeByte(Symbol.C_SPACE); - journalWriter.writeUtf8(entry.key); - entry.writeLengths(journalWriter); - journalWriter.writeByte(Symbol.C_LF); - if (success) { - entry.sequenceNumber = nextSequenceNumber++; - } - } else { - lruEntries.remove(entry.key); - journalWriter.writeUtf8(REMOVE).writeByte(Symbol.C_SPACE); - journalWriter.writeUtf8(entry.key); - journalWriter.writeByte(Symbol.C_LF); - } - journalWriter.flush(); - - if (size > maxSize || journalRebuildRequired()) { - executor.execute(cleanupRunnable); - } + /** + * 关闭缓存并删除其所有存储值。这将删除缓存目录中的所有文件,包括没有由缓存创建的文件 + * + * @throws IOException 异常 + */ + public void delete() throws IOException { + close(); + this.deleteContents(directory); } /** @@ -863,26 +716,19 @@ public synchronized boolean remove(String key) throws IOException { return removed; } - boolean removeEntry(Entry entry) throws IOException { - if (null != entry.currentEditor) { - entry.currentEditor.detach(); - } - - for (int i = 0; i < valueCount; i++) { - fileSystem.delete(entry.cleanFiles[i]); - size -= entry.lengths[i]; - entry.lengths[i] = 0; + public void deleteContents(File directory) throws IOException { + File[] files = directory.listFiles(); + if (null == files) { + throw new IOException("not a readable directory: " + directory); } - - redundantOpCount++; - journalWriter.writeUtf8(REMOVE).writeByte(Symbol.C_SPACE).writeUtf8(entry.key).writeByte(Symbol.C_LF); - lruEntries.remove(entry.key); - - if (journalRebuildRequired()) { - executor.execute(cleanupRunnable); + for (File file : files) { + if (file.isDirectory()) { + deleteContents(file); + } + if (!file.delete()) { + throw new IOException("failed to delete " + file); + } } - - return true; } public synchronized boolean isClosed() { @@ -929,14 +775,194 @@ void trimToSize() throws IOException { mostRecentTrimFailed = false; } - /** - * 关闭缓存并删除其所有存储值。这将删除缓存目录中的所有文件,包括没有由缓存创建的文件 - * - * @throws IOException 异常 - */ - public void delete() throws IOException { - close(); - fileSystem.deleteContents(directory); + public class Editor { + final Entry entry; + final boolean[] written; + private boolean done; + + Editor(Entry entry) { + this.entry = entry; + this.written = (entry.readable) ? null : new boolean[valueCount]; + } + + void detach() { + if (entry.currentEditor == this) { + for (int i = 0; i < valueCount; i++) { + entry.dirtyFiles[i].delete(); + } + entry.currentEditor = null; + } + } + + public Source newSource(int index) { + synchronized (DiskLruCache.this) { + if (done) { + throw new IllegalStateException(); + } + if (!entry.readable || entry.currentEditor != this) { + return null; + } + try { + return IoKit.source(entry.cleanFiles[index]); + } catch (FileNotFoundException e) { + return null; + } + } + } + + public Sink newSink(int index) { + synchronized (DiskLruCache.this) { + if (done) { + throw new IllegalStateException(); + } + if (entry.currentEditor != this) { + return IoKit.blackhole(); + } + if (!entry.readable) { + written[index] = true; + } + File dirtyFile = entry.dirtyFiles[index]; + Sink sink; + try { + sink = IoKit.sink(dirtyFile); + } catch (FileNotFoundException e) { + return IoKit.blackhole(); + } + return new FaultHideSink(sink) { + @Override + protected void onException(IOException e) { + synchronized (DiskLruCache.this) { + detach(); + } + } + }; + } + } + + public void commit() throws IOException { + synchronized (DiskLruCache.this) { + if (done) { + throw new IllegalStateException(); + } + if (entry.currentEditor == this) { + completeEdit(this, true); + } + done = true; + } + } + + /** + * 中止这个编辑。这释放了编辑锁,因此可以在同一个键上启动另一个编辑 + * + * @throws IOException 异常 + */ + public void abort() throws IOException { + synchronized (DiskLruCache.this) { + if (done) { + throw new IllegalStateException(); + } + if (entry.currentEditor == this) { + completeEdit(this, false); + } + done = true; + } + } + + public void abortUnlessCommitted() { + synchronized (DiskLruCache.this) { + if (!done && entry.currentEditor == this) { + try { + completeEdit(this, false); + } catch (IOException ignored) { + } + } + } + } + } + + private class Entry { + final String key; + + /** + * Lengths of this entry's files. + */ + final long[] lengths; + final File[] cleanFiles; + final File[] dirtyFiles; + + boolean readable; + + Editor currentEditor; + + long sequenceNumber; + + Entry(String key) { + this.key = key; + + lengths = new long[valueCount]; + cleanFiles = new File[valueCount]; + dirtyFiles = new File[valueCount]; + + StringBuilder fileBuilder = new StringBuilder(key).append(Symbol.C_DOT); + int truncateTo = fileBuilder.length(); + for (int i = 0; i < valueCount; i++) { + fileBuilder.append(i); + cleanFiles[i] = new File(directory, fileBuilder.toString()); + fileBuilder.append(".tmp"); + dirtyFiles[i] = new File(directory, fileBuilder.toString()); + fileBuilder.setLength(truncateTo); + } + } + + void setLengths(String[] strings) throws IOException { + if (strings.length != valueCount) { + throw invalidLengths(strings); + } + + try { + for (int i = 0; i < strings.length; i++) { + lengths[i] = Long.parseLong(strings[i]); + } + } catch (NumberFormatException e) { + throw invalidLengths(strings); + } + } + + void writeLengths(BufferSink writer) throws IOException { + for (long length : lengths) { + writer.writeByte(Symbol.C_SPACE).writeDecimalLong(length); + } + } + + private IOException invalidLengths(String[] strings) throws IOException { + throw new IOException("unexpected journal line: " + Arrays.toString(strings)); + } + + Snapshot snapshot() { + if (!Thread.holdsLock(DiskLruCache.this)) throw new AssertionError(); + + Source[] sources = new Source[valueCount]; + long[] lengths = this.lengths.clone(); + try { + for (int i = 0; i < valueCount; i++) { + sources[i] = IoKit.source(cleanFiles[i]); + } + return new Snapshot(key, sequenceNumber, sources, lengths); + } catch (FileNotFoundException e) { + for (int i = 0; i < valueCount; i++) { + if (null != sources[i]) { + IoKit.close(sources[i]); + } else { + break; + } + } + try { + removeEntry(this); + } catch (IOException ignored) { + } + return null; + } + } } /** @@ -961,7 +987,4 @@ private void validateKey(String key) { } } - - - } diff --git a/bus-http/src/main/java/org/aoju/bus/http/metric/anget/UserAgent.java b/bus-http/src/main/java/org/aoju/bus/http/metric/anget/UserAgent.java index 3bb2cfa86e..57bd7f048f 100644 --- a/bus-http/src/main/java/org/aoju/bus/http/metric/anget/UserAgent.java +++ b/bus-http/src/main/java/org/aoju/bus/http/metric/anget/UserAgent.java @@ -274,17 +274,17 @@ public int hashCode() { } @Override - public boolean equals(Object obj) { - if (this == obj) { + public boolean equals(Object object) { + if (this == object) { return true; } - if (null == obj) { + if (null == object) { return false; } - if (getClass() != obj.getClass()) { + if (getClass() != object.getClass()) { return false; } - final UserAgent other = (UserAgent) obj; + final UserAgent other = (UserAgent) object; if (null == name) { return null == other.name; } else return name.equals(other.name); diff --git a/bus-http/src/main/java/org/aoju/bus/http/metric/http/BridgeInterceptor.java b/bus-http/src/main/java/org/aoju/bus/http/metric/http/BridgeInterceptor.java index 4a508667bb..608c89ccc2 100644 --- a/bus-http/src/main/java/org/aoju/bus/http/metric/http/BridgeInterceptor.java +++ b/bus-http/src/main/java/org/aoju/bus/http/metric/http/BridgeInterceptor.java @@ -26,7 +26,7 @@ package org.aoju.bus.http.metric.http; import org.aoju.bus.core.Version; -import org.aoju.bus.core.io.GzipSource; +import org.aoju.bus.core.io.source.GzipSource; import org.aoju.bus.core.lang.Header; import org.aoju.bus.core.lang.MediaType; import org.aoju.bus.core.lang.Symbol; diff --git a/bus-http/src/main/java/org/aoju/bus/http/metric/http/CallServerInterceptor.java b/bus-http/src/main/java/org/aoju/bus/http/metric/http/CallServerInterceptor.java index f7d7eefdd0..e4693997d1 100644 --- a/bus-http/src/main/java/org/aoju/bus/http/metric/http/CallServerInterceptor.java +++ b/bus-http/src/main/java/org/aoju/bus/http/metric/http/CallServerInterceptor.java @@ -25,7 +25,7 @@ ********************************************************************************/ package org.aoju.bus.http.metric.http; -import org.aoju.bus.core.io.BufferSink; +import org.aoju.bus.core.io.sink.BufferSink; import org.aoju.bus.core.lang.Http; import org.aoju.bus.core.toolkit.IoKit; import org.aoju.bus.http.Builder; diff --git a/bus-http/src/main/java/org/aoju/bus/http/metric/http/Hpack.java b/bus-http/src/main/java/org/aoju/bus/http/metric/http/Hpack.java index d6d5282002..fba65dcaa8 100644 --- a/bus-http/src/main/java/org/aoju/bus/http/metric/http/Hpack.java +++ b/bus-http/src/main/java/org/aoju/bus/http/metric/http/Hpack.java @@ -25,10 +25,10 @@ ********************************************************************************/ package org.aoju.bus.http.metric.http; -import org.aoju.bus.core.io.Buffer; -import org.aoju.bus.core.io.BufferSource; import org.aoju.bus.core.io.ByteString; -import org.aoju.bus.core.io.Source; +import org.aoju.bus.core.io.buffer.Buffer; +import org.aoju.bus.core.io.source.BufferSource; +import org.aoju.bus.core.io.source.Source; import org.aoju.bus.core.lang.Header; import org.aoju.bus.core.lang.Http; import org.aoju.bus.core.lang.Normal; diff --git a/bus-http/src/main/java/org/aoju/bus/http/metric/http/Http1Codec.java b/bus-http/src/main/java/org/aoju/bus/http/metric/http/Http1Codec.java index 396a513858..d6d200ff42 100644 --- a/bus-http/src/main/java/org/aoju/bus/http/metric/http/Http1Codec.java +++ b/bus-http/src/main/java/org/aoju/bus/http/metric/http/Http1Codec.java @@ -25,7 +25,13 @@ ********************************************************************************/ package org.aoju.bus.http.metric.http; -import org.aoju.bus.core.io.*; +import org.aoju.bus.core.io.buffer.Buffer; +import org.aoju.bus.core.io.sink.BufferSink; +import org.aoju.bus.core.io.sink.Sink; +import org.aoju.bus.core.io.source.BufferSource; +import org.aoju.bus.core.io.source.Source; +import org.aoju.bus.core.io.timout.AssignTimeout; +import org.aoju.bus.core.io.timout.Timeout; import org.aoju.bus.core.lang.Http; import org.aoju.bus.core.lang.Normal; import org.aoju.bus.core.lang.Symbol; @@ -295,7 +301,7 @@ private Source newUnknownLengthSource() { * to the default configuration. Use this to avoid unexpected sharing of timeouts between pooled * connections. */ - private void detachTimeout(Delegate timeout) { + private void detachTimeout(AssignTimeout timeout) { Timeout oldDelegate = timeout.delegate(); timeout.setDelegate(Timeout.NONE); oldDelegate.clearDeadline(); @@ -318,7 +324,7 @@ public void skipConnectBody(Response response) throws IOException { * An HTTP request body. */ private class KnownLengthSink implements Sink { - private final Delegate timeout = new Delegate(sink.timeout()); + private final AssignTimeout timeout = new AssignTimeout(sink.timeout()); private boolean closed; @Override @@ -353,7 +359,7 @@ public void close() throws IOException { * to buffer chunks; typically by using a buffered sink with this sink. */ private class ChunkedSink implements Sink { - private final Delegate timeout = new Delegate(sink.timeout()); + private final AssignTimeout timeout = new AssignTimeout(sink.timeout()); private boolean closed; ChunkedSink() { @@ -392,7 +398,7 @@ public synchronized void close() throws IOException { } private abstract class AbstractSource implements Source { - protected final Delegate timeout = new Delegate(source.timeout()); + protected final AssignTimeout timeout = new AssignTimeout(source.timeout()); protected boolean closed; @Override diff --git a/bus-http/src/main/java/org/aoju/bus/http/metric/http/Http2Codec.java b/bus-http/src/main/java/org/aoju/bus/http/metric/http/Http2Codec.java index ebded25e4b..9af8b566fa 100644 --- a/bus-http/src/main/java/org/aoju/bus/http/metric/http/Http2Codec.java +++ b/bus-http/src/main/java/org/aoju/bus/http/metric/http/Http2Codec.java @@ -25,8 +25,8 @@ ********************************************************************************/ package org.aoju.bus.http.metric.http; -import org.aoju.bus.core.io.Sink; -import org.aoju.bus.core.io.Source; +import org.aoju.bus.core.io.sink.Sink; +import org.aoju.bus.core.io.source.Source; import org.aoju.bus.core.lang.Header; import org.aoju.bus.core.lang.Http; import org.aoju.bus.http.*; diff --git a/bus-http/src/main/java/org/aoju/bus/http/metric/http/Http2Connection.java b/bus-http/src/main/java/org/aoju/bus/http/metric/http/Http2Connection.java index c4da1592da..ed5379abdd 100644 --- a/bus-http/src/main/java/org/aoju/bus/http/metric/http/Http2Connection.java +++ b/bus-http/src/main/java/org/aoju/bus/http/metric/http/Http2Connection.java @@ -26,10 +26,10 @@ package org.aoju.bus.http.metric.http; import org.aoju.bus.core.exception.RevisedException; -import org.aoju.bus.core.io.Buffer; -import org.aoju.bus.core.io.BufferSink; -import org.aoju.bus.core.io.BufferSource; import org.aoju.bus.core.io.ByteString; +import org.aoju.bus.core.io.buffer.Buffer; +import org.aoju.bus.core.io.sink.BufferSink; +import org.aoju.bus.core.io.source.BufferSource; import org.aoju.bus.core.lang.Http; import org.aoju.bus.core.lang.Normal; import org.aoju.bus.core.toolkit.IoKit; diff --git a/bus-http/src/main/java/org/aoju/bus/http/metric/http/Http2Reader.java b/bus-http/src/main/java/org/aoju/bus/http/metric/http/Http2Reader.java index 01ca700fa5..78f0fd8a9d 100644 --- a/bus-http/src/main/java/org/aoju/bus/http/metric/http/Http2Reader.java +++ b/bus-http/src/main/java/org/aoju/bus/http/metric/http/Http2Reader.java @@ -25,7 +25,11 @@ ********************************************************************************/ package org.aoju.bus.http.metric.http; -import org.aoju.bus.core.io.*; +import org.aoju.bus.core.io.ByteString; +import org.aoju.bus.core.io.buffer.Buffer; +import org.aoju.bus.core.io.source.BufferSource; +import org.aoju.bus.core.io.source.Source; +import org.aoju.bus.core.io.timout.Timeout; import org.aoju.bus.core.toolkit.StringKit; import org.aoju.bus.http.Headers; import org.aoju.bus.http.Settings; diff --git a/bus-http/src/main/java/org/aoju/bus/http/metric/http/Http2Stream.java b/bus-http/src/main/java/org/aoju/bus/http/metric/http/Http2Stream.java index 8b2d258375..25ac7fc734 100644 --- a/bus-http/src/main/java/org/aoju/bus/http/metric/http/Http2Stream.java +++ b/bus-http/src/main/java/org/aoju/bus/http/metric/http/Http2Stream.java @@ -25,7 +25,12 @@ ********************************************************************************/ package org.aoju.bus.http.metric.http; -import org.aoju.bus.core.io.*; +import org.aoju.bus.core.io.buffer.Buffer; +import org.aoju.bus.core.io.sink.Sink; +import org.aoju.bus.core.io.source.BufferSource; +import org.aoju.bus.core.io.source.Source; +import org.aoju.bus.core.io.timout.AsyncTimeout; +import org.aoju.bus.core.io.timout.Timeout; import org.aoju.bus.http.Builder; import org.aoju.bus.http.Headers; diff --git a/bus-http/src/main/java/org/aoju/bus/http/metric/http/Http2Writer.java b/bus-http/src/main/java/org/aoju/bus/http/metric/http/Http2Writer.java index 9311d6459c..57adf73586 100644 --- a/bus-http/src/main/java/org/aoju/bus/http/metric/http/Http2Writer.java +++ b/bus-http/src/main/java/org/aoju/bus/http/metric/http/Http2Writer.java @@ -25,8 +25,8 @@ ********************************************************************************/ package org.aoju.bus.http.metric.http; -import org.aoju.bus.core.io.Buffer; -import org.aoju.bus.core.io.BufferSink; +import org.aoju.bus.core.io.buffer.Buffer; +import org.aoju.bus.core.io.sink.BufferSink; import org.aoju.bus.core.lang.Normal; import org.aoju.bus.core.toolkit.StringKit; import org.aoju.bus.http.Headers; diff --git a/bus-http/src/main/java/org/aoju/bus/http/metric/http/HttpCodec.java b/bus-http/src/main/java/org/aoju/bus/http/metric/http/HttpCodec.java index c36c15a983..eda85a3e65 100644 --- a/bus-http/src/main/java/org/aoju/bus/http/metric/http/HttpCodec.java +++ b/bus-http/src/main/java/org/aoju/bus/http/metric/http/HttpCodec.java @@ -25,8 +25,8 @@ ********************************************************************************/ package org.aoju.bus.http.metric.http; -import org.aoju.bus.core.io.Sink; -import org.aoju.bus.core.io.Source; +import org.aoju.bus.core.io.sink.Sink; +import org.aoju.bus.core.io.source.Source; import org.aoju.bus.http.Headers; import org.aoju.bus.http.Request; import org.aoju.bus.http.Response; diff --git a/bus-http/src/main/java/org/aoju/bus/http/metric/http/Huffman.java b/bus-http/src/main/java/org/aoju/bus/http/metric/http/Huffman.java index fc569b760d..ca2c263ccc 100644 --- a/bus-http/src/main/java/org/aoju/bus/http/metric/http/Huffman.java +++ b/bus-http/src/main/java/org/aoju/bus/http/metric/http/Huffman.java @@ -25,8 +25,8 @@ ********************************************************************************/ package org.aoju.bus.http.metric.http; -import org.aoju.bus.core.io.BufferSink; import org.aoju.bus.core.io.ByteString; +import org.aoju.bus.core.io.sink.BufferSink; import org.aoju.bus.core.lang.Normal; import java.io.ByteArrayOutputStream; diff --git a/bus-http/src/main/java/org/aoju/bus/http/metric/http/PushObserver.java b/bus-http/src/main/java/org/aoju/bus/http/metric/http/PushObserver.java index b53c84c933..9c9d5ddc68 100644 --- a/bus-http/src/main/java/org/aoju/bus/http/metric/http/PushObserver.java +++ b/bus-http/src/main/java/org/aoju/bus/http/metric/http/PushObserver.java @@ -25,7 +25,7 @@ ********************************************************************************/ package org.aoju.bus.http.metric.http; -import org.aoju.bus.core.io.BufferSource; +import org.aoju.bus.core.io.source.BufferSource; import org.aoju.bus.http.Headers; import org.aoju.bus.http.Protocol; diff --git a/bus-http/src/main/java/org/aoju/bus/http/metric/suffix/SuffixDatabase.java b/bus-http/src/main/java/org/aoju/bus/http/metric/suffix/SuffixDatabase.java index eb084beb1c..c0498b5f66 100644 --- a/bus-http/src/main/java/org/aoju/bus/http/metric/suffix/SuffixDatabase.java +++ b/bus-http/src/main/java/org/aoju/bus/http/metric/suffix/SuffixDatabase.java @@ -25,8 +25,8 @@ ********************************************************************************/ package org.aoju.bus.http.metric.suffix; -import org.aoju.bus.core.io.BufferSource; -import org.aoju.bus.core.io.GzipSource; +import org.aoju.bus.core.io.source.BufferSource; +import org.aoju.bus.core.io.source.GzipSource; import org.aoju.bus.core.lang.Charset; import org.aoju.bus.core.lang.Normal; import org.aoju.bus.core.lang.Symbol; diff --git a/bus-http/src/main/java/org/aoju/bus/http/plugin/httpv/ProgressBody.java b/bus-http/src/main/java/org/aoju/bus/http/plugin/httpv/ProgressBody.java index 4ea9a6fef9..a2517c2edd 100644 --- a/bus-http/src/main/java/org/aoju/bus/http/plugin/httpv/ProgressBody.java +++ b/bus-http/src/main/java/org/aoju/bus/http/plugin/httpv/ProgressBody.java @@ -25,9 +25,9 @@ ********************************************************************************/ package org.aoju.bus.http.plugin.httpv; -import org.aoju.bus.core.io.Buffer; -import org.aoju.bus.core.io.BufferSink; -import org.aoju.bus.core.io.DelegateSink; +import org.aoju.bus.core.io.buffer.Buffer; +import org.aoju.bus.core.io.sink.AssignSink; +import org.aoju.bus.core.io.sink.BufferSink; import org.aoju.bus.core.lang.MediaType; import org.aoju.bus.core.toolkit.IoKit; import org.aoju.bus.http.Callback; @@ -73,7 +73,7 @@ public MediaType contentType() { @Override public void writeTo(BufferSink sink) throws IOException { if (null == bufferedSink) { - bufferedSink = IoKit.buffer(new DelegateSink(sink) { + bufferedSink = IoKit.buffer(new AssignSink(sink) { @Override public void write(Buffer source, long byteCount) throws IOException { diff --git a/bus-http/src/main/java/org/aoju/bus/http/plugin/httpv/ResultBody.java b/bus-http/src/main/java/org/aoju/bus/http/plugin/httpv/ResultBody.java index db09a55a8c..90c55dcca7 100644 --- a/bus-http/src/main/java/org/aoju/bus/http/plugin/httpv/ResultBody.java +++ b/bus-http/src/main/java/org/aoju/bus/http/plugin/httpv/ResultBody.java @@ -26,8 +26,8 @@ package org.aoju.bus.http.plugin.httpv; import org.aoju.bus.core.exception.InstrumentException; -import org.aoju.bus.core.io.Buffer; import org.aoju.bus.core.io.ByteString; +import org.aoju.bus.core.io.buffer.Buffer; import org.aoju.bus.core.lang.*; import org.aoju.bus.http.Callback; import org.aoju.bus.http.Response; diff --git a/bus-http/src/main/java/org/aoju/bus/http/plugin/httpz/FileInterceptor.java b/bus-http/src/main/java/org/aoju/bus/http/plugin/httpz/FileInterceptor.java index 47cb8befa2..f5aa9f814a 100644 --- a/bus-http/src/main/java/org/aoju/bus/http/plugin/httpz/FileInterceptor.java +++ b/bus-http/src/main/java/org/aoju/bus/http/plugin/httpz/FileInterceptor.java @@ -25,10 +25,10 @@ ********************************************************************************/ package org.aoju.bus.http.plugin.httpz; -import org.aoju.bus.core.io.Buffer; -import org.aoju.bus.core.io.BufferSource; -import org.aoju.bus.core.io.DelegateSource; -import org.aoju.bus.core.io.Source; +import org.aoju.bus.core.io.buffer.Buffer; +import org.aoju.bus.core.io.source.AssignSource; +import org.aoju.bus.core.io.source.BufferSource; +import org.aoju.bus.core.io.source.Source; import org.aoju.bus.core.lang.MediaType; import org.aoju.bus.core.toolkit.IoKit; import org.aoju.bus.http.Response; @@ -85,7 +85,7 @@ public BufferSource source() { } private Source source(Source source) { - return new DelegateSource(source) { + return new AssignSource(source) { long downloadLenth = 0L; @Override diff --git a/bus-http/src/main/java/org/aoju/bus/http/plugin/httpz/HttpRequest.java b/bus-http/src/main/java/org/aoju/bus/http/plugin/httpz/HttpRequest.java index 4bcb6e63f5..a87f5d57d3 100644 --- a/bus-http/src/main/java/org/aoju/bus/http/plugin/httpz/HttpRequest.java +++ b/bus-http/src/main/java/org/aoju/bus/http/plugin/httpz/HttpRequest.java @@ -25,8 +25,8 @@ ********************************************************************************/ package org.aoju.bus.http.plugin.httpz; -import org.aoju.bus.core.io.BufferSink; -import org.aoju.bus.core.io.Source; +import org.aoju.bus.core.io.sink.BufferSink; +import org.aoju.bus.core.io.source.Source; import org.aoju.bus.core.lang.MediaType; import org.aoju.bus.core.toolkit.IoKit; import org.aoju.bus.http.Callback; diff --git a/bus-http/src/main/java/org/aoju/bus/http/plugin/httpz/RequestBuilder.java b/bus-http/src/main/java/org/aoju/bus/http/plugin/httpz/RequestBuilder.java index e905794945..2e0f8ed022 100644 --- a/bus-http/src/main/java/org/aoju/bus/http/plugin/httpz/RequestBuilder.java +++ b/bus-http/src/main/java/org/aoju/bus/http/plugin/httpz/RequestBuilder.java @@ -105,9 +105,9 @@ public T addParams(Map paramMap) { return (T) this; } - public T addParams(Object obj) { - if (null != obj) { - Map map = BeanKit.beanToMap(obj); + public T addParams(Object object) { + if (null != object) { + Map map = BeanKit.beanToMap(object); map.forEach((key, val) -> addParams(key, (String) val)); } return (T) this; diff --git a/bus-http/src/main/java/org/aoju/bus/http/socket/RealWebSocket.java b/bus-http/src/main/java/org/aoju/bus/http/socket/RealWebSocket.java index 20651e13dd..2acbe20109 100644 --- a/bus-http/src/main/java/org/aoju/bus/http/socket/RealWebSocket.java +++ b/bus-http/src/main/java/org/aoju/bus/http/socket/RealWebSocket.java @@ -25,9 +25,9 @@ ********************************************************************************/ package org.aoju.bus.http.socket; -import org.aoju.bus.core.io.BufferSink; -import org.aoju.bus.core.io.BufferSource; import org.aoju.bus.core.io.ByteString; +import org.aoju.bus.core.io.sink.BufferSink; +import org.aoju.bus.core.io.source.BufferSource; import org.aoju.bus.core.lang.Header; import org.aoju.bus.core.lang.Http; import org.aoju.bus.core.lang.Normal; diff --git a/bus-http/src/main/java/org/aoju/bus/http/socket/WebSocketProtocol.java b/bus-http/src/main/java/org/aoju/bus/http/socket/WebSocketProtocol.java index aa6eeb314d..d1998a5c54 100644 --- a/bus-http/src/main/java/org/aoju/bus/http/socket/WebSocketProtocol.java +++ b/bus-http/src/main/java/org/aoju/bus/http/socket/WebSocketProtocol.java @@ -25,8 +25,8 @@ ********************************************************************************/ package org.aoju.bus.http.socket; -import org.aoju.bus.core.io.Buffer; import org.aoju.bus.core.io.ByteString; +import org.aoju.bus.core.io.buffer.Buffer; /** * web socket协议信息 diff --git a/bus-http/src/main/java/org/aoju/bus/http/socket/WebSocketReader.java b/bus-http/src/main/java/org/aoju/bus/http/socket/WebSocketReader.java index 4995b34668..48243aaa6b 100644 --- a/bus-http/src/main/java/org/aoju/bus/http/socket/WebSocketReader.java +++ b/bus-http/src/main/java/org/aoju/bus/http/socket/WebSocketReader.java @@ -25,9 +25,9 @@ ********************************************************************************/ package org.aoju.bus.http.socket; -import org.aoju.bus.core.io.Buffer; -import org.aoju.bus.core.io.BufferSource; import org.aoju.bus.core.io.ByteString; +import org.aoju.bus.core.io.buffer.Buffer; +import org.aoju.bus.core.io.source.BufferSource; import org.aoju.bus.core.lang.Normal; import java.io.IOException; diff --git a/bus-http/src/main/java/org/aoju/bus/http/socket/WebSocketWriter.java b/bus-http/src/main/java/org/aoju/bus/http/socket/WebSocketWriter.java index eb052189c7..e9d41780ef 100644 --- a/bus-http/src/main/java/org/aoju/bus/http/socket/WebSocketWriter.java +++ b/bus-http/src/main/java/org/aoju/bus/http/socket/WebSocketWriter.java @@ -25,7 +25,11 @@ ********************************************************************************/ package org.aoju.bus.http.socket; -import org.aoju.bus.core.io.*; +import org.aoju.bus.core.io.ByteString; +import org.aoju.bus.core.io.buffer.Buffer; +import org.aoju.bus.core.io.sink.BufferSink; +import org.aoju.bus.core.io.sink.Sink; +import org.aoju.bus.core.io.timout.Timeout; import java.io.IOException; import java.util.Random; diff --git a/bus-image/pom.xml b/bus-image/pom.xml index 0c3acfad2f..9ae817ac31 100755 --- a/bus-image/pom.xml +++ b/bus-image/pom.xml @@ -6,7 +6,7 @@ org.aoju bus-image - 6.5.3 + 6.5.5 jar ${project.artifactId} diff --git a/bus-image/src/main/java/org/aoju/bus/image/Format.java b/bus-image/src/main/java/org/aoju/bus/image/Format.java index a9c3bc76f2..c2b2d7e3f5 100755 --- a/bus-image/src/main/java/org/aoju/bus/image/Format.java +++ b/bus-image/src/main/java/org/aoju/bus/image/Format.java @@ -497,8 +497,8 @@ private MessageFormat buildMessageFormat(List tokens) { } @Override - public StringBuffer format(Object obj, StringBuffer result, FieldPosition pos) { - return format.format(toArgs((Attributes) obj), result, pos); + public StringBuffer format(Object object, StringBuffer result, FieldPosition pos) { + return format.format(toArgs((Attributes) object), result, pos); } private Object[] toArgs(Attributes attrs) { diff --git a/bus-image/src/main/java/org/aoju/bus/image/galaxy/ConfigurationChange.java b/bus-image/src/main/java/org/aoju/bus/image/galaxy/ConfigurationChange.java index 318a529306..8fb6386a49 100755 --- a/bus-image/src/main/java/org/aoju/bus/image/galaxy/ConfigurationChange.java +++ b/bus-image/src/main/java/org/aoju/bus/image/galaxy/ConfigurationChange.java @@ -44,8 +44,8 @@ public ConfigurationChange(boolean verbose) { this.verbose = verbose; } - public static T nullifyIfNotVerbose(ConfigurationChange diffs, T obj) { - return null != diffs && diffs.isVerbose() ? obj : null; + public static T nullifyIfNotVerbose(ConfigurationChange diffs, T object) { + return null != diffs && diffs.isVerbose() ? object : null; } public static ModifiedObject addModifiedObjectIfVerbose(ConfigurationChange diffs, String dn, ChangeType changeType) { @@ -66,8 +66,8 @@ public static ModifiedObject addModifiedObject(ConfigurationChange diffs, String return object; } - public static void removeLastIfEmpty(ConfigurationChange diffs, ModifiedObject obj) { - if (null != obj && obj.isEmpty()) + public static void removeLastIfEmpty(ConfigurationChange diffs, ModifiedObject object) { + if (null != object && object.isEmpty()) diffs.removeLast(); } @@ -96,10 +96,10 @@ public String toString() { if (isEmpty()) return "[]"; StringBuilder sb = new StringBuilder(objects.size() * Normal._64); - for (ModifiedObject obj : objects) { - sb.append(obj.changeType).append(Symbol.C_SPACE).append(obj.dn).append(Symbol.C_LF); - if (null != obj.attributes) { - for (ModifiedAttribute attr : obj.attributes) { + for (ModifiedObject object : objects) { + sb.append(object.changeType).append(Symbol.C_SPACE).append(object.dn).append(Symbol.C_LF); + if (null != object.attributes) { + for (ModifiedAttribute attr : object.attributes) { sb.append(Symbol.SPACE).append(attr.name).append(": ") .append(attr.removedValues).append("=>") .append(attr.addedValues).append(Symbol.C_LF); diff --git a/bus-image/src/main/java/org/aoju/bus/image/galaxy/Property.java b/bus-image/src/main/java/org/aoju/bus/image/galaxy/Property.java index f3fbaf48fb..dd00d2bf9c 100755 --- a/bus-image/src/main/java/org/aoju/bus/image/galaxy/Property.java +++ b/bus-image/src/main/java/org/aoju/bus/image/galaxy/Property.java @@ -433,15 +433,15 @@ public int hashCode() { } @Override - public boolean equals(Object obj) { - if (this == obj) + public boolean equals(Object object) { + if (this == object) return true; - if (null == obj) + if (null == object) return false; - if (getClass() != obj.getClass()) + if (getClass() != object.getClass()) return false; - Property other = (Property) obj; + Property other = (Property) object; return name.equals(other.name) && value.equals(other.value); } diff --git a/bus-image/src/main/java/org/aoju/bus/image/galaxy/data/BulkData.java b/bus-image/src/main/java/org/aoju/bus/image/galaxy/data/BulkData.java index 317e65c21d..e34c513382 100755 --- a/bus-image/src/main/java/org/aoju/bus/image/galaxy/data/BulkData.java +++ b/bus-image/src/main/java/org/aoju/bus/image/galaxy/data/BulkData.java @@ -217,14 +217,14 @@ public void serializeTo(ObjectOutputStream oos) throws IOException { } @Override - public boolean equals(Object obj) { - if (this == obj) + public boolean equals(Object object) { + if (this == object) return true; - if (null == obj) + if (null == object) return false; - if (getClass() != obj.getClass()) + if (getClass() != object.getClass()) return false; - BulkData other = (BulkData) obj; + BulkData other = (BulkData) object; if (bigEndian != other.bigEndian) return false; if (null == uri) { diff --git a/bus-image/src/main/java/org/aoju/bus/image/galaxy/data/DateRange.java b/bus-image/src/main/java/org/aoju/bus/image/galaxy/data/DateRange.java index 2d3abd4881..47d7d3f9d2 100755 --- a/bus-image/src/main/java/org/aoju/bus/image/galaxy/data/DateRange.java +++ b/bus-image/src/main/java/org/aoju/bus/image/galaxy/data/DateRange.java @@ -56,14 +56,14 @@ public boolean contains(Date when) { } @Override - public boolean equals(Object obj) { - if (obj == this) + public boolean equals(Object object) { + if (object == this) return true; - if (!(obj instanceof DateRange)) + if (!(object instanceof DateRange)) return false; - DateRange other = (DateRange) obj; + DateRange other = (DateRange) object; return (null == start ? null == other.start : start.equals(other.start)) diff --git a/bus-image/src/main/java/org/aoju/bus/image/galaxy/data/Fragments.java b/bus-image/src/main/java/org/aoju/bus/image/galaxy/data/Fragments.java index 53346aff2d..d80ad339fb 100755 --- a/bus-image/src/main/java/org/aoju/bus/image/galaxy/data/Fragments.java +++ b/bus-image/src/main/java/org/aoju/bus/image/galaxy/data/Fragments.java @@ -120,15 +120,15 @@ public byte[] toBytes(VR vr, boolean bigEndian) { } @Override - public boolean equals(Object obj) { - if (this == obj) + public boolean equals(Object object) { + if (this == object) return true; - if (null == obj) + if (null == object) return false; - if (getClass() != obj.getClass()) + if (getClass() != object.getClass()) return false; - Fragments other = (Fragments) obj; + Fragments other = (Fragments) object; if (bigEndian != other.bigEndian) return false; if (vr != other.vr) diff --git a/bus-image/src/main/java/org/aoju/bus/image/galaxy/data/PersonName.java b/bus-image/src/main/java/org/aoju/bus/image/galaxy/data/PersonName.java index 2376091753..3add5fd665 100755 --- a/bus-image/src/main/java/org/aoju/bus/image/galaxy/data/PersonName.java +++ b/bus-image/src/main/java/org/aoju/bus/image/galaxy/data/PersonName.java @@ -201,14 +201,14 @@ public int hashCode() { } @Override - public boolean equals(Object obj) { - if (obj == this) + public boolean equals(Object object) { + if (object == this) return true; - if (!(obj instanceof PersonName)) + if (!(object instanceof PersonName)) return false; - PersonName other = (PersonName) obj; + PersonName other = (PersonName) object; return Arrays.equals(fields, other.fields); } diff --git a/bus-image/src/main/java/org/aoju/bus/image/galaxy/data/ValueSelector.java b/bus-image/src/main/java/org/aoju/bus/image/galaxy/data/ValueSelector.java index 8492f7b480..b83bde1803 100755 --- a/bus-image/src/main/java/org/aoju/bus/image/galaxy/data/ValueSelector.java +++ b/bus-image/src/main/java/org/aoju/bus/image/galaxy/data/ValueSelector.java @@ -98,11 +98,11 @@ public int hashCode() { } @Override - public boolean equals(Object obj) { - if (!(obj instanceof ValueSelector)) + public boolean equals(Object object) { + if (!(object instanceof ValueSelector)) return false; - return toString().equals(obj.toString()); + return toString().equals(object.toString()); } } diff --git a/bus-image/src/main/java/org/aoju/bus/image/metric/TagCamel.java b/bus-image/src/main/java/org/aoju/bus/image/metric/TagCamel.java index 71293fa88e..7f9a1e11f6 100755 --- a/bus-image/src/main/java/org/aoju/bus/image/metric/TagCamel.java +++ b/bus-image/src/main/java/org/aoju/bus/image/metric/TagCamel.java @@ -403,17 +403,17 @@ public String toString() { } @Override - public boolean equals(Object obj) { - if (this == obj) { + public boolean equals(Object object) { + if (this == object) { return true; } - if (null == obj) { + if (null == object) { return false; } - if (getClass() != obj.getClass()) { + if (getClass() != object.getClass()) { return false; } - TagCamel other = (TagCamel) obj; + TagCamel other = (TagCamel) object; if (id != other.id) { return false; } diff --git a/bus-image/src/main/java/org/aoju/bus/image/metric/service/Instance.java b/bus-image/src/main/java/org/aoju/bus/image/metric/service/Instance.java index 2a069bd520..0855ced3df 100755 --- a/bus-image/src/main/java/org/aoju/bus/image/metric/service/Instance.java +++ b/bus-image/src/main/java/org/aoju/bus/image/metric/service/Instance.java @@ -40,7 +40,7 @@ public class Instance implements Serializable { public final String iuid; public final String tsuid; public final String uri; - private Object obj; + private Object object; public Instance(String cuid, String iuid, String tsuid, String uri) { this.cuid = cuid; @@ -50,11 +50,11 @@ public Instance(String cuid, String iuid, String tsuid, String uri) { } public final Object getObject() { - return obj; + return object; } - public final Instance setObject(Object obj) { - this.obj = obj; + public final Instance setObject(Object object) { + this.object = object; return this; } diff --git a/bus-image/src/main/java/org/aoju/bus/image/nimble/SampledSampleModel.java b/bus-image/src/main/java/org/aoju/bus/image/nimble/SampledSampleModel.java index 86cbd8aa8c..d8a58a8ceb 100755 --- a/bus-image/src/main/java/org/aoju/bus/image/nimble/SampledSampleModel.java +++ b/bus-image/src/main/java/org/aoju/bus/image/nimble/SampledSampleModel.java @@ -64,10 +64,10 @@ public SampleModel createSubsetSampleModel(int[] bands) { } @Override - public Object getDataElements(int x, int y, Object obj, DataBuffer data) { + public Object getDataElements(int x, int y, Object object, DataBuffer data) { byte[] ret; - if ((obj instanceof byte[]) && ((byte[]) obj).length == 3) - ret = (byte[]) obj; + if ((object instanceof byte[]) && ((byte[]) object).length == 3) + ret = (byte[]) object; else ret = new byte[3]; DataBufferByte dbb = (DataBufferByte) data; @@ -101,7 +101,7 @@ public int getSampleSize(int band) { } @Override - public void setDataElements(int x, int y, Object obj, DataBuffer data) { + public void setDataElements(int x, int y, Object object, DataBuffer data) { throw new UnsupportedOperationException(); } diff --git a/bus-image/src/main/java/org/aoju/bus/image/plugin/Dcm2Str.java b/bus-image/src/main/java/org/aoju/bus/image/plugin/Dcm2String.java similarity index 96% rename from bus-image/src/main/java/org/aoju/bus/image/plugin/Dcm2Str.java rename to bus-image/src/main/java/org/aoju/bus/image/plugin/Dcm2String.java index 581d63b49b..f051aad573 100755 --- a/bus-image/src/main/java/org/aoju/bus/image/plugin/Dcm2Str.java +++ b/bus-image/src/main/java/org/aoju/bus/image/plugin/Dcm2String.java @@ -43,12 +43,12 @@ * @author Kimi Liu * @since Java 17+ */ -public class Dcm2Str extends SimpleFileVisitor { +public class Dcm2String extends SimpleFileVisitor { private final Format format; private final Attributes cliAttrs; - public Dcm2Str(Format format, Attributes cliAttrs) { + public Dcm2String(Format format, Attributes cliAttrs) { this.format = format; this.cliAttrs = cliAttrs; } diff --git a/bus-limiter/pom.xml b/bus-limiter/pom.xml index 547e1e39bf..1b81d2182b 100755 --- a/bus-limiter/pom.xml +++ b/bus-limiter/pom.xml @@ -6,7 +6,7 @@ org.aoju bus-limiter - 6.5.3 + 6.5.5 jar ${project.artifactId} diff --git a/bus-limiter/src/main/java/org/aoju/bus/limiter/support/peak/jdk/JdkPeakLimiter.java b/bus-limiter/src/main/java/org/aoju/bus/limiter/support/peak/jdk/JdkPeakLimiter.java index 69936a108c..92acd28e24 100755 --- a/bus-limiter/src/main/java/org/aoju/bus/limiter/support/peak/jdk/JdkPeakLimiter.java +++ b/bus-limiter/src/main/java/org/aoju/bus/limiter/support/peak/jdk/JdkPeakLimiter.java @@ -49,7 +49,7 @@ public JdkPeakLimiter(String limiterName) { this.cache = CacheBuilder.newBuilder() .concurrencyLevel(Normal._16) .initialCapacity(2048) - .build(new CacheLoader() { + .build(new CacheLoader<>() { @Override public Semaphore load(CacheKey key) { return new Semaphore(key.max); diff --git a/bus-logger/pom.xml b/bus-logger/pom.xml index 52a1516a2d..22391588a1 100644 --- a/bus-logger/pom.xml +++ b/bus-logger/pom.xml @@ -6,7 +6,7 @@ org.aoju bus-logger - 6.5.3 + 6.5.5 jar ${project.artifactId} @@ -44,7 +44,6 @@ 17 1.7.36 1.2.11 - 1.2.17 2.17.2 1.2 2.4.1 diff --git a/bus-logger/src/main/java/org/aoju/bus/logger/dialect/console/ConsoleLog.java b/bus-logger/src/main/java/org/aoju/bus/logger/dialect/console/ConsoleLog.java index 7fa67abc46..1249e25792 100755 --- a/bus-logger/src/main/java/org/aoju/bus/logger/dialect/console/ConsoleLog.java +++ b/bus-logger/src/main/java/org/aoju/bus/logger/dialect/console/ConsoleLog.java @@ -27,7 +27,7 @@ import org.aoju.bus.core.lang.Assert; import org.aoju.bus.core.lang.Console; -import org.aoju.bus.core.lang.Dict; +import org.aoju.bus.core.lang.Dictionary; import org.aoju.bus.core.lang.Normal; import org.aoju.bus.core.toolkit.DateKit; import org.aoju.bus.core.toolkit.StringKit; @@ -135,13 +135,13 @@ public void log(String fqcn, Level level, Throwable t, String format, Object... return; } - final Dict dict = Dict.create() + final Dictionary dictionary = Dictionary.create() .set("date", DateKit.now()) .set("level", level.toString()) .set("name", this.name) .set("msg", StringKit.format(format, arguments)); - final String logMsg = StringKit.format(logFormat, dict); + final String logMsg = StringKit.format(logFormat, dictionary); if (level.ordinal() >= Level.WARN.ordinal()) { Console.error(t, logMsg); diff --git a/bus-logger/src/main/java/org/aoju/bus/logger/dialect/slf4j/Slf4jLogFactory.java b/bus-logger/src/main/java/org/aoju/bus/logger/dialect/slf4j/Slf4jLogFactory.java index 846f070215..bb1e10f7f0 100755 --- a/bus-logger/src/main/java/org/aoju/bus/logger/dialect/slf4j/Slf4jLogFactory.java +++ b/bus-logger/src/main/java/org/aoju/bus/logger/dialect/slf4j/Slf4jLogFactory.java @@ -25,6 +25,7 @@ ********************************************************************************/ package org.aoju.bus.logger.dialect.slf4j; +import org.aoju.bus.core.lang.Charset; import org.aoju.bus.logger.Log; import org.aoju.bus.logger.LogFactory; import org.slf4j.LoggerFactory; @@ -32,7 +33,6 @@ import java.io.OutputStream; import java.io.PrintStream; -import java.nio.charset.StandardCharsets; /** * SLF4J @@ -66,7 +66,7 @@ public Slf4jLogFactory(boolean failIfNOP) { public void write(int b) { buf.append((char) b); } - }, true, StandardCharsets.US_ASCII)); + }, true, Charset.US_ASCII)); try { if (LoggerFactory.getILoggerFactory() instanceof NOPLoggerFactory) { diff --git a/bus-mapper/pom.xml b/bus-mapper/pom.xml index 9c7aabc714..c1ce07623c 100755 --- a/bus-mapper/pom.xml +++ b/bus-mapper/pom.xml @@ -6,7 +6,7 @@ org.aoju bus-mapper - 6.5.3 + 6.5.5 jar ${project.artifactId} diff --git a/bus-mapper/src/main/java/org/aoju/bus/mapper/additional/delete/DeletePropertyProvider.java b/bus-mapper/src/main/java/org/aoju/bus/mapper/additional/delete/DeletePropertyProvider.java index 1f418082aa..0c3c760795 100644 --- a/bus-mapper/src/main/java/org/aoju/bus/mapper/additional/delete/DeletePropertyProvider.java +++ b/bus-mapper/src/main/java/org/aoju/bus/mapper/additional/delete/DeletePropertyProvider.java @@ -142,8 +142,8 @@ public String deleteInByProperty(MappedStatement ms) { String sqlSegment = "${@" + propertyHelper + "@getColumnByProperty(@java.lang.Class@forName(\"" + entityClassName + "\")," + "@org.aoju.bus.mapper.reflect.Reflector@fnToFieldName(fn))} in" - + "\n" - + "#{obj}\n" + + "\n" + + "#{object}\n" + "\n"; sql.append(sqlSegment); // 逻辑删除的未删除查询条件 diff --git a/bus-mapper/src/main/java/org/aoju/bus/mapper/additional/select/SelectPropertyProvider.java b/bus-mapper/src/main/java/org/aoju/bus/mapper/additional/select/SelectPropertyProvider.java index 88baf38e17..f2806dd0d1 100644 --- a/bus-mapper/src/main/java/org/aoju/bus/mapper/additional/select/SelectPropertyProvider.java +++ b/bus-mapper/src/main/java/org/aoju/bus/mapper/additional/select/SelectPropertyProvider.java @@ -172,8 +172,8 @@ public String selectInByProperty(MappedStatement ms) { String sqlSegment = "${@" + propertyHelper + "@getColumnByProperty(@java.lang.Class@forName(\"" + entityClassName + "\")," + "@org.aoju.bus.mapper.reflect.Reflector@fnToFieldName(fn))} in" - + "\n" - + "#{obj}\n" + + "\n" + + "#{object}\n" + "\n"; sql.append(sqlSegment); // 逻辑删除的未删除查询条件 diff --git a/bus-notify/README.md b/bus-notify/README.md index a9d3ff8ccf..a2870eab6d 100755 --- a/bus-notify/README.md +++ b/bus-notify/README.md @@ -11,7 +11,7 @@ org.aoju bus-notify - 6.5.3 + 6.5.5 ``` diff --git a/bus-notify/pom.xml b/bus-notify/pom.xml index 40b1a50703..d443ce0994 100755 --- a/bus-notify/pom.xml +++ b/bus-notify/pom.xml @@ -6,7 +6,7 @@ org.aoju bus-notify - 6.5.3 + 6.5.5 jar ${project.artifactId} diff --git a/bus-notify/src/main/java/org/aoju/bus/notify/provider/aliyun/AliyunProvider.java b/bus-notify/src/main/java/org/aoju/bus/notify/provider/aliyun/AliyunProvider.java index 401072e230..440a896bc7 100644 --- a/bus-notify/src/main/java/org/aoju/bus/notify/provider/aliyun/AliyunProvider.java +++ b/bus-notify/src/main/java/org/aoju/bus/notify/provider/aliyun/AliyunProvider.java @@ -40,7 +40,6 @@ import javax.crypto.Mac; import javax.crypto.spec.SecretKeySpec; import java.net.URLEncoder; -import java.nio.charset.StandardCharsets; import java.security.InvalidKeyException; import java.security.NoSuchAlgorithmException; import java.util.Base64; @@ -72,7 +71,7 @@ public AliyunProvider(K context) { * @return 编码值 */ protected String specialUrlEncode(String value) { - return URLEncoder.encode(value, StandardCharsets.UTF_8) + return URLEncoder.encode(value, Charset.UTF_8) .replace(Symbol.PLUS, "%20") .replace(Symbol.STAR, "%2A") .replace("%7E", Symbol.TILDE); diff --git a/bus-notify/src/main/java/org/aoju/bus/notify/provider/huawei/HuaweiSmsProvider.java b/bus-notify/src/main/java/org/aoju/bus/notify/provider/huawei/HuaweiSmsProvider.java index 7c176dcd25..9e92d3ec35 100644 --- a/bus-notify/src/main/java/org/aoju/bus/notify/provider/huawei/HuaweiSmsProvider.java +++ b/bus-notify/src/main/java/org/aoju/bus/notify/provider/huawei/HuaweiSmsProvider.java @@ -1,10 +1,7 @@ package org.aoju.bus.notify.provider.huawei; import org.aoju.bus.core.exception.InstrumentException; -import org.aoju.bus.core.lang.Fields; -import org.aoju.bus.core.lang.Header; -import org.aoju.bus.core.lang.MediaType; -import org.aoju.bus.core.lang.ZoneId; +import org.aoju.bus.core.lang.*; import org.aoju.bus.core.toolkit.DateKit; import org.aoju.bus.extra.json.JsonKit; import org.aoju.bus.http.Httpx; @@ -13,7 +10,6 @@ import org.aoju.bus.notify.magic.Message; import org.aoju.bus.notify.provider.AbstractProvider; -import java.nio.charset.StandardCharsets; import java.security.MessageDigest; import java.util.*; @@ -89,7 +85,7 @@ private String buildWsseHeader() { String nonce = UUID.randomUUID().toString().replace("-", ""); String text = nonce + time + context.getAppSecret(); MessageDigest digest = MessageDigest.getInstance("SHA-256"); - digest.update(text.getBytes(StandardCharsets.UTF_8)); + digest.update(text.getBytes(Charset.UTF_8)); String hexDigest = byte2Hex(digest.digest()); String passwordDigestBase64Str = Base64.getEncoder().encodeToString(hexDigest.getBytes()); return String.format(WSSE_HEADER_FORMAT, context.getAppKey(), passwordDigestBase64Str, nonce, time); diff --git a/bus-notify/src/main/java/org/aoju/bus/notify/provider/jpush/JpushSmsProvider.java b/bus-notify/src/main/java/org/aoju/bus/notify/provider/jpush/JpushSmsProvider.java index eb7f13c5fd..59924881e3 100644 --- a/bus-notify/src/main/java/org/aoju/bus/notify/provider/jpush/JpushSmsProvider.java +++ b/bus-notify/src/main/java/org/aoju/bus/notify/provider/jpush/JpushSmsProvider.java @@ -1,5 +1,6 @@ package org.aoju.bus.notify.provider.jpush; +import org.aoju.bus.core.lang.Charset; import org.aoju.bus.core.lang.Header; import org.aoju.bus.core.lang.MediaType; import org.aoju.bus.extra.json.JsonKit; @@ -9,7 +10,6 @@ import org.aoju.bus.notify.magic.Message; import org.aoju.bus.notify.provider.AbstractProvider; -import java.nio.charset.StandardCharsets; import java.util.Base64; import java.util.HashMap; import java.util.Map; @@ -52,7 +52,7 @@ public Message send(JpushProperty entity) { private String getSign() { String origin = context.getAppKey() + ":" + context.getAppSecret(); - return Base64.getEncoder().encodeToString(origin.getBytes(StandardCharsets.UTF_8)); + return Base64.getEncoder().encodeToString(origin.getBytes(Charset.UTF_8)); } } diff --git a/bus-oauth/README.md b/bus-oauth/README.md index 37c3d432c2..730c7a006b 100755 --- a/bus-oauth/README.md +++ b/bus-oauth/README.md @@ -16,7 +16,7 @@ org.aoju bus-oauth - 6.5.3 + 6.5.5 ``` diff --git a/bus-oauth/pom.xml b/bus-oauth/pom.xml index 9bd3b7ed11..aa1c5f78ec 100755 --- a/bus-oauth/pom.xml +++ b/bus-oauth/pom.xml @@ -6,7 +6,7 @@ org.aoju bus-oauth - 6.5.3 + 6.5.5 jar ${project.artifactId} diff --git a/bus-oauth/src/main/java/org/aoju/bus/oauth/provider/AmazonProvider.java b/bus-oauth/src/main/java/org/aoju/bus/oauth/provider/AmazonProvider.java index e145e45b6e..88b5c53a45 100644 --- a/bus-oauth/src/main/java/org/aoju/bus/oauth/provider/AmazonProvider.java +++ b/bus-oauth/src/main/java/org/aoju/bus/oauth/provider/AmazonProvider.java @@ -4,10 +4,7 @@ import org.aoju.bus.cache.metric.ExtendCache; import org.aoju.bus.core.codec.Base64; import org.aoju.bus.core.exception.AuthorizedException; -import org.aoju.bus.core.lang.Algorithm; -import org.aoju.bus.core.lang.Header; -import org.aoju.bus.core.lang.MediaType; -import org.aoju.bus.core.lang.Normal; +import org.aoju.bus.core.lang.*; import org.aoju.bus.core.toolkit.RandomKit; import org.aoju.bus.core.toolkit.UriKit; import org.aoju.bus.http.Httpx; @@ -20,7 +17,6 @@ import org.aoju.bus.oauth.magic.Property; import org.aoju.bus.oauth.metric.OauthScope; -import java.nio.charset.StandardCharsets; import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; import java.util.HashMap; @@ -51,7 +47,7 @@ public static String generateCodeVerifier() { */ public static String generateCodeChallenge(String codeChallengeMethod, String codeVerifier) { if ("S256".equalsIgnoreCase(codeChallengeMethod)) { - return new String(Base64.encode(digest(codeVerifier), true, true), StandardCharsets.US_ASCII); + return new String(Base64.encode(digest(codeVerifier), true, true), Charset.US_ASCII); } else { return codeVerifier; } @@ -61,7 +57,7 @@ public static byte[] digest(String text) { MessageDigest messageDigest; try { messageDigest = MessageDigest.getInstance(Algorithm.SHA256.getValue()); - messageDigest.update(text.getBytes(StandardCharsets.UTF_8)); + messageDigest.update(text.getBytes(Charset.UTF_8)); return messageDigest.digest(); } catch (NoSuchAlgorithmException e) { e.printStackTrace(); diff --git a/bus-oauth/src/main/java/org/aoju/bus/oauth/provider/LinkedinProvider.java b/bus-oauth/src/main/java/org/aoju/bus/oauth/provider/LinkedinProvider.java index 678e910495..57476deedf 100755 --- a/bus-oauth/src/main/java/org/aoju/bus/oauth/provider/LinkedinProvider.java +++ b/bus-oauth/src/main/java/org/aoju/bus/oauth/provider/LinkedinProvider.java @@ -196,8 +196,8 @@ private String getUserEmail(String accessToken) { JSONObject object = JSONObject.parseObject(response); this.checkResponse(object); - Object obj = JSONPath.eval(object, "$['elements'][0]['handle~']['emailAddress']"); - return null == obj ? null : (String) obj; + Object value = JSONPath.eval(object, "$['elements'][0]['handle~']['emailAddress']"); + return null == value ? null : (String) value; } private String getUserName(JSONObject userInfoObject, String nameKey) { diff --git a/bus-office/pom.xml b/bus-office/pom.xml index c735fb639b..203cd2a330 100755 --- a/bus-office/pom.xml +++ b/bus-office/pom.xml @@ -6,7 +6,7 @@ org.aoju bus-office - 6.5.3 + 6.5.5 jar ${project.artifactId} diff --git a/bus-office/src/main/java/org/aoju/bus/office/magic/Props.java b/bus-office/src/main/java/org/aoju/bus/office/magic/Props.java index 1cfd507812..2bd55c507b 100644 --- a/bus-office/src/main/java/org/aoju/bus/office/magic/Props.java +++ b/bus-office/src/main/java/org/aoju/bus/office/magic/Props.java @@ -44,13 +44,13 @@ public final class Props { /** * 从指定对象的属性中获取属性值. * - * @param obj 获取属性的对象. + * @param object 获取属性的对象. * @param propName 要获取的属性名. * @return 包含属性值的可选属性。如果无法检索属性,可选属性将为空. * @throws InstrumentException 如果发生UNO异常。UNO异常将导致 {@link InstrumentException}. */ - public static Optional getProperty(final Object obj, final String propName) { - return getProperty(Lo.qi(XPropertySet.class, obj), propName); + public static Optional getProperty(final Object object, final String propName) { + return getProperty(Lo.qi(XPropertySet.class, object), propName); } /** diff --git a/bus-office/src/main/java/org/aoju/bus/office/support/excel/ExcelSaxKit.java b/bus-office/src/main/java/org/aoju/bus/office/support/excel/ExcelSaxKit.java index 8a6f6916c3..2153933ad5 100755 --- a/bus-office/src/main/java/org/aoju/bus/office/support/excel/ExcelSaxKit.java +++ b/bus-office/src/main/java/org/aoju/bus/office/support/excel/ExcelSaxKit.java @@ -107,7 +107,7 @@ public static Object getDataValue(CellDataType cellDataType, String value, Share case FORMULA: result = StringKit.format("\"{}\"", value); break; - case INLINESTR: + case INLINESTRING: result = new XSSFRichTextString(value).toString(); break; case SSTINDEX: diff --git a/bus-office/src/main/java/org/aoju/bus/office/support/excel/ExcelWriter.java b/bus-office/src/main/java/org/aoju/bus/office/support/excel/ExcelWriter.java index b212d73ee8..1df3507b09 100755 --- a/bus-office/src/main/java/org/aoju/bus/office/support/excel/ExcelWriter.java +++ b/bus-office/src/main/java/org/aoju/bus/office/support/excel/ExcelWriter.java @@ -664,12 +664,12 @@ public ExcelWriter write(Iterable data, Comparator comparator) { Assert.isFalse(this.isClosed, "ExcelWriter has been closed!"); boolean isFirstRow = true; Map map; - for (Object obj : data) { - if (obj instanceof Map) { + for (Object object : data) { + if (object instanceof Map) { map = new TreeMap<>(comparator); - map.putAll((Map) obj); + map.putAll((Map) object); } else { - map = BeanKit.beanToMap(obj, new TreeMap<>(comparator), false, false); + map = BeanKit.beanToMap(object, new TreeMap<>(comparator), false, false); } writeRow(map, isFirstRow); if (isFirstRow) { diff --git a/bus-office/src/main/java/org/aoju/bus/office/support/excel/sax/CellDataType.java b/bus-office/src/main/java/org/aoju/bus/office/support/excel/sax/CellDataType.java index 4280ae0b28..ea22592d2b 100755 --- a/bus-office/src/main/java/org/aoju/bus/office/support/excel/sax/CellDataType.java +++ b/bus-office/src/main/java/org/aoju/bus/office/support/excel/sax/CellDataType.java @@ -50,7 +50,7 @@ public enum CellDataType { /** * 富文本类型 */ - INLINESTR("inlineStr"), + INLINESTRING("inlineString"), /** * 共享字符串索引类型 */ @@ -98,8 +98,8 @@ public static CellDataType of(String name) { return BOOL; } else if (ERROR.name.equals(name)) { return ERROR; - } else if (INLINESTR.name.equals(name)) { - return INLINESTR; + } else if (INLINESTRING.name.equals(name)) { + return INLINESTRING; } else if (SSTINDEX.name.equals(name)) { return SSTINDEX; } else if (FORMULA.name.equals(name)) { diff --git a/bus-opencv/pom.xml b/bus-opencv/pom.xml index 0583343f68..52edcf311a 100755 --- a/bus-opencv/pom.xml +++ b/bus-opencv/pom.xml @@ -6,7 +6,7 @@ org.aoju bus-opencv - 6.5.3 + 6.5.5 jar ${project.artifactId} diff --git a/bus-opencv/src/main/java/org/opencv/core/Point.java b/bus-opencv/src/main/java/org/opencv/core/Point.java index ce493d7400..22943037a2 100644 --- a/bus-opencv/src/main/java/org/opencv/core/Point.java +++ b/bus-opencv/src/main/java/org/opencv/core/Point.java @@ -50,10 +50,10 @@ public int hashCode() { } @Override - public boolean equals(Object obj) { - if (this == obj) return true; - if (!(obj instanceof Point)) return false; - Point it = (Point) obj; + public boolean equals(Object object) { + if (this == object) return true; + if (!(object instanceof Point)) return false; + Point it = (Point) object; return x == it.x && y == it.y; } diff --git a/bus-opencv/src/main/java/org/opencv/core/Point3.java b/bus-opencv/src/main/java/org/opencv/core/Point3.java index 14b91c6b21..922c520246 100644 --- a/bus-opencv/src/main/java/org/opencv/core/Point3.java +++ b/bus-opencv/src/main/java/org/opencv/core/Point3.java @@ -65,10 +65,10 @@ public int hashCode() { } @Override - public boolean equals(Object obj) { - if (this == obj) return true; - if (!(obj instanceof Point3)) return false; - Point3 it = (Point3) obj; + public boolean equals(Object object) { + if (this == object) return true; + if (!(object instanceof Point3)) return false; + Point3 it = (Point3) object; return x == it.x && y == it.y && z == it.z; } diff --git a/bus-opencv/src/main/java/org/opencv/core/Range.java b/bus-opencv/src/main/java/org/opencv/core/Range.java index f7eee4ddc3..d6de3b0664 100644 --- a/bus-opencv/src/main/java/org/opencv/core/Range.java +++ b/bus-opencv/src/main/java/org/opencv/core/Range.java @@ -68,10 +68,10 @@ public int hashCode() { } @Override - public boolean equals(Object obj) { - if (this == obj) return true; - if (!(obj instanceof Range)) return false; - Range it = (Range) obj; + public boolean equals(Object object) { + if (this == object) return true; + if (!(object instanceof Range)) return false; + Range it = (Range) object; return start == it.start && end == it.end; } diff --git a/bus-opencv/src/main/java/org/opencv/core/Rect.java b/bus-opencv/src/main/java/org/opencv/core/Rect.java index c68e818ea4..0c59a69df8 100644 --- a/bus-opencv/src/main/java/org/opencv/core/Rect.java +++ b/bus-opencv/src/main/java/org/opencv/core/Rect.java @@ -90,10 +90,10 @@ public int hashCode() { } @Override - public boolean equals(Object obj) { - if (this == obj) return true; - if (!(obj instanceof Rect)) return false; - Rect it = (Rect) obj; + public boolean equals(Object object) { + if (this == object) return true; + if (!(object instanceof Rect)) return false; + Rect it = (Rect) object; return x == it.x && y == it.y && width == it.width && height == it.height; } diff --git a/bus-opencv/src/main/java/org/opencv/core/Rect2d.java b/bus-opencv/src/main/java/org/opencv/core/Rect2d.java index 4c27869635..3133c6a966 100644 --- a/bus-opencv/src/main/java/org/opencv/core/Rect2d.java +++ b/bus-opencv/src/main/java/org/opencv/core/Rect2d.java @@ -90,10 +90,10 @@ public int hashCode() { } @Override - public boolean equals(Object obj) { - if (this == obj) return true; - if (!(obj instanceof Rect2d)) return false; - Rect2d it = (Rect2d) obj; + public boolean equals(Object object) { + if (this == object) return true; + if (!(object instanceof Rect2d)) return false; + Rect2d it = (Rect2d) object; return x == it.x && y == it.y && width == it.width && height == it.height; } diff --git a/bus-opencv/src/main/java/org/opencv/core/RotatedRect.java b/bus-opencv/src/main/java/org/opencv/core/RotatedRect.java index 05ee3811fe..8720e718c2 100644 --- a/bus-opencv/src/main/java/org/opencv/core/RotatedRect.java +++ b/bus-opencv/src/main/java/org/opencv/core/RotatedRect.java @@ -99,10 +99,10 @@ public int hashCode() { } @Override - public boolean equals(Object obj) { - if (this == obj) return true; - if (!(obj instanceof RotatedRect)) return false; - RotatedRect it = (RotatedRect) obj; + public boolean equals(Object object) { + if (this == object) return true; + if (!(object instanceof RotatedRect)) return false; + RotatedRect it = (RotatedRect) object; return center.equals(it.center) && size.equals(it.size) && angle == it.angle; } diff --git a/bus-opencv/src/main/java/org/opencv/core/Scalar.java b/bus-opencv/src/main/java/org/opencv/core/Scalar.java index 01676e4cb5..4e6c2bca76 100644 --- a/bus-opencv/src/main/java/org/opencv/core/Scalar.java +++ b/bus-opencv/src/main/java/org/opencv/core/Scalar.java @@ -74,10 +74,10 @@ public int hashCode() { } @Override - public boolean equals(Object obj) { - if (this == obj) return true; - if (!(obj instanceof Scalar)) return false; - Scalar it = (Scalar) obj; + public boolean equals(Object object) { + if (this == object) return true; + if (!(object instanceof Scalar)) return false; + Scalar it = (Scalar) object; if (!java.util.Arrays.equals(val, it.val)) return false; return true; } diff --git a/bus-opencv/src/main/java/org/opencv/core/Size.java b/bus-opencv/src/main/java/org/opencv/core/Size.java index f7d69f37cd..68f69073f0 100644 --- a/bus-opencv/src/main/java/org/opencv/core/Size.java +++ b/bus-opencv/src/main/java/org/opencv/core/Size.java @@ -58,10 +58,10 @@ public int hashCode() { } @Override - public boolean equals(Object obj) { - if (this == obj) return true; - if (!(obj instanceof Size)) return false; - Size it = (Size) obj; + public boolean equals(Object object) { + if (this == object) return true; + if (!(object instanceof Size)) return false; + Size it = (Size) object; return width == it.width && height == it.height; } diff --git a/bus-opencv/src/main/java/org/opencv/core/TermCriteria.java b/bus-opencv/src/main/java/org/opencv/core/TermCriteria.java index c67e51ea8d..969288b8c7 100644 --- a/bus-opencv/src/main/java/org/opencv/core/TermCriteria.java +++ b/bus-opencv/src/main/java/org/opencv/core/TermCriteria.java @@ -78,10 +78,10 @@ public int hashCode() { } @Override - public boolean equals(Object obj) { - if (this == obj) return true; - if (!(obj instanceof TermCriteria)) return false; - TermCriteria it = (TermCriteria) obj; + public boolean equals(Object object) { + if (this == object) return true; + if (!(object instanceof TermCriteria)) return false; + TermCriteria it = (TermCriteria) object; return type == it.type && maxCount == it.maxCount && epsilon == it.epsilon; } diff --git a/bus-pager/README.md b/bus-pager/README.md index 39841f8dc6..6115599640 100755 --- a/bus-pager/README.md +++ b/bus-pager/README.md @@ -42,7 +42,7 @@ org.aoju bus-pager - 6.5.3 + 6.5.5 ``` diff --git a/bus-pager/pom.xml b/bus-pager/pom.xml index 5c996bd710..3000d1189e 100755 --- a/bus-pager/pom.xml +++ b/bus-pager/pom.xml @@ -6,7 +6,7 @@ org.aoju bus-pager - 6.5.3 + 6.5.5 jar ${project.artifactId} diff --git a/bus-pay/pom.xml b/bus-pay/pom.xml index a5ea46a6ac..359e64c188 100644 --- a/bus-pay/pom.xml +++ b/bus-pay/pom.xml @@ -6,7 +6,7 @@ org.aoju bus-pay - 6.5.3 + 6.5.5 jar ${project.artifactId} diff --git a/bus-pay/src/main/java/org/aoju/bus/pay/Builder.java b/bus-pay/src/main/java/org/aoju/bus/pay/Builder.java index 9202db525b..09199e9021 100644 --- a/bus-pay/src/main/java/org/aoju/bus/pay/Builder.java +++ b/bus-pay/src/main/java/org/aoju/bus/pay/Builder.java @@ -8,6 +8,7 @@ import org.aoju.bus.core.key.ID; import org.aoju.bus.core.key.Snowflake; import org.aoju.bus.core.lang.Algorithm; +import org.aoju.bus.core.lang.Charset; import org.aoju.bus.core.lang.Http; import org.aoju.bus.core.toolkit.FileKit; import org.aoju.bus.core.toolkit.StringKit; @@ -22,7 +23,6 @@ import java.io.IOException; import java.io.InputStream; import java.net.URLEncoder; -import java.nio.charset.StandardCharsets; import java.security.InvalidKeyException; import java.security.NoSuchAlgorithmException; import java.security.PrivateKey; @@ -93,7 +93,7 @@ public static String md5(String data) { * @return 解密后的数据 */ public static String decryptData(String base64Data, String key) { - return org.aoju.bus.crypto.Builder.aes(md5(key).toLowerCase().getBytes()).decryptStr(base64Data); + return org.aoju.bus.crypto.Builder.aes(md5(key).toLowerCase().getBytes()).decryptString(base64Data); } /** @@ -112,7 +112,7 @@ public static String encryptData(String data, String key) { * * @return 简化的 UUID,去掉了横线 */ - public static String generateStr() { + public static String generateString() { return ID.fastSimpleUUID(); } @@ -189,7 +189,7 @@ public static String createLinkString(Map params, String connStr * @return 编码后的字符串 */ public static String urlEncode(String src) { - return URLEncoder.encode(src, StandardCharsets.UTF_8).replace("+", "%20"); + return URLEncoder.encode(src, Charset.UTF_8).replace("+", "%20"); } /** @@ -382,8 +382,8 @@ public static String getAuthorization(String mchId, String serialNo, String nonc * @return {@link String} 商户私钥 * @throws Exception 异常信息 */ - public static String getPrivateKeyStr(String keyPath) throws Exception { - return Secure.getPrivateKeyStr(getPrivateKey(keyPath)); + public static String getPrivateKeyString(String keyPath) throws Exception { + return Secure.getPrivateKeyString(getPrivateKey(keyPath)); } /** @@ -447,7 +447,7 @@ public static String rsaEncryptOAEP(String data, X509Certificate certificate) th Cipher cipher = Cipher.getInstance("RSA/ECB/OAEPWithSHA-1AndMGF1Padding"); cipher.init(Cipher.ENCRYPT_MODE, certificate.getPublicKey()); - byte[] dataByte = data.getBytes(StandardCharsets.UTF_8); + byte[] dataByte = data.getBytes(Charset.UTF_8); byte[] cipherData = cipher.doFinal(dataByte); return Base64.encode(cipherData); } catch (NoSuchAlgorithmException | NoSuchPaddingException e) { @@ -472,7 +472,7 @@ public static String rsaDecryptOAEP(String cipherText, PrivateKey privateKey) th Cipher cipher = Cipher.getInstance("RSA/ECB/OAEPWithSHA-1AndMGF1Padding"); cipher.init(Cipher.DECRYPT_MODE, privateKey); byte[] data = Base64.decode(cipherText); - return new String(cipher.doFinal(data), StandardCharsets.UTF_8); + return new String(cipher.doFinal(data), Charset.UTF_8); } catch (NoSuchPaddingException | NoSuchAlgorithmException e) { throw new RuntimeException("当前Java环境不支持RSA v1.5/OAEP", e); } catch (InvalidKeyException e) { diff --git a/bus-pay/src/main/java/org/aoju/bus/pay/Secure.java b/bus-pay/src/main/java/org/aoju/bus/pay/Secure.java index c53ab836b8..40817fb41e 100644 --- a/bus-pay/src/main/java/org/aoju/bus/pay/Secure.java +++ b/bus-pay/src/main/java/org/aoju/bus/pay/Secure.java @@ -1,6 +1,7 @@ package org.aoju.bus.pay; import org.aoju.bus.core.codec.Base64; +import org.aoju.bus.core.lang.Charset; import org.aoju.bus.core.toolkit.StringKit; import javax.crypto.Cipher; @@ -9,7 +10,6 @@ import javax.crypto.spec.SecretKeySpec; import java.io.ByteArrayOutputStream; import java.math.BigInteger; -import java.nio.charset.StandardCharsets; import java.security.*; import java.security.interfaces.RSAPrivateKey; import java.security.interfaces.RSAPublicKey; @@ -60,10 +60,10 @@ public static Map getKeys() throws Exception { RSAPublicKey publicKey = (RSAPublicKey) keyPair.getPublic(); RSAPrivateKey privateKey = (RSAPrivateKey) keyPair.getPrivate(); - String publicKeyStr = getPublicKeyStr(publicKey); - String privateKeyStr = getPrivateKeyStr(privateKey); + String publicKeyStr = getPublicKeyString(publicKey); + String privateKeyStr = getPrivateKeyString(privateKey); - Map map = new HashMap(2); + Map map = new HashMap<>(2); map.put("publicKey", publicKeyStr); map.put("privateKey", privateKeyStr); @@ -150,7 +150,7 @@ public static String encryptByPublicKeyByWx(String data, String publicKey) throw * @throws Exception 异常信息 */ public static String encryptByPublicKey(String data, String publicKey, String fillMode) throws Exception { - byte[] dataByte = data.getBytes(StandardCharsets.UTF_8); + byte[] dataByte = data.getBytes(Charset.UTF_8); byte[] keyBytes = Base64.decode(publicKey); X509EncodedKeySpec x509KeySpec = new X509EncodedKeySpec(keyBytes); KeyFactory keyFactory = KeyFactory.getInstance(KEY_ALGORITHM); @@ -194,7 +194,7 @@ public static String encryptByPrivateKey(String data, String privateKey) throws java.security.Signature signature = java.security.Signature.getInstance("SHA256WithRSA"); signature.initSign(priKey); - signature.update(data.getBytes(StandardCharsets.UTF_8)); + signature.update(data.getBytes(Charset.UTF_8)); byte[] signed = signature.sign(); return StringKit.toString(Base64.encode(signed)); } @@ -210,7 +210,7 @@ public static String encryptByPrivateKey(String data, String privateKey) throws public static String encryptByPrivateKey(String data, PrivateKey privateKey) throws Exception { java.security.Signature signature = java.security.Signature.getInstance("SHA256WithRSA"); signature.initSign(privateKey); - signature.update(data.getBytes(StandardCharsets.UTF_8)); + signature.update(data.getBytes(Charset.UTF_8)); byte[] signed = signature.sign(); return StringKit.toString(Base64.encode(signed)); } @@ -230,8 +230,8 @@ public static boolean checkByPublicKey(String data, String sign, String publicKe PublicKey pubKey = keyFactory.generatePublic(new X509EncodedKeySpec(encodedKey)); java.security.Signature signature = java.security.Signature.getInstance("SHA256WithRSA"); signature.initVerify(pubKey); - signature.update(data.getBytes(StandardCharsets.UTF_8)); - return signature.verify(Base64.decode(sign.getBytes(StandardCharsets.UTF_8))); + signature.update(data.getBytes(Charset.UTF_8)); + return signature.verify(Base64.decode(sign.getBytes(Charset.UTF_8))); } /** @@ -246,8 +246,8 @@ public static boolean checkByPublicKey(String data, String sign, String publicKe public static boolean checkByPublicKey(String data, String sign, PublicKey publicKey) throws Exception { java.security.Signature signature = java.security.Signature.getInstance("SHA256WithRSA"); signature.initVerify(publicKey); - signature.update(data.getBytes(StandardCharsets.UTF_8)); - return signature.verify(Base64.decode(sign.getBytes(StandardCharsets.UTF_8))); + signature.update(data.getBytes(Charset.UTF_8)); + return signature.verify(Base64.decode(sign.getBytes(Charset.UTF_8))); } /** @@ -356,11 +356,11 @@ public static PrivateKey loadPrivateKey(String privateKeyStr) throws Exception { } } - public static String getPrivateKeyStr(PrivateKey privateKey) { + public static String getPrivateKeyString(PrivateKey privateKey) { return Base64.encode(privateKey.getEncoded()); } - public static String getPublicKeyStr(PublicKey publicKey) { + public static String getPublicKeyString(PublicKey publicKey) { return Base64.encode(publicKey.getEncoded()); } @@ -407,7 +407,7 @@ public String decryptToString(byte[] associatedData, byte[] nonce, String cipher cipher.init(Cipher.DECRYPT_MODE, key, spec); cipher.updateAAD(associatedData); - return new String(cipher.doFinal(Base64.decode(cipherText)), StandardCharsets.UTF_8); + return new String(cipher.doFinal(Base64.decode(cipherText)), Charset.UTF_8); } catch (NoSuchAlgorithmException | NoSuchPaddingException e) { throw new IllegalStateException(e); } catch (InvalidKeyException | InvalidAlgorithmParameterException e) { diff --git a/bus-pay/src/main/java/org/aoju/bus/pay/metric/WxPayKit.java b/bus-pay/src/main/java/org/aoju/bus/pay/metric/WxPayKit.java index 0916d9f259..1462c4fe50 100644 --- a/bus-pay/src/main/java/org/aoju/bus/pay/metric/WxPayKit.java +++ b/bus-pay/src/main/java/org/aoju/bus/pay/metric/WxPayKit.java @@ -3,6 +3,7 @@ import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import org.aoju.bus.core.lang.Algorithm; +import org.aoju.bus.core.lang.Charset; import org.aoju.bus.core.lang.Http; import org.aoju.bus.core.toolkit.FileKit; import org.aoju.bus.core.toolkit.StringKit; @@ -13,7 +14,6 @@ import java.io.BufferedInputStream; import java.io.InputStream; -import java.nio.charset.StandardCharsets; import java.security.PrivateKey; import java.security.PublicKey; import java.security.cert.X509Certificate; @@ -59,8 +59,8 @@ public static String encryptData(String data, String key) { return Builder.encryptData(data, key); } - public static String generateStr() { - return Builder.generateStr(); + public static String generateString() { + return Builder.generateString(); } /** @@ -217,7 +217,7 @@ public static String bizPayUrl(String partnerKey, String appId, String mchId, St map.put("appid", appId); map.put("mch_id", mchId); map.put("time_stamp", StringKit.isEmpty(timeStamp) ? Long.toString(System.currentTimeMillis() / 1000) : timeStamp); - map.put("nonce_str", StringKit.isEmpty(nonceStr) ? WxPayKit.generateStr() : nonceStr); + map.put("nonce_str", StringKit.isEmpty(nonceStr) ? WxPayKit.generateString() : nonceStr); map.put("product_id", productId); return bizPayUrl(createSign(map, partnerKey, algorithm), appId, mchId, productId, timeStamp, nonceStr); } @@ -234,7 +234,7 @@ public static String bizPayUrl(String partnerKey, String appId, String mchId, St */ public static String bizPayUrl(String partnerKey, String appId, String mchId, String productId) { String timeStamp = Long.toString(System.currentTimeMillis() / 1000); - String nonceStr = WxPayKit.generateStr(); + String nonceStr = WxPayKit.generateString(); HashMap map = new HashMap<>(5); map.put("appid", appId); map.put("mch_id", mchId); @@ -478,7 +478,7 @@ public static String buildAuthorization(String method, String urlSuffix, String String serialNo, String keyPath, String body) throws Exception { long timestamp = System.currentTimeMillis() / 1000; String authType = "WECHATPAY2-SHA256-RSA2048"; - String nonceStr = Builder.generateStr(); + String nonceStr = Builder.generateString(); return buildAuthorization(method, urlSuffix, mchId, serialNo, keyPath, body, nonceStr, timestamp, authType); } @@ -498,7 +498,7 @@ public static String buildAuthorization(String method, String urlSuffix, String String serialNo, PrivateKey privateKey, String body) throws Exception { long timestamp = System.currentTimeMillis() / 1000; String authType = "WECHATPAY2-SHA256-RSA2048"; - String nonceStr = Builder.generateStr(); + String nonceStr = Builder.generateString(); return buildAuthorization(method, urlSuffix, mchId, serialNo, privateKey, body, nonceStr, timestamp, authType); } @@ -633,11 +633,11 @@ public static String verifyNotify(String serialNo, String body, String signature String nonceStr = resource.getString("nonce"); String associatedData = resource.getString("associated_data"); - Secure secure = new Secure(key.getBytes(StandardCharsets.UTF_8)); + Secure secure = new Secure(key.getBytes(Charset.UTF_8)); // 密文解密 return secure.decryptToString( - associatedData.getBytes(StandardCharsets.UTF_8), - nonceStr.getBytes(StandardCharsets.UTF_8), + associatedData.getBytes(Charset.UTF_8), + nonceStr.getBytes(Charset.UTF_8), cipherText ); } else { diff --git a/bus-pay/src/main/java/org/aoju/bus/pay/provider/alipay/AliPayProvider.java b/bus-pay/src/main/java/org/aoju/bus/pay/provider/alipay/AliPayProvider.java index 445521fea3..f132b89a2f 100644 --- a/bus-pay/src/main/java/org/aoju/bus/pay/provider/alipay/AliPayProvider.java +++ b/bus-pay/src/main/java/org/aoju/bus/pay/provider/alipay/AliPayProvider.java @@ -5,6 +5,7 @@ import com.alipay.api.domain.*; import com.alipay.api.request.*; import com.alipay.api.response.*; +import org.aoju.bus.core.lang.Charset; import org.aoju.bus.core.toolkit.DateKit; import org.aoju.bus.core.toolkit.StringKit; @@ -15,7 +16,6 @@ import java.io.PrintWriter; import java.io.UnsupportedEncodingException; import java.net.URLEncoder; -import java.nio.charset.StandardCharsets; import java.util.Date; import java.util.HashMap; import java.util.Iterator; @@ -293,7 +293,7 @@ public static AlipayTradeAppPayResponse appPayToResponse(AlipayClient alipayClie * @throws IOException IO 异常 */ public static void wapPay(HttpServletResponse response, AlipayTradeWapPayModel model, String returnUrl, String notifyUrl) throws AlipayApiException, IOException { - String form = wapPayStr(model, returnUrl, notifyUrl); + String form = wapPayString(model, returnUrl, notifyUrl); response.setContentType("text/html;charset=" + AliPayKit.getAliPayApiConfig().getCharset()); PrintWriter out = response.getWriter(); out.write(form); @@ -314,7 +314,7 @@ public static void wapPay(HttpServletResponse response, AlipayTradeWapPayModel m * @throws IOException IO 异常 */ public static void wapPay(AlipayClient alipayClient, HttpServletResponse response, AlipayTradeWapPayModel model, String returnUrl, String notifyUrl) throws AlipayApiException, IOException { - String form = wapPayStr(alipayClient, model, returnUrl, notifyUrl); + String form = wapPayString(alipayClient, model, returnUrl, notifyUrl); response.setContentType("text/html;charset=UTF-8"); PrintWriter out = response.getWriter(); out.write(form); @@ -335,7 +335,7 @@ public static void wapPay(AlipayClient alipayClient, HttpServletResponse respons * @throws IOException IO 异常 */ public static void wapPay(HttpServletResponse response, AlipayTradeWapPayModel model, String returnUrl, String notifyUrl, String appAuthToken) throws AlipayApiException, IOException { - String form = wapPayStr(model, returnUrl, notifyUrl, appAuthToken); + String form = wapPayString(model, returnUrl, notifyUrl, appAuthToken); response.setContentType("text/html;charset=" + AliPayKit.getAliPayApiConfig().getCharset()); PrintWriter out = response.getWriter(); out.write(form); @@ -356,7 +356,7 @@ public static void wapPay(HttpServletResponse response, AlipayTradeWapPayModel m * @throws IOException IO 异常 */ public static void wapPay(AlipayClient alipayClient, HttpServletResponse response, AlipayTradeWapPayModel model, String returnUrl, String notifyUrl, String appAuthToken) throws AlipayApiException, IOException { - String form = wapPayStr(alipayClient, model, returnUrl, notifyUrl, appAuthToken); + String form = wapPayString(alipayClient, model, returnUrl, notifyUrl, appAuthToken); String charset = "UTF-8"; response.setContentType("text/html;charset=" + charset); PrintWriter out = response.getWriter(); @@ -379,7 +379,7 @@ public static void wapPay(AlipayClient alipayClient, HttpServletResponse respons */ public static void wapPayByOutputStream(HttpServletResponse response, AlipayTradeWapPayModel model, String returnUrl, String notifyUrl, String appAuthToken) throws AlipayApiException, IOException { - String form = wapPayStr(model, returnUrl, notifyUrl, appAuthToken); + String form = wapPayString(model, returnUrl, notifyUrl, appAuthToken); response.setContentType("text/html;charset=" + AliPayKit.getAliPayApiConfig().getCharset()); OutputStream out = response.getOutputStream(); out.write(form.getBytes(AliPayKit.getAliPayApiConfig().getCharset())); @@ -401,7 +401,7 @@ public static void wapPayByOutputStream(HttpServletResponse response, AlipayTrad */ public static void wapPayByOutputStream(AlipayClient alipayClient, HttpServletResponse response, AlipayTradeWapPayModel model, String returnUrl, String notifyUrl, String appAuthToken) throws AlipayApiException, IOException { - String form = wapPayStr(alipayClient, model, returnUrl, notifyUrl, appAuthToken); + String form = wapPayString(alipayClient, model, returnUrl, notifyUrl, appAuthToken); String charset = "UTF-8"; response.setContentType("text/html;charset=" + charset); OutputStream out = response.getOutputStream(); @@ -421,7 +421,7 @@ public static void wapPayByOutputStream(AlipayClient alipayClient, HttpServletRe * @throws IOException IO 异常 */ public static void wapPayByOutputStream(HttpServletResponse response, AlipayTradeWapPayModel model, String returnUrl, String notifyUrl) throws AlipayApiException, IOException { - String form = wapPayStr(model, returnUrl, notifyUrl); + String form = wapPayString(model, returnUrl, notifyUrl); response.setContentType("text/html;charset=" + AliPayKit.getAliPayApiConfig().getCharset()); OutputStream out = response.getOutputStream(); out.write(form.getBytes(AliPayKit.getAliPayApiConfig().getCharset())); @@ -442,7 +442,7 @@ public static void wapPayByOutputStream(HttpServletResponse response, AlipayTrad * @throws IOException IO 异常 */ public static void wapPayByOutputStream(AlipayClient alipayClient, HttpServletResponse response, AlipayTradeWapPayModel model, String returnUrl, String notifyUrl) throws AlipayApiException, IOException { - String form = wapPayStr(alipayClient, model, returnUrl, notifyUrl); + String form = wapPayString(alipayClient, model, returnUrl, notifyUrl); String charset = "UTF-8"; response.setContentType("text/html;charset=" + charset); OutputStream out = response.getOutputStream(); @@ -459,7 +459,7 @@ public static void wapPayByOutputStream(AlipayClient alipayClient, HttpServletRe * @return {String} * @throws AlipayApiException 支付宝 Api 异常 */ - public static String wapPayStr(AlipayTradeWapPayModel model, String returnUrl, String notifyUrl) throws AlipayApiException { + public static String wapPayString(AlipayTradeWapPayModel model, String returnUrl, String notifyUrl) throws AlipayApiException { AlipayTradeWapPayRequest aliPayRequest = new AlipayTradeWapPayRequest(); aliPayRequest.setReturnUrl(returnUrl); aliPayRequest.setNotifyUrl(notifyUrl); @@ -477,7 +477,7 @@ public static String wapPayStr(AlipayTradeWapPayModel model, String returnUrl, S * @return {String} * @throws AlipayApiException 支付宝 Api 异常 */ - public static String wapPayStr(AlipayClient alipayClient, AlipayTradeWapPayModel model, String returnUrl, String notifyUrl) throws AlipayApiException { + public static String wapPayString(AlipayClient alipayClient, AlipayTradeWapPayModel model, String returnUrl, String notifyUrl) throws AlipayApiException { AlipayTradeWapPayRequest aliPayRequest = new AlipayTradeWapPayRequest(); aliPayRequest.setReturnUrl(returnUrl); aliPayRequest.setNotifyUrl(notifyUrl); @@ -495,7 +495,7 @@ public static String wapPayStr(AlipayClient alipayClient, AlipayTradeWapPayModel * @return {String} * @throws AlipayApiException 支付宝 Api 异常 */ - public static String wapPayStr(AlipayTradeWapPayModel model, String returnUrl, String notifyUrl, String appAuthToken) throws AlipayApiException { + public static String wapPayString(AlipayTradeWapPayModel model, String returnUrl, String notifyUrl, String appAuthToken) throws AlipayApiException { AlipayTradeWapPayRequest aliPayRequest = new AlipayTradeWapPayRequest(); aliPayRequest.setReturnUrl(returnUrl); aliPayRequest.setNotifyUrl(notifyUrl); @@ -515,7 +515,7 @@ public static String wapPayStr(AlipayTradeWapPayModel model, String returnUrl, S * @return {String} * @throws AlipayApiException 支付宝 Api 异常 */ - public static String wapPayStr(AlipayClient alipayClient, AlipayTradeWapPayModel model, String returnUrl, String notifyUrl, String appAuthToken) throws AlipayApiException { + public static String wapPayString(AlipayClient alipayClient, AlipayTradeWapPayModel model, String returnUrl, String notifyUrl, String appAuthToken) throws AlipayApiException { AlipayTradeWapPayRequest aliPayRequest = new AlipayTradeWapPayRequest(); aliPayRequest.setReturnUrl(returnUrl); aliPayRequest.setNotifyUrl(notifyUrl); @@ -1970,7 +1970,7 @@ public static AlipayFundCouponOperationQueryResponse fundCouponOperationQueryToR * @throws UnsupportedEncodingException 编码异常 */ public static String getOauth2Url(String appId, String redirectUri) throws UnsupportedEncodingException { - return new StringBuffer().append("https://openauth.alipay.com/oauth2/appToAppAuth.htm?app_id=").append(appId).append("&redirect_uri=").append(URLEncoder.encode(redirectUri, StandardCharsets.UTF_8)) + return new StringBuffer().append("https://openauth.alipay.com/oauth2/appToAppAuth.htm?app_id=").append(appId).append("&redirect_uri=").append(URLEncoder.encode(redirectUri, Charset.UTF_8)) .toString(); } diff --git a/bus-pay/src/main/java/org/aoju/bus/pay/provider/jdpay/JdPayKit.java b/bus-pay/src/main/java/org/aoju/bus/pay/provider/jdpay/JdPayKit.java index f9025bd160..cb82bdc683 100644 --- a/bus-pay/src/main/java/org/aoju/bus/pay/provider/jdpay/JdPayKit.java +++ b/bus-pay/src/main/java/org/aoju/bus/pay/provider/jdpay/JdPayKit.java @@ -1,6 +1,7 @@ package org.aoju.bus.pay.provider.jdpay; import org.aoju.bus.core.codec.Base64; +import org.aoju.bus.core.lang.Charset; import org.aoju.bus.core.lang.Normal; import org.aoju.bus.core.toolkit.StringKit; import org.aoju.bus.core.toolkit.XmlKit; @@ -14,7 +15,6 @@ import java.io.ByteArrayOutputStream; import java.io.UnsupportedEncodingException; import java.lang.reflect.Field; -import java.nio.charset.StandardCharsets; import java.security.*; import java.security.interfaces.RSAPrivateKey; import java.security.interfaces.RSAPublicKey; @@ -59,7 +59,7 @@ public class JdPayKit { private static final String RESULT = "result"; private static final List unSignKeyList = Arrays.asList("merchantSign", "token", "version"); - public static String fomatXmlStr(String xml) { + public static String fomatXmlString(String xml) { StringBuilder formatStr = new StringBuilder(); Scanner scanner = new Scanner(xml); scanner.useDelimiter(PATTERN); @@ -136,7 +136,7 @@ public static String encrypt(String rsaPrivateKey, String strDesKey, String genS try { genSignStr = addXmlHeadAndElJdPay(genSignStr); - genSignStr = fomatXmlStr(genSignStr); + genSignStr = fomatXmlString(genSignStr); genSignStr = delXmlElm(genSignStr, SIGN); @@ -144,7 +144,7 @@ public static String encrypt(String rsaPrivateKey, String strDesKey, String genS System.out.println("sign>" + sign); String data = genSignStr.substring(0, genSignStr.length() - XML_JDPAY_END.length()) + XML_SIGN_START + sign + XML_SIGN_END + XML_JDPAY_END; - encrypt = Base64.encode(encrypt2HexStr(decryptBASE64(strDesKey), data).getBytes(StandardCharsets.UTF_8)); + encrypt = Base64.encode(encrypt2HexString(decryptBASE64(strDesKey), data).getBytes(Charset.UTF_8)); } catch (Exception e) { throw new RuntimeException("signature failed"); } @@ -163,10 +163,10 @@ public static String encrypt(String rsaPrivateKey, String strDesKey, String genS public static String decrypt(String rsaPubKey, String strDesKey, String encrypt) { String reqBody; try { - reqBody = decrypt4HexStr(decryptBASE64(strDesKey), new String(Base64.decode(encrypt), StandardCharsets.UTF_8)); + reqBody = decrypt4HexString(decryptBASE64(strDesKey), new String(Base64.decode(encrypt), Charset.UTF_8)); String inputSign = getXmlElm(reqBody, SIGN); reqBody = addXmlHead(reqBody); - reqBody = fomatXmlStr(reqBody); + reqBody = fomatXmlString(reqBody); String genSignStr = delXmlElm(reqBody, SIGN); boolean verifyResult = decryptMerchant(genSignStr, inputSign, rsaPubKey); if (!verifyResult) { @@ -190,7 +190,7 @@ public static String decrypt(String rsaPubKey, String reqBody) { try { String inputSign = getXmlElm(reqBody, SIGN); req = addXmlHead(reqBody); - req = fomatXmlStr(req); + req = fomatXmlString(req); String genSignStr = delXmlElm(req, SIGN); boolean verifyResult = decryptMerchant(genSignStr, inputSign, rsaPubKey); if (!verifyResult) { @@ -251,8 +251,8 @@ private static String byte2Hex(byte[] b) { return hs.toUpperCase(); } - public static String encrypt2HexStr(byte[] keys, String sourceData) { - byte[] source = sourceData.getBytes(StandardCharsets.UTF_8); + public static String encrypt2HexString(byte[] keys, String sourceData) { + byte[] source = sourceData.getBytes(Charset.UTF_8); int merchantData = source.length; int x = (merchantData + 4) % 8; int y = (x == 0) ? 0 : (8 - x); @@ -272,10 +272,10 @@ public static String encrypt2HexStr(byte[] keys, String sourceData) { return bytes2Hex(desdata); } - public static String decrypt4HexStr(byte[] keys, String data) { - byte[] hexSourceData = new byte[0]; + public static String decrypt4HexString(byte[] keys, String data) { + byte[] hexSourceData; try { - hexSourceData = hex2byte(data.getBytes(StandardCharsets.UTF_8)); + hexSourceData = hex2byte(data.getBytes(Charset.UTF_8)); byte[] unDesResult = decrypt(keys, hexSourceData); byte[] dataSizeByte = new byte[4]; dataSizeByte[0] = unDesResult[0]; @@ -308,7 +308,7 @@ private static String hex2bin(String hex) throws UnsupportedEncodingException { bytes[i] = (byte) (temp & 0xFF); } - return new String(bytes, StandardCharsets.UTF_8); + return new String(bytes, Charset.UTF_8); } private static String toHexString(byte[] ba) { @@ -368,7 +368,7 @@ public static String encryptMerchant(String sourceSignString, String rsaPriKey) String result; try { String sha256SourceSignString = encrypt(sourceSignString, null); - byte[] newsks = encryptByPrivateKey(sha256SourceSignString.getBytes(StandardCharsets.UTF_8), rsaPriKey); + byte[] newsks = encryptByPrivateKey(sha256SourceSignString.getBytes(Charset.UTF_8), rsaPriKey); result = Base64.encode(newsks); } catch (Exception e) { throw new RuntimeException("verify signature failed.", e); @@ -407,7 +407,7 @@ public static String encrypt(String strSrc, String encName) { MessageDigest md; String strDes; byte[] bt; - bt = strSrc.getBytes(StandardCharsets.UTF_8); + bt = strSrc.getBytes(Charset.UTF_8); try { if (encName == null || encName.equals("")) { encName = "SHA-256"; @@ -428,7 +428,7 @@ public static String sign4SelectedKeys(Object object, String rsaPriKey, Listerror", e); @@ -443,7 +443,7 @@ public static String signRemoveSelectedKeys(Object object, String rsaPriKey, Lis try { String sourceSignString = signString(object, signKeyList); String sha256SourceSignString = encrypt(sourceSignString, null); - byte[] newK = encryptByPrivateKey(sha256SourceSignString.getBytes(StandardCharsets.UTF_8), rsaPriKey); + byte[] newK = encryptByPrivateKey(sha256SourceSignString.getBytes(Charset.UTF_8), rsaPriKey); result = Base64.encode(newK); } catch (Exception e) { e.printStackTrace(); @@ -783,7 +783,7 @@ public static String toJdXml(Map params) { */ public static String threeDesEncrypt(String desKey, String sourceData) { byte[] key = Base64.decode(desKey); - return encrypt2HexStr(key, sourceData); + return encrypt2HexString(key, sourceData); } /** @@ -795,7 +795,7 @@ public static String threeDesEncrypt(String desKey, String sourceData) { */ public static String threeDecDecrypt(String desKey, String sourceData) { byte[] key = Base64.decode(desKey); - return decrypt4HexStr(key, sourceData); + return decrypt4HexString(key, sourceData); } diff --git a/bus-pay/src/main/java/org/aoju/bus/pay/provider/jdpay/models/JdPayEntity.java b/bus-pay/src/main/java/org/aoju/bus/pay/provider/jdpay/models/JdPayEntity.java index 7a03e088a9..c297359416 100644 --- a/bus-pay/src/main/java/org/aoju/bus/pay/provider/jdpay/models/JdPayEntity.java +++ b/bus-pay/src/main/java/org/aoju/bus/pay/provider/jdpay/models/JdPayEntity.java @@ -35,11 +35,11 @@ public Map toMap() { /** * 获取属性名数组 * - * @param obj 对象 + * @param object 对象 * @return 返回对象属性名数组 */ - public String[] getFiledNames(Object obj) { - Field[] fields = obj.getClass().getDeclaredFields(); + public String[] getFiledNames(Object object) { + Field[] fields = object.getClass().getDeclaredFields(); String[] fieldNames = new String[fields.length]; for (int i = 0; i < fields.length; i++) { fieldNames[i] = fields[i].getName(); @@ -51,18 +51,18 @@ public String[] getFiledNames(Object obj) { * 根据属性名获取属性值 * * @param fieldName 属性名称 - * @param obj 对象 + * @param object 对象 * @return 返回对应属性的值 */ - public Object getFieldValueByName(String fieldName, Object obj) { + public Object getFieldValueByName(String fieldName, Object object) { try { String firstLetter = fieldName.substring(0, 1).toUpperCase(); String getter = new StringBuffer().append("get") .append(firstLetter) .append(fieldName.substring(1)) .toString(); - Method method = obj.getClass().getMethod(getter); - return method.invoke(obj); + Method method = object.getClass().getMethod(getter); + return method.invoke(object); } catch (Exception e) { return null; } diff --git a/bus-pay/src/main/java/org/aoju/bus/pay/provider/paypal/PaypalProvider.java b/bus-pay/src/main/java/org/aoju/bus/pay/provider/paypal/PaypalProvider.java index 6d546f81b3..cdc7bb35a0 100644 --- a/bus-pay/src/main/java/org/aoju/bus/pay/provider/paypal/PaypalProvider.java +++ b/bus-pay/src/main/java/org/aoju/bus/pay/provider/paypal/PaypalProvider.java @@ -1,6 +1,7 @@ package org.aoju.bus.pay.provider.paypal; import org.aoju.bus.core.codec.Base64; +import org.aoju.bus.core.lang.Charset; import org.aoju.bus.core.lang.MediaType; import org.aoju.bus.core.toolkit.StringKit; import org.aoju.bus.pay.Builder; @@ -8,7 +9,6 @@ import org.aoju.bus.pay.magic.Results; import org.aoju.bus.pay.metric.HttpKit; -import java.nio.charset.StandardCharsets; import java.util.HashMap; import java.util.Map; @@ -39,7 +39,7 @@ public static Results getToken(Context context) { Map headers = new HashMap<>(3); headers.put("Accept", MediaType.APPLICATION_JSON); headers.put("Content-Type", MediaType.APPLICATION_FORM_URLENCODED); - headers.put("Authorization", "Basic ".concat(Base64.encode((context.getClientId().concat(":").concat(context.getSecret())).getBytes(StandardCharsets.UTF_8)))); + headers.put("Authorization", "Basic ".concat(Base64.encode((context.getClientId().concat(":").concat(context.getSecret())).getBytes(Charset.UTF_8)))); Map params = new HashMap<>(1); params.put("grant_type", "client_credentials"); return post(getReqUrl(PayPalApiUrl.GET_TOKEN, context.isSandBox()), params, headers); @@ -187,7 +187,7 @@ public static Results patch(String url, String data, Map headers } public static Map getBaseHeaders(AccessToken accessToken) { - return getBaseHeaders(accessToken, Builder.generateStr(), null, null); + return getBaseHeaders(accessToken, Builder.generateString(), null, null); } public static Map getBaseHeaders(AccessToken accessToken, diff --git a/bus-pay/src/main/java/org/aoju/bus/pay/provider/wxpay/WxpayProvider.java b/bus-pay/src/main/java/org/aoju/bus/pay/provider/wxpay/WxpayProvider.java index dfffae4d3c..d92a2b3619 100644 --- a/bus-pay/src/main/java/org/aoju/bus/pay/provider/wxpay/WxpayProvider.java +++ b/bus-pay/src/main/java/org/aoju/bus/pay/provider/wxpay/WxpayProvider.java @@ -329,7 +329,7 @@ public static Results v3(String method, String urlPrefix, String urlSuffix, Stri String serialNo, String platSerialNo, String keyPath, String body) throws Exception { long timestamp = System.currentTimeMillis() / 1000; String authType = "WECHATPAY2-SHA256-RSA2048"; - String nonceStr = WxPayKit.generateStr(); + String nonceStr = WxPayKit.generateString(); return v3(method, urlPrefix, urlSuffix, mchId, serialNo, platSerialNo, keyPath, body, nonceStr, timestamp, authType, null); } @@ -351,7 +351,7 @@ public static Results v3(String method, String urlPrefix, String urlSuffix, Stri String serialNo, String platSerialNo, PrivateKey privateKey, String body) throws Exception { long timestamp = System.currentTimeMillis() / 1000; String authType = "WECHATPAY2-SHA256-RSA2048"; - String nonceStr = WxPayKit.generateStr(); + String nonceStr = WxPayKit.generateString(); return v3(method, urlPrefix, urlSuffix, mchId, serialNo, platSerialNo, privateKey, body, nonceStr, timestamp, authType, null); } @@ -374,7 +374,7 @@ public static Results v3(String method, String urlPrefix, String urlSuffix, Map params) throws Exception { long timestamp = System.currentTimeMillis() / 1000; String authType = "WECHATPAY2-SHA256-RSA2048"; - String nonceStr = WxPayKit.generateStr(); + String nonceStr = WxPayKit.generateString(); if (null != params && !params.keySet().isEmpty()) { urlSuffix = urlSuffix.concat("?").concat(Builder.createLinkString(params, true)); } @@ -400,7 +400,7 @@ public static Results v3(String method, String urlPrefix, String urlSuffix, Map params) throws Exception { long timestamp = System.currentTimeMillis() / 1000; String authType = "WECHATPAY2-SHA256-RSA2048"; - String nonceStr = WxPayKit.generateStr(); + String nonceStr = WxPayKit.generateString(); if (null != params && !params.keySet().isEmpty()) { urlSuffix = urlSuffix.concat("?").concat(Builder.createLinkString(params, true)); } @@ -424,7 +424,7 @@ public static Results v3(String method, String urlPrefix, String urlSuffix, public static Results v3(String urlPrefix, String urlSuffix, String mchId, String serialNo, String platSerialNo, String keyPath, String body, File file) throws Exception { long timestamp = System.currentTimeMillis() / 1000; String authType = "WECHATPAY2-SHA256-RSA2048"; - String nonceStr = WxPayKit.generateStr(); + String nonceStr = WxPayKit.generateString(); return v3(Http.POST, urlPrefix, urlSuffix, mchId, serialNo, platSerialNo, keyPath, body, nonceStr, timestamp, authType, file); } @@ -446,7 +446,7 @@ public static Results v3(String urlPrefix, String urlSuffix, String mchId, Strin String platSerialNo, PrivateKey privateKey, String body, File file) throws Exception { long timestamp = System.currentTimeMillis() / 1000; String authType = "WECHATPAY2-SHA256-RSA2048"; - String nonceStr = WxPayKit.generateStr(); + String nonceStr = WxPayKit.generateString(); return v3(Http.POST, urlPrefix, urlSuffix, mchId, serialNo, platSerialNo, privateKey, body, nonceStr, timestamp, authType, file); } @@ -608,7 +608,7 @@ public static Map v3Upload(String urlPrefix, String urlSuffix, S */ public static String getSignKey(String mchId, String partnerKey, Algorithm algorithm) { Map map = new HashMap<>(3); - String nonceStr = WxPayKit.generateStr(); + String nonceStr = WxPayKit.generateString(); map.put("mch_id", mchId); map.put("nonce_str", nonceStr); map.put("sign", WxPayKit.createSign(map, partnerKey, algorithm)); diff --git a/bus-proxy/pom.xml b/bus-proxy/pom.xml index 7c55d633ee..d9b480403b 100755 --- a/bus-proxy/pom.xml +++ b/bus-proxy/pom.xml @@ -6,7 +6,7 @@ org.aoju bus-proxy - 6.5.3 + 6.5.5 jar ${project.artifactId} diff --git a/bus-proxy/src/main/java/org/aoju/bus/proxy/intercept/CglibInterceptor.java b/bus-proxy/src/main/java/org/aoju/bus/proxy/intercept/CglibInterceptor.java index c17b058b39..1a29774acc 100755 --- a/bus-proxy/src/main/java/org/aoju/bus/proxy/intercept/CglibInterceptor.java +++ b/bus-proxy/src/main/java/org/aoju/bus/proxy/intercept/CglibInterceptor.java @@ -59,13 +59,13 @@ public Object getTarget() { } @Override - public Object intercept(Object obj, Method method, Object[] args, MethodProxy proxy) throws Throwable { + public Object intercept(Object object, Method method, Object[] args, MethodProxy proxy) throws Throwable { Object result = null; // 开始前回调 if (aspectj.before(target, method, args)) { try { - result = proxy.invokeSuper(obj, args); + result = proxy.invokeSuper(object, args); } catch (InvocationTargetException e) { // 异常回调(只捕获业务代码导致的异常,而非反射导致的异常) if (aspectj.afterException(target, method, args, e.getTargetException())) { diff --git a/bus-sensitive/pom.xml b/bus-sensitive/pom.xml index c5065024b2..c0b106d01b 100755 --- a/bus-sensitive/pom.xml +++ b/bus-sensitive/pom.xml @@ -6,7 +6,7 @@ org.aoju bus-sensitive - 6.5.3 + 6.5.5 jar ${project.artifactId} diff --git a/bus-sensitive/src/main/java/org/aoju/bus/sensitive/Builder.java b/bus-sensitive/src/main/java/org/aoju/bus/sensitive/Builder.java index 33de876094..db78fba082 100755 --- a/bus-sensitive/src/main/java/org/aoju/bus/sensitive/Builder.java +++ b/bus-sensitive/src/main/java/org/aoju/bus/sensitive/Builder.java @@ -223,11 +223,11 @@ public static boolean containsSensitive(String text) { /** * 是否包含敏感词 * - * @param obj bean,会被转为JSON字符串 + * @param object bean,会被转为JSON字符串 * @return 是否包含 */ - public static boolean containsSensitive(Object obj) { - return sensitiveTree.isMatch(JsonKit.toJsonString(obj)); + public static boolean containsSensitive(Object object) { + return sensitiveTree.isMatch(JsonKit.toJsonString(object)); } /** @@ -243,11 +243,11 @@ public static String getFindedFirstSensitive(String text) { /** * 查找敏感词,返回找到的第一个敏感词 * - * @param obj bean,会被转为JSON字符串 + * @param object bean,会被转为JSON字符串 * @return 敏感词 */ - public static String getFindedFirstSensitive(Object obj) { - return sensitiveTree.match(JsonKit.toJsonString(obj)); + public static String getFindedFirstSensitive(Object object) { + return sensitiveTree.match(JsonKit.toJsonString(object)); } /** diff --git a/bus-setting/README.md b/bus-setting/README.md index f3db3500e9..ae68251439 100755 --- a/bus-setting/README.md +++ b/bus-setting/README.md @@ -5,7 +5,7 @@ String user = properties.getProperty("user"); Assert.assertEquals(user, "root"); - String driver = properties.getStr("driver"); + String driver = properties.getString("driver"); Assert.assertEquals(driver, "com.mysql.jdbc.Driver"); // 或者使用 diff --git a/bus-setting/pom.xml b/bus-setting/pom.xml index 55f53594a2..1952846eee 100755 --- a/bus-setting/pom.xml +++ b/bus-setting/pom.xml @@ -6,7 +6,7 @@ org.aoju bus-setting - 6.5.3 + 6.5.5 jar ${project.artifactId} diff --git a/bus-setting/src/main/java/org/aoju/bus/setting/Builder.java b/bus-setting/src/main/java/org/aoju/bus/setting/Builder.java index 63fe071ff3..6810bcfb78 100644 --- a/bus-setting/src/main/java/org/aoju/bus/setting/Builder.java +++ b/bus-setting/src/main/java/org/aoju/bus/setting/Builder.java @@ -26,7 +26,7 @@ package org.aoju.bus.setting; import org.aoju.bus.core.lang.Assert; -import org.aoju.bus.core.lang.Dict; +import org.aoju.bus.core.lang.Dictionary; import org.aoju.bus.core.lang.Symbol; import org.aoju.bus.core.toolkit.FileKit; import org.aoju.bus.core.toolkit.IoKit; @@ -127,8 +127,8 @@ public static Properties getProperties(String name) { * @param path YAML路径,相对路径相对classpath * @return 加载的内容,默认Map */ - public static Dict load(String path) { - return load(path, Dict.class); + public static Dictionary load(String path) { + return load(path, Dictionary.class); } /** @@ -161,8 +161,8 @@ public static T load(InputStream in, Class type) { * @param reader {@link Reader} * @return 加载的Map */ - public static Dict load(Reader reader) { - return load(reader, Dict.class); + public static Dictionary load(Reader reader) { + return load(reader, Dictionary.class); } /** diff --git a/bus-setting/src/main/java/org/aoju/bus/setting/magic/AbstractSetting.java b/bus-setting/src/main/java/org/aoju/bus/setting/magic/AbstractSetting.java index b62f24eaa0..1e57645eef 100755 --- a/bus-setting/src/main/java/org/aoju/bus/setting/magic/AbstractSetting.java +++ b/bus-setting/src/main/java/org/aoju/bus/setting/magic/AbstractSetting.java @@ -47,8 +47,8 @@ public abstract class AbstractSetting implements OptNullString, Serializable { @Override - public String getStr(String key, String defaultValue) { - return getStr(key, Normal.EMPTY, defaultValue); + public String getString(String key, String defaultValue) { + return getString(key, Normal.EMPTY, defaultValue); } /** @@ -59,7 +59,7 @@ public String getStr(String key, String defaultValue) { * @param defaultValue 默认值 * @return 值,如果字符串为{@code null}返回默认值 */ - public String getStr(String key, String group, String defaultValue) { + public String getString(String key, String group, String defaultValue) { return ObjectKit.defaultIfNull(getByGroup(key, group), defaultValue); } @@ -91,7 +91,7 @@ public String getStrNotEmpty(String key, String group, String defaultValue) { * @return 值 */ public String getWithLog(String key) { - return getStr(key); + return getString(key); } /** @@ -188,8 +188,8 @@ public Integer getInt(String key, String group, Integer defaultValue) { * @param group 分组名 * @return 属性值 */ - public Boolean getBool(String key, String group) { - return getBool(key, group, null); + public Boolean getBoolean(String key, String group) { + return getBoolean(key, group, null); } /** @@ -200,8 +200,8 @@ public Boolean getBool(String key, String group) { * @param defaultValue 默认值 * @return 属性值 */ - public Boolean getBool(String key, String group, Boolean defaultValue) { - return Convert.toBool(getByGroup(key, group), defaultValue); + public Boolean getBoolean(String key, String group, Boolean defaultValue) { + return Convert.toBoolean(getByGroup(key, group), defaultValue); } /** diff --git a/bus-setting/src/main/java/org/aoju/bus/setting/magic/PopSetting.java b/bus-setting/src/main/java/org/aoju/bus/setting/magic/PopSetting.java index 3111b56382..b10f90f964 100755 --- a/bus-setting/src/main/java/org/aoju/bus/setting/magic/PopSetting.java +++ b/bus-setting/src/main/java/org/aoju/bus/setting/magic/PopSetting.java @@ -30,8 +30,8 @@ import org.aoju.bus.core.io.resource.FileResource; import org.aoju.bus.core.io.resource.Resource; import org.aoju.bus.core.io.resource.UriResource; -import org.aoju.bus.core.io.watchers.SimpleWatcher; -import org.aoju.bus.core.io.watchers.WatchMonitor; +import org.aoju.bus.core.io.watcher.SimpleWatcher; +import org.aoju.bus.core.io.watcher.WatchMonitor; import org.aoju.bus.core.lang.Assert; import org.aoju.bus.core.lang.Charset; import org.aoju.bus.core.lang.Normal; @@ -119,7 +119,7 @@ public PopSetting(String path, boolean isUseVariable) { */ public PopSetting(String path, java.nio.charset.Charset charset, boolean isUseVariable) { Assert.notBlank(path, "Blank setting path !"); - this.init(FileKit.getResourceObj(path), charset, isUseVariable); + this.init(FileKit.getResourceObject(path), charset, isUseVariable); } /** @@ -282,7 +282,7 @@ public Object getAndRemove(String... keys) { * @param keys 键列表,常用于别名 * @return 字符串值 */ - public String getAndRemoveStr(String... keys) { + public String getAndRemoveString(String... keys) { Object value = null; for (String key : keys) { value = remove(key); @@ -672,17 +672,17 @@ public int hashCode() { } @Override - public boolean equals(Object obj) { - if (this == obj) { + public boolean equals(Object object) { + if (this == object) { return true; } - if (null == obj) { + if (null == object) { return false; } - if (getClass() != obj.getClass()) { + if (getClass() != object.getClass()) { return false; } - PopSetting other = (PopSetting) obj; + PopSetting other = (PopSetting) object; if (null == charset) { if (null != other.charset) { return false; diff --git a/bus-setting/src/main/java/org/aoju/bus/setting/magic/Properties.java b/bus-setting/src/main/java/org/aoju/bus/setting/magic/Properties.java index dca6611308..8c34fc5b25 100755 --- a/bus-setting/src/main/java/org/aoju/bus/setting/magic/Properties.java +++ b/bus-setting/src/main/java/org/aoju/bus/setting/magic/Properties.java @@ -33,8 +33,8 @@ import org.aoju.bus.core.io.resource.FileResource; import org.aoju.bus.core.io.resource.Resource; import org.aoju.bus.core.io.resource.UriResource; -import org.aoju.bus.core.io.watchers.SimpleWatcher; -import org.aoju.bus.core.io.watchers.WatchMonitor; +import org.aoju.bus.core.io.watcher.SimpleWatcher; +import org.aoju.bus.core.io.watcher.WatchMonitor; import org.aoju.bus.core.lang.Assert; import org.aoju.bus.core.lang.Charset; import org.aoju.bus.core.lang.Symbol; @@ -110,7 +110,7 @@ public Properties(String path, java.nio.charset.Charset charset) { if (null != charset) { this.charset = charset; } - this.load(FileKit.getResourceObj(path)); + this.load(FileKit.getResourceObject(path)); } /** @@ -325,28 +325,28 @@ public void onModify(WatchEvent event, Path currentPath) { } @Override - public Object getObj(String key, Object defaultValue) { - return getStr(key, null == defaultValue ? null : defaultValue.toString()); + public Object getObject(String key, Object defaultValue) { + return getString(key, null == defaultValue ? null : defaultValue.toString()); } @Override - public Object getObj(String key) { - return getObj(key, null); + public Object getObject(String key) { + return getObject(key, null); } @Override - public String getStr(String key, String defaultValue) { + public String getString(String key, String defaultValue) { return super.getProperty(key, defaultValue); } @Override - public String getStr(String key) { + public String getString(String key) { return super.getProperty(key); } @Override public Integer getInt(String key, Integer defaultValue) { - return Convert.toInt(getStr(key), defaultValue); + return Convert.toInt(getString(key), defaultValue); } @Override @@ -355,18 +355,18 @@ public Integer getInt(String key) { } @Override - public Boolean getBool(String key, Boolean defaultValue) { - return Convert.toBool(getStr(key), defaultValue); + public Boolean getBoolean(String key, Boolean defaultValue) { + return Convert.toBoolean(getString(key), defaultValue); } @Override - public Boolean getBool(String key) { - return getBool(key, null); + public Boolean getBoolean(String key) { + return getBoolean(key, null); } @Override public Long getLong(String key, Long defaultValue) { - return Convert.toLong(getStr(key), defaultValue); + return Convert.toLong(getString(key), defaultValue); } @Override @@ -376,7 +376,7 @@ public Long getLong(String key) { @Override public Character getChar(String key, Character defaultValue) { - final String value = getStr(key); + final String value = getString(key); if (StringKit.isBlank(value)) { return defaultValue; } @@ -395,12 +395,12 @@ public Float getFloat(String key) { @Override public Float getFloat(String key, Float defaultValue) { - return Convert.toFloat(getStr(key), defaultValue); + return Convert.toFloat(getString(key), defaultValue); } @Override public Double getDouble(String key, Double defaultValue) throws NumberFormatException { - return Convert.toDouble(getStr(key), defaultValue); + return Convert.toDouble(getString(key), defaultValue); } @Override @@ -410,7 +410,7 @@ public Double getDouble(String key) throws NumberFormatException { @Override public Short getShort(String key, Short defaultValue) { - return Convert.toShort(getStr(key), defaultValue); + return Convert.toShort(getString(key), defaultValue); } @Override @@ -420,7 +420,7 @@ public Short getShort(String key) { @Override public Byte getByte(String key, Byte defaultValue) { - return Convert.toByte(getStr(key), defaultValue); + return Convert.toByte(getString(key), defaultValue); } @Override @@ -430,7 +430,7 @@ public Byte getByte(String key) { @Override public BigDecimal getBigDecimal(String key, BigDecimal defaultValue) { - final String valueStr = getStr(key); + final String valueStr = getString(key); if (StringKit.isBlank(valueStr)) { return defaultValue; } @@ -449,7 +449,7 @@ public BigDecimal getBigDecimal(String key) { @Override public BigInteger getBigInteger(String key, BigInteger defaultValue) { - final String valueStr = getStr(key); + final String valueStr = getString(key); if (StringKit.isBlank(valueStr)) { return defaultValue; } @@ -468,7 +468,7 @@ public BigInteger getBigInteger(String key) { @Override public > E getEnum(Class clazz, String key, E defaultValue) { - return Convert.toEnum(clazz, getStr(key), defaultValue); + return Convert.toEnum(clazz, getString(key), defaultValue); } @Override @@ -478,7 +478,7 @@ public > E getEnum(Class clazz, String key) { @Override public Date getDate(String key, Date defaultValue) { - return Convert.toDate(getStr(key), defaultValue); + return Convert.toDate(getString(key), defaultValue); } @Override @@ -492,7 +492,7 @@ public Date getDate(String key) { * @param keys 键列表,常用于别名 * @return 字符串值 */ - public String getAndRemoveStr(String... keys) { + public String getAndRemoveString(String... keys) { Object value = null; for (String key : keys) { value = remove(key); diff --git a/bus-shade/pom.xml b/bus-shade/pom.xml index 472c85b1cb..cf50158dba 100755 --- a/bus-shade/pom.xml +++ b/bus-shade/pom.xml @@ -6,7 +6,7 @@ org.aoju bus-shade - 6.5.3 + 6.5.5 jar ${project.artifactId} diff --git a/bus-socket/pom.xml b/bus-socket/pom.xml index 10824fa1b6..a6d7130fba 100755 --- a/bus-socket/pom.xml +++ b/bus-socket/pom.xml @@ -6,7 +6,7 @@ org.aoju bus-socket - 6.5.3 + 6.5.5 jar ${project.artifactId} diff --git a/bus-socket/src/main/java/org/aoju/bus/socket/AioQuickClient.java b/bus-socket/src/main/java/org/aoju/bus/socket/AioQuickClient.java index 133ab60b04..e205d2d406 100644 --- a/bus-socket/src/main/java/org/aoju/bus/socket/AioQuickClient.java +++ b/bus-socket/src/main/java/org/aoju/bus/socket/AioQuickClient.java @@ -25,7 +25,7 @@ ********************************************************************************/ package org.aoju.bus.socket; -import org.aoju.bus.core.io.ByteBuffer; +import org.aoju.bus.core.io.buffer.ByteBuffer; import org.aoju.bus.core.toolkit.IoKit; import org.aoju.bus.socket.handler.CompletionReadHandler; import org.aoju.bus.socket.handler.CompletionWriteHandler; diff --git a/bus-socket/src/main/java/org/aoju/bus/socket/AioQuickServer.java b/bus-socket/src/main/java/org/aoju/bus/socket/AioQuickServer.java index ef7bae12b0..fa8d2fd392 100644 --- a/bus-socket/src/main/java/org/aoju/bus/socket/AioQuickServer.java +++ b/bus-socket/src/main/java/org/aoju/bus/socket/AioQuickServer.java @@ -25,7 +25,7 @@ ********************************************************************************/ package org.aoju.bus.socket; -import org.aoju.bus.core.io.ByteBuffer; +import org.aoju.bus.core.io.buffer.ByteBuffer; import org.aoju.bus.core.toolkit.IoKit; import org.aoju.bus.logger.Logger; import org.aoju.bus.socket.handler.CompletionReadHandler; diff --git a/bus-socket/src/main/java/org/aoju/bus/socket/AioSession.java b/bus-socket/src/main/java/org/aoju/bus/socket/AioSession.java index efc72445df..aceee40ae2 100644 --- a/bus-socket/src/main/java/org/aoju/bus/socket/AioSession.java +++ b/bus-socket/src/main/java/org/aoju/bus/socket/AioSession.java @@ -25,7 +25,7 @@ ********************************************************************************/ package org.aoju.bus.socket; -import org.aoju.bus.core.io.WriteBuffer; +import org.aoju.bus.core.io.buffer.WriteBuffer; import java.io.IOException; import java.io.InputStream; diff --git a/bus-socket/src/main/java/org/aoju/bus/socket/BufferFactory.java b/bus-socket/src/main/java/org/aoju/bus/socket/BufferFactory.java index 485bf6b04b..7ebf11dc81 100644 --- a/bus-socket/src/main/java/org/aoju/bus/socket/BufferFactory.java +++ b/bus-socket/src/main/java/org/aoju/bus/socket/BufferFactory.java @@ -25,9 +25,9 @@ ********************************************************************************/ package org.aoju.bus.socket; -import org.aoju.bus.core.io.ByteBuffer; -import org.aoju.bus.core.io.PageBuffer; -import org.aoju.bus.core.io.VirtualBuffer; +import org.aoju.bus.core.io.buffer.ByteBuffer; +import org.aoju.bus.core.io.buffer.PageBuffer; +import org.aoju.bus.core.io.buffer.VirtualBuffer; /** * 内存池工厂 diff --git a/bus-socket/src/main/java/org/aoju/bus/socket/TcpAioSession.java b/bus-socket/src/main/java/org/aoju/bus/socket/TcpAioSession.java index 449c661e6e..de5566c3fa 100644 --- a/bus-socket/src/main/java/org/aoju/bus/socket/TcpAioSession.java +++ b/bus-socket/src/main/java/org/aoju/bus/socket/TcpAioSession.java @@ -25,9 +25,9 @@ ********************************************************************************/ package org.aoju.bus.socket; -import org.aoju.bus.core.io.PageBuffer; -import org.aoju.bus.core.io.VirtualBuffer; -import org.aoju.bus.core.io.WriteBuffer; +import org.aoju.bus.core.io.buffer.PageBuffer; +import org.aoju.bus.core.io.buffer.VirtualBuffer; +import org.aoju.bus.core.io.buffer.WriteBuffer; import org.aoju.bus.core.toolkit.IoKit; import org.aoju.bus.socket.handler.CompletionReadHandler; import org.aoju.bus.socket.handler.CompletionWriteHandler; diff --git a/bus-socket/src/main/java/org/aoju/bus/socket/UdpAioSession.java b/bus-socket/src/main/java/org/aoju/bus/socket/UdpAioSession.java index 191c0fc742..518cecb2a1 100644 --- a/bus-socket/src/main/java/org/aoju/bus/socket/UdpAioSession.java +++ b/bus-socket/src/main/java/org/aoju/bus/socket/UdpAioSession.java @@ -25,7 +25,7 @@ ********************************************************************************/ package org.aoju.bus.socket; -import org.aoju.bus.core.io.WriteBuffer; +import org.aoju.bus.core.io.buffer.WriteBuffer; import java.io.IOException; import java.net.InetSocketAddress; diff --git a/bus-socket/src/main/java/org/aoju/bus/socket/UdpBootstrap.java b/bus-socket/src/main/java/org/aoju/bus/socket/UdpBootstrap.java index e8f6352437..f21f4d690d 100644 --- a/bus-socket/src/main/java/org/aoju/bus/socket/UdpBootstrap.java +++ b/bus-socket/src/main/java/org/aoju/bus/socket/UdpBootstrap.java @@ -26,8 +26,8 @@ package org.aoju.bus.socket; import org.aoju.bus.core.exception.InstrumentException; -import org.aoju.bus.core.io.PageBuffer; -import org.aoju.bus.core.io.VirtualBuffer; +import org.aoju.bus.core.io.buffer.PageBuffer; +import org.aoju.bus.core.io.buffer.VirtualBuffer; import org.aoju.bus.core.lang.Normal; import org.aoju.bus.core.lang.Symbol; import org.aoju.bus.socket.process.MessageProcessor; @@ -62,7 +62,7 @@ public class UdpBootstrap { /** * 缓存页 */ - private final PageBuffer bufferPage = new org.aoju.bus.core.io.ByteBuffer(Normal._1024 * Normal._1024, 1, true).allocatePageBuffer(); + private final PageBuffer bufferPage = new org.aoju.bus.core.io.buffer.ByteBuffer(Normal._1024 * Normal._1024, 1, true).allocatePageBuffer(); /** * 服务配置 diff --git a/bus-socket/src/main/java/org/aoju/bus/socket/UdpChannel.java b/bus-socket/src/main/java/org/aoju/bus/socket/UdpChannel.java index c86a902c2b..195dc54d41 100644 --- a/bus-socket/src/main/java/org/aoju/bus/socket/UdpChannel.java +++ b/bus-socket/src/main/java/org/aoju/bus/socket/UdpChannel.java @@ -25,9 +25,9 @@ ********************************************************************************/ package org.aoju.bus.socket; -import org.aoju.bus.core.io.PageBuffer; -import org.aoju.bus.core.io.VirtualBuffer; -import org.aoju.bus.core.io.WriteBuffer; +import org.aoju.bus.core.io.buffer.PageBuffer; +import org.aoju.bus.core.io.buffer.VirtualBuffer; +import org.aoju.bus.core.io.buffer.WriteBuffer; import org.aoju.bus.core.lang.Normal; import org.aoju.bus.logger.Logger; diff --git a/bus-socket/src/main/java/org/aoju/bus/socket/plugins/PageBufferPlugin.java b/bus-socket/src/main/java/org/aoju/bus/socket/plugins/PageBufferPlugin.java index e07c8f85ba..2d9d12df5e 100644 --- a/bus-socket/src/main/java/org/aoju/bus/socket/plugins/PageBufferPlugin.java +++ b/bus-socket/src/main/java/org/aoju/bus/socket/plugins/PageBufferPlugin.java @@ -25,8 +25,8 @@ ********************************************************************************/ package org.aoju.bus.socket.plugins; -import org.aoju.bus.core.io.ByteBuffer; -import org.aoju.bus.core.io.PageBuffer; +import org.aoju.bus.core.io.buffer.ByteBuffer; +import org.aoju.bus.core.io.buffer.PageBuffer; import org.aoju.bus.core.lang.Normal; import org.aoju.bus.logger.Logger; import org.aoju.bus.socket.AioQuickServer; diff --git a/bus-socket/src/main/java/org/aoju/bus/socket/plugins/SslPlugin.java b/bus-socket/src/main/java/org/aoju/bus/socket/plugins/SslPlugin.java index b99b9998ff..e2de938e9b 100644 --- a/bus-socket/src/main/java/org/aoju/bus/socket/plugins/SslPlugin.java +++ b/bus-socket/src/main/java/org/aoju/bus/socket/plugins/SslPlugin.java @@ -25,7 +25,7 @@ ********************************************************************************/ package org.aoju.bus.socket.plugins; -import org.aoju.bus.core.io.ByteBuffer; +import org.aoju.bus.core.io.buffer.ByteBuffer; import org.aoju.bus.socket.BufferFactory; import org.aoju.bus.socket.security.ClientAuth; import org.aoju.bus.socket.security.SslService; diff --git a/bus-socket/src/main/java/org/aoju/bus/socket/security/HandshakeModel.java b/bus-socket/src/main/java/org/aoju/bus/socket/security/HandshakeModel.java index baab02f322..018f95f9c2 100644 --- a/bus-socket/src/main/java/org/aoju/bus/socket/security/HandshakeModel.java +++ b/bus-socket/src/main/java/org/aoju/bus/socket/security/HandshakeModel.java @@ -25,7 +25,7 @@ ********************************************************************************/ package org.aoju.bus.socket.security; -import org.aoju.bus.core.io.VirtualBuffer; +import org.aoju.bus.core.io.buffer.VirtualBuffer; import javax.net.ssl.SSLEngine; import java.nio.channels.AsynchronousSocketChannel; diff --git a/bus-socket/src/main/java/org/aoju/bus/socket/security/SslService.java b/bus-socket/src/main/java/org/aoju/bus/socket/security/SslService.java index ce70efdab2..c4915868b0 100644 --- a/bus-socket/src/main/java/org/aoju/bus/socket/security/SslService.java +++ b/bus-socket/src/main/java/org/aoju/bus/socket/security/SslService.java @@ -25,7 +25,7 @@ ********************************************************************************/ package org.aoju.bus.socket.security; -import org.aoju.bus.core.io.PageBuffer; +import org.aoju.bus.core.io.buffer.PageBuffer; import org.aoju.bus.logger.Logger; import javax.net.ssl.*; diff --git a/bus-socket/src/main/java/org/aoju/bus/socket/security/SslSocketChannel.java b/bus-socket/src/main/java/org/aoju/bus/socket/security/SslSocketChannel.java index 08d87eb14d..ac77102e66 100644 --- a/bus-socket/src/main/java/org/aoju/bus/socket/security/SslSocketChannel.java +++ b/bus-socket/src/main/java/org/aoju/bus/socket/security/SslSocketChannel.java @@ -25,8 +25,8 @@ ********************************************************************************/ package org.aoju.bus.socket.security; -import org.aoju.bus.core.io.PageBuffer; -import org.aoju.bus.core.io.VirtualBuffer; +import org.aoju.bus.core.io.buffer.PageBuffer; +import org.aoju.bus.core.io.buffer.VirtualBuffer; import org.aoju.bus.logger.Logger; import org.aoju.bus.socket.channel.AsynchronousSocketChannelProxy; diff --git a/bus-spring/pom.xml b/bus-spring/pom.xml index e36d9da5b1..e69a762c65 100755 --- a/bus-spring/pom.xml +++ b/bus-spring/pom.xml @@ -6,7 +6,7 @@ org.aoju bus-spring - 6.5.3 + 6.5.5 jar ${project.artifactId} diff --git a/bus-starter/pom.xml b/bus-starter/pom.xml index 017ab65ea5..3996c17377 100755 --- a/bus-starter/pom.xml +++ b/bus-starter/pom.xml @@ -6,7 +6,7 @@ org.aoju bus-starter - 6.5.3 + 6.5.5 jar ${project.artifactId} diff --git a/bus-starter/src/main/java/org/aoju/bus/starter/jdbc/JdbcConfiguration.java b/bus-starter/src/main/java/org/aoju/bus/starter/jdbc/JdbcConfiguration.java index 915012d9b9..912ca82ba3 100755 --- a/bus-starter/src/main/java/org/aoju/bus/starter/jdbc/JdbcConfiguration.java +++ b/bus-starter/src/main/java/org/aoju/bus/starter/jdbc/JdbcConfiguration.java @@ -25,7 +25,6 @@ ********************************************************************************/ package org.aoju.bus.starter.jdbc; -import com.google.common.collect.Maps; import com.zaxxer.hikari.HikariDataSource; import org.aoju.bus.core.exception.InstrumentException; import org.aoju.bus.core.lang.Algorithm; @@ -145,7 +144,7 @@ private DataSource bind(Map map) { * @return the object */ private Map beanToMap(T bean) { - Map map = Maps.newHashMap(); + Map map = new HashMap<>(); if (null != bean) { BeanMap beanMap = BeanMap.create(bean); for (Object key : beanMap.keySet()) { diff --git a/bus-starter/src/main/java/org/aoju/bus/starter/mapper/NatureSqlHandler.java b/bus-starter/src/main/java/org/aoju/bus/starter/mapper/NatureSqlHandler.java index df24e72411..72a7e1c2c2 100755 --- a/bus-starter/src/main/java/org/aoju/bus/starter/mapper/NatureSqlHandler.java +++ b/bus-starter/src/main/java/org/aoju/bus/starter/mapper/NatureSqlHandler.java @@ -87,12 +87,12 @@ private static void getSql(Configuration configuration, BoundSql boundSql, Strin for (ParameterMapping parameterMapping : parameterMappings) { String propertyName = parameterMapping.getProperty(); if (metaObject.hasGetter(propertyName)) { - Object obj = metaObject.getValue(propertyName); - sql = sql.replaceFirst(id, Matcher.quoteReplacement(getParameterValue(obj))); + Object object = metaObject.getValue(propertyName); + sql = sql.replaceFirst(id, Matcher.quoteReplacement(getParameterValue(object))); } else if (boundSql.hasAdditionalParameter(propertyName)) { - Object obj = boundSql.getAdditionalParameter(propertyName); + Object object = boundSql.getAdditionalParameter(propertyName); // 该分支是动态sql - sql = sql.replaceFirst(id, Matcher.quoteReplacement(getParameterValue(obj))); + sql = sql.replaceFirst(id, Matcher.quoteReplacement(getParameterValue(object))); } else { // 打印Missing,提醒该参数缺失并防止错位 sql = sql.replaceFirst(id, "Missing"); @@ -103,16 +103,16 @@ private static void getSql(Configuration configuration, BoundSql boundSql, Strin Logger.debug(sql); } - private static String getParameterValue(Object obj) { + private static String getParameterValue(Object object) { String value; - if (obj instanceof String) { - value = Symbol.SINGLE_QUOTE + obj + Symbol.SINGLE_QUOTE; - } else if (obj instanceof Date) { + if (object instanceof String) { + value = Symbol.SINGLE_QUOTE + object + Symbol.SINGLE_QUOTE; + } else if (object instanceof Date) { DateFormat formatter = DateFormat.getDateTimeInstance(DateFormat.DEFAULT, DateFormat.DEFAULT, Locale.CHINA); value = Symbol.SINGLE_QUOTE + formatter.format(new Date()) + Symbol.SINGLE_QUOTE; } else { - if (null != obj) { - value = obj.toString(); + if (null != object) { + value = object.toString(); } else { value = Normal.EMPTY; } diff --git a/bus-starter/src/main/java/org/aoju/bus/starter/sensitive/ResponseBodyAdvice.java b/bus-starter/src/main/java/org/aoju/bus/starter/sensitive/ResponseBodyAdvice.java index 2630b130d0..062b42e87b 100755 --- a/bus-starter/src/main/java/org/aoju/bus/starter/sensitive/ResponseBodyAdvice.java +++ b/bus-starter/src/main/java/org/aoju/bus/starter/sensitive/ResponseBodyAdvice.java @@ -135,16 +135,16 @@ public Object beforeBodyWrite(Object body, MethodParameter parameter, MediaType Object object = ((Message) body).getData(); if (object instanceof Result) { List list = new ArrayList<>(); - for (Object obj : ((Result) object).getRows()) { - this.beforeBodyWrite(sensitive, obj); - list.add(obj); + for (Object value : ((Result) object).getRows()) { + this.beforeBodyWrite(sensitive, value); + list.add(value); } ((Result) ((Message) body).getData()).setRows(list); } else if (object instanceof List) { List list = new ArrayList<>(); - for (Object obj : (List) object) { - this.beforeBodyWrite(sensitive, obj); - list.add(obj); + for (Object value : (List) object) { + this.beforeBodyWrite(sensitive, value); + list.add(value); } ((Message) body).setData(list); } else { diff --git a/bus-starter/src/main/java/org/aoju/bus/starter/sensitive/SensitiveResultSetHandler.java b/bus-starter/src/main/java/org/aoju/bus/starter/sensitive/SensitiveResultSetHandler.java index c74c9abcff..c7fc51e07f 100755 --- a/bus-starter/src/main/java/org/aoju/bus/starter/sensitive/SensitiveResultSetHandler.java +++ b/bus-starter/src/main/java/org/aoju/bus/starter/sensitive/SensitiveResultSetHandler.java @@ -92,11 +92,11 @@ public Object intercept(Invocation invocation) throws Throwable { } final Map privacyMap = getSensitiveByResultMap(resultMap); - for (Object obj : results) { + for (Object object : results) { // 数据解密 if (Builder.ALL.equals(sensitive.value()) || Builder.SAFE.equals(sensitive.value()) && (Builder.ALL.equals(sensitive.stage()) || Builder.OUT.equals(sensitive.stage()))) { - final MetaObject objMetaObject = mappedStatement.getConfiguration().newMetaObject(obj); + final MetaObject objMetaObject = mappedStatement.getConfiguration().newMetaObject(object); for (Map.Entry entry : privacyMap.entrySet()) { Privacy privacy = entry.getValue(); if (ObjectKit.isNotEmpty(privacy) && StringKit.isNotEmpty(privacy.value())) { @@ -116,7 +116,7 @@ public Object intercept(Invocation invocation) throws Throwable { if ((Builder.ALL.equals(sensitive.value()) || Builder.SENS.equals(sensitive.value())) && (Builder.ALL.equals(sensitive.stage()) || Builder.OUT.equals(sensitive.stage()))) { Logger.debug("Query data sensitive enabled ..."); - Builder.on(obj); + Builder.on(object); } } } diff --git a/bus-starter/src/main/java/org/aoju/bus/starter/tracer/MethodExecuteCostHandler.java b/bus-starter/src/main/java/org/aoju/bus/starter/tracer/MethodExecuteCostHandler.java index d42b5bd422..a2b6f6d469 100755 --- a/bus-starter/src/main/java/org/aoju/bus/starter/tracer/MethodExecuteCostHandler.java +++ b/bus-starter/src/main/java/org/aoju/bus/starter/tracer/MethodExecuteCostHandler.java @@ -42,7 +42,7 @@ public class MethodExecuteCostHandler { public Object costLogger(ProceedingJoinPoint pjp) throws Throwable { Signature sig = pjp.getSignature(); MethodSignature msig; - Object obj = null; + Object object = null; if (!(sig instanceof MethodSignature)) { throw new IllegalArgumentException("this annotation only used on the method"); @@ -62,7 +62,7 @@ public Object costLogger(ProceedingJoinPoint pjp) throws Throwable { long startTime = System.currentTimeMillis(); try { //执行方法 - obj = pjp.proceed(); + object = pjp.proceed(); } catch (Throwable throwable) { throw throwable; } @@ -71,7 +71,7 @@ public Object costLogger(ProceedingJoinPoint pjp) throws Throwable { //当设置了超时时间,但耗时小于超时时间,不进行日志打印,直接返回 (只有耗时大于超时时间才进行日志打印) if (tacerCostLogger.timeout() != -1 && cost < tacerCostLogger.timeout()) { - return obj; + return object; } //方法名 @@ -126,7 +126,7 @@ public Object costLogger(ProceedingJoinPoint pjp) throws Throwable { } else { try { - obj = pjp.proceed(); + object = pjp.proceed(); } catch (Throwable throwable) { throw throwable; } @@ -135,7 +135,7 @@ public Object costLogger(ProceedingJoinPoint pjp) throws Throwable { } catch (NoSuchMethodException e) { e.printStackTrace(); } - return obj; + return object; } */ } diff --git a/bus-storage/pom.xml b/bus-storage/pom.xml index 161aa6d0f9..a45137781a 100755 --- a/bus-storage/pom.xml +++ b/bus-storage/pom.xml @@ -6,7 +6,7 @@ org.aoju bus-storage - 6.5.3 + 6.5.5 jar ${project.artifactId} @@ -46,7 +46,7 @@ 3.15.0 0.10.212 3.22.3 - 1.12.226 + 1.12.269 8.4.1 7.10.2 5.6.80 diff --git a/bus-storage/src/main/java/org/aoju/bus/storage/provider/AliYunOssProvider.java b/bus-storage/src/main/java/org/aoju/bus/storage/provider/AliYunOssProvider.java index 624da68bdd..3b7ea77123 100755 --- a/bus-storage/src/main/java/org/aoju/bus/storage/provider/AliYunOssProvider.java +++ b/bus-storage/src/main/java/org/aoju/bus/storage/provider/AliYunOssProvider.java @@ -29,7 +29,6 @@ import com.aliyun.oss.common.auth.DefaultCredentialProvider; import com.aliyun.oss.common.comm.ResponseMessage; import com.aliyun.oss.model.*; -import com.google.common.collect.Maps; import org.aoju.bus.core.lang.Assert; import org.aoju.bus.core.lang.Normal; import org.aoju.bus.core.toolkit.StringKit; @@ -41,6 +40,7 @@ import java.io.*; import java.nio.file.Path; +import java.util.HashMap; import java.util.Map; import java.util.stream.Collectors; @@ -122,7 +122,7 @@ public Message list() { Property storageItem = new Property(); storageItem.setName(item.getKey()); storageItem.setSize(StringKit.toString(item.getSize())); - Map extend = Maps.newHashMap(); + Map extend = new HashMap<>(); extend.put("tag", item.getETag()); extend.put("storageClass", item.getStorageClass()); extend.put("lastModified", item.getLastModified()); diff --git a/bus-storage/src/main/java/org/aoju/bus/storage/provider/BaiduYunBosProvider.java b/bus-storage/src/main/java/org/aoju/bus/storage/provider/BaiduYunBosProvider.java index 9d0ad3389c..de121faf59 100755 --- a/bus-storage/src/main/java/org/aoju/bus/storage/provider/BaiduYunBosProvider.java +++ b/bus-storage/src/main/java/org/aoju/bus/storage/provider/BaiduYunBosProvider.java @@ -31,7 +31,6 @@ import com.baidubce.services.bos.model.GetObjectRequest; import com.baidubce.services.bos.model.ListObjectsRequest; import com.baidubce.services.bos.model.ListObjectsResponse; -import com.google.common.collect.Maps; import org.aoju.bus.core.lang.Assert; import org.aoju.bus.core.toolkit.StringKit; import org.aoju.bus.storage.Builder; @@ -42,6 +41,7 @@ import java.io.File; import java.io.InputStream; import java.nio.file.Path; +import java.util.HashMap; import java.util.Map; import java.util.stream.Collectors; @@ -109,7 +109,7 @@ public Message list() { storageItem.setName(item.getKey()); storageItem.setOwner(item.getOwner().getDisplayName()); storageItem.setSize(StringKit.toString(item.getSize())); - Map extend = Maps.newHashMap(); + Map extend = new HashMap<>(); extend.put("tag", item.getETag()); extend.put("storageClass", item.getStorageClass()); extend.put("lastModified", item.getLastModified()); diff --git a/bus-storage/src/main/java/org/aoju/bus/storage/provider/HuaweiObsProvider.java b/bus-storage/src/main/java/org/aoju/bus/storage/provider/HuaweiObsProvider.java index 11886d554a..46f7544836 100755 --- a/bus-storage/src/main/java/org/aoju/bus/storage/provider/HuaweiObsProvider.java +++ b/bus-storage/src/main/java/org/aoju/bus/storage/provider/HuaweiObsProvider.java @@ -25,7 +25,6 @@ ********************************************************************************/ package org.aoju.bus.storage.provider; -import com.google.common.collect.Maps; import com.obs.services.ObsClient; import com.obs.services.model.DownloadFileRequest; import com.obs.services.model.ListObjectsRequest; @@ -40,6 +39,7 @@ import java.io.File; import java.io.InputStream; import java.nio.file.Path; +import java.util.HashMap; import java.util.Map; import java.util.stream.Collectors; @@ -102,7 +102,7 @@ public Message list() { storageItem.setOwner(item.getOwner().getId()); storageItem.setType(item.getMetadata().getContentType()); storageItem.setSize(StringKit.toString(item.getMetadata().getContentLength())); - Map extended = Maps.newHashMap(); + Map extended = new HashMap<>(); extended.put("tag", item.getMetadata().getEtag()); extended.put("storageClass", item.getMetadata().getObjectStorageClass()); extended.put("lastModified", item.getMetadata().getLastModified()); diff --git a/bus-storage/src/main/java/org/aoju/bus/storage/provider/JdYunOssProvider.java b/bus-storage/src/main/java/org/aoju/bus/storage/provider/JdYunOssProvider.java index d34bc1ad2d..dbb0e13bab 100755 --- a/bus-storage/src/main/java/org/aoju/bus/storage/provider/JdYunOssProvider.java +++ b/bus-storage/src/main/java/org/aoju/bus/storage/provider/JdYunOssProvider.java @@ -36,7 +36,6 @@ import com.amazonaws.services.s3.model.GetObjectRequest; import com.amazonaws.services.s3.model.ListObjectsRequest; import com.amazonaws.services.s3.model.ObjectListing; -import com.google.common.collect.Maps; import org.aoju.bus.core.lang.Assert; import org.aoju.bus.core.toolkit.StringKit; import org.aoju.bus.storage.Builder; @@ -47,6 +46,7 @@ import java.io.File; import java.io.InputStream; import java.nio.file.Path; +import java.util.HashMap; import java.util.Map; import java.util.stream.Collectors; @@ -124,7 +124,7 @@ public Message list() { storageItem.setName(item.getKey()); storageItem.setOwner(item.getOwner().getDisplayName()); storageItem.setSize(StringKit.toString(item.getSize())); - Map extend = Maps.newHashMap(); + Map extend = new HashMap<>(); extend.put("tag", item.getETag()); extend.put("storageClass", item.getStorageClass()); extend.put("lastModified", item.getLastModified()); diff --git a/bus-storage/src/main/java/org/aoju/bus/storage/provider/MinioOssProvider.java b/bus-storage/src/main/java/org/aoju/bus/storage/provider/MinioOssProvider.java index 897634ecd9..da965fc90d 100755 --- a/bus-storage/src/main/java/org/aoju/bus/storage/provider/MinioOssProvider.java +++ b/bus-storage/src/main/java/org/aoju/bus/storage/provider/MinioOssProvider.java @@ -25,7 +25,6 @@ ********************************************************************************/ package org.aoju.bus.storage.provider; -import com.google.common.collect.Maps; import io.minio.*; import io.minio.errors.*; import io.minio.messages.Item; @@ -44,6 +43,7 @@ import java.security.InvalidKeyException; import java.security.NoSuchAlgorithmException; import java.time.Duration; +import java.util.HashMap; import java.util.Map; import java.util.stream.Collectors; import java.util.stream.StreamSupport; @@ -141,7 +141,7 @@ public Message list() { Item item = itemResult.get(); storageItem.setName(item.objectName()); storageItem.setSize(StringKit.toString(item.size())); - Map extend = Maps.newHashMap(); + Map extend = new HashMap<>(); extend.put("tag", item.etag()); extend.put("storageClass", item.storageClass()); extend.put("lastModified", item.lastModified()); diff --git a/bus-tracer/pom.xml b/bus-tracer/pom.xml index f4ec9d6e87..e0b830ab58 100755 --- a/bus-tracer/pom.xml +++ b/bus-tracer/pom.xml @@ -6,7 +6,7 @@ org.aoju bus-tracer - 6.5.3 + 6.5.5 jar ${project.artifactId} diff --git a/bus-validate/pom.xml b/bus-validate/pom.xml index 0d92e4d527..cf64a20302 100755 --- a/bus-validate/pom.xml +++ b/bus-validate/pom.xml @@ -6,7 +6,7 @@ org.aoju bus-validate - 6.5.3 + 6.5.5 jar ${project.artifactId} diff --git a/bus-validate/src/main/java/org/aoju/bus/validate/strategy/CompareStrategy.java b/bus-validate/src/main/java/org/aoju/bus/validate/strategy/CompareStrategy.java index 4fc6780a5e..cf2774ddc7 100755 --- a/bus-validate/src/main/java/org/aoju/bus/validate/strategy/CompareStrategy.java +++ b/bus-validate/src/main/java/org/aoju/bus/validate/strategy/CompareStrategy.java @@ -49,11 +49,11 @@ public boolean on(Object object, Compare annotation, Context context) { return false; } boolean _matched = true; - Object obj = ReflectKit.getFieldValue(object, annotation.with()); + Object value = ReflectKit.getFieldValue(object, annotation.with()); - if (obj instanceof String) { - if (MathKit.isNumber(obj.toString())) { - int _compValue = new BigDecimal(obj.toString()).compareTo(new BigDecimal(object.toString())); + if (value instanceof String) { + if (MathKit.isNumber(value.toString())) { + int _compValue = new BigDecimal(value.toString()).compareTo(new BigDecimal(object.toString())); switch (annotation.cond()) { case EQ: _matched = _compValue == 0; @@ -79,10 +79,10 @@ public boolean on(Object object, Compare annotation, Context context) { } else { switch (annotation.cond()) { case EQ: - _matched = StringKit.equals(obj.toString(), object.toString()); + _matched = StringKit.equals(value.toString(), object.toString()); break; case NOT_EQ: - _matched = !StringKit.equals(obj.toString(), object.toString()); + _matched = !StringKit.equals(value.toString(), object.toString()); break; default: }