Full Code of chinabugotech/hutool for AI

v5-master 34bebfd6f32c cached
2426 files
7.5 MB
2.1M tokens
20842 symbols
1 requests
Download .txt
Showing preview only (8,407K chars total). Download the full file or copy to clipboard to get everything.
Repository: chinabugotech/hutool
Branch: v5-master
Commit: 34bebfd6f32c
Files: 2426
Total size: 7.5 MB

Directory structure:
gitextract_lp5z54zp/

├── .editorconfig
├── .gitee/
│   ├── ISSUE_TEMPLATE.zh-CN.md
│   └── PULL_REQUEST_TEMPLATE.zh-CN.md
├── .github/
│   ├── FUNDING.yml
│   ├── ISSUE_TEMPLATE.md
│   ├── PULL_REQUEST_TEMPLATE.md
│   └── codeql-analysis.yml
├── .gitignore
├── .travis.yml
├── CHANGELOG.md
├── CHANGELOG_5.0-5.7.md
├── LICENSE
├── README-EN.md
├── README.md
├── SECURITY.md
├── bin/
│   ├── check_dependency_updates.sh
│   ├── cobertura.sh
│   ├── commit.sh
│   ├── deploy.sh
│   ├── fast_install.sh
│   ├── install.sh
│   ├── javadoc.sh
│   ├── logo.sh
│   ├── package.sh
│   ├── push_dev.sh
│   ├── push_master.sh
│   ├── replaceVersion.sh
│   ├── simple_install.sh
│   ├── sync.sh
│   ├── test.sh
│   ├── update_version.sh
│   └── version.txt
├── docs/
│   ├── .nojekyll
│   ├── apidocs/
│   │   └── index.html
│   └── js/
│       └── version.js
├── hutool-ai/
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   ├── java/
│       │   │   └── cn/
│       │   │       └── hutool/
│       │   │           └── ai/
│       │   │               ├── AIException.java
│       │   │               ├── AIServiceFactory.java
│       │   │               ├── AIUtil.java
│       │   │               ├── ModelName.java
│       │   │               ├── Models.java
│       │   │               ├── core/
│       │   │               │   ├── AIConfig.java
│       │   │               │   ├── AIConfigBuilder.java
│       │   │               │   ├── AIConfigRegistry.java
│       │   │               │   ├── AIService.java
│       │   │               │   ├── AIServiceProvider.java
│       │   │               │   ├── BaseAIService.java
│       │   │               │   ├── BaseConfig.java
│       │   │               │   ├── Message.java
│       │   │               │   └── package-info.java
│       │   │               ├── model/
│       │   │               │   ├── deepseek/
│       │   │               │   │   ├── DeepSeekCommon.java
│       │   │               │   │   ├── DeepSeekConfig.java
│       │   │               │   │   ├── DeepSeekProvider.java
│       │   │               │   │   ├── DeepSeekService.java
│       │   │               │   │   ├── DeepSeekServiceImpl.java
│       │   │               │   │   └── package-info.java
│       │   │               │   ├── doubao/
│       │   │               │   │   ├── DoubaoCommon.java
│       │   │               │   │   ├── DoubaoConfig.java
│       │   │               │   │   ├── DoubaoProvider.java
│       │   │               │   │   ├── DoubaoService.java
│       │   │               │   │   ├── DoubaoServiceImpl.java
│       │   │               │   │   └── package-info.java
│       │   │               │   ├── gemini/
│       │   │               │   │   ├── GeminiCommon.java
│       │   │               │   │   ├── GeminiConfig.java
│       │   │               │   │   ├── GeminiProvider.java
│       │   │               │   │   ├── GeminiService.java
│       │   │               │   │   ├── GeminiServiceImpl.java
│       │   │               │   │   └── package-info.java
│       │   │               │   ├── grok/
│       │   │               │   │   ├── GrokCommon.java
│       │   │               │   │   ├── GrokConfig.java
│       │   │               │   │   ├── GrokProvider.java
│       │   │               │   │   ├── GrokService.java
│       │   │               │   │   ├── GrokServiceImpl.java
│       │   │               │   │   └── package-info.java
│       │   │               │   ├── hutool/
│       │   │               │   │   ├── HutoolCommon.java
│       │   │               │   │   ├── HutoolConfig.java
│       │   │               │   │   ├── HutoolProvider.java
│       │   │               │   │   ├── HutoolService.java
│       │   │               │   │   ├── HutoolServiceImpl.java
│       │   │               │   │   └── package-info.java
│       │   │               │   ├── ollama/
│       │   │               │   │   ├── OllamaCommon.java
│       │   │               │   │   ├── OllamaConfig.java
│       │   │               │   │   ├── OllamaProvider.java
│       │   │               │   │   ├── OllamaService.java
│       │   │               │   │   ├── OllamaServiceImpl.java
│       │   │               │   │   └── package-info.java
│       │   │               │   ├── openai/
│       │   │               │   │   ├── OpenaiCommon.java
│       │   │               │   │   ├── OpenaiConfig.java
│       │   │               │   │   ├── OpenaiProvider.java
│       │   │               │   │   ├── OpenaiService.java
│       │   │               │   │   ├── OpenaiServiceImpl.java
│       │   │               │   │   └── package-info.java
│       │   │               │   └── package-info.java
│       │   │               └── package-info.java
│       │   └── resources/
│       │       └── META-INF/
│       │           └── services/
│       │               ├── cn.hutool.ai.core.AIConfig
│       │               └── cn.hutool.ai.core.AIServiceProvider
│       └── test/
│           └── java/
│               ├── AIServiceFactoryTest.java
│               ├── AIUtilTest.java
│               └── cn/
│                   └── hutool/
│                       └── ai/
│                           └── model/
│                               ├── deepseek/
│                               │   └── DeepSeekServiceTest.java
│                               ├── doubao/
│                               │   └── DoubaoServiceTest.java
│                               ├── gemini/
│                               │   └── GeminiServiceTest.java
│                               ├── grok/
│                               │   └── GrokServiceTest.java
│                               ├── hutool/
│                               │   └── HutoolServiceTest.java
│                               ├── ollama/
│                               │   └── OllamaServiceTest.java
│                               └── openai/
│                                   ├── OpenaiProxyServiceTest.java
│                                   └── OpenaiServiceTest.java
├── hutool-all/
│   ├── pom.xml
│   └── src/
│       └── main/
│           └── java/
│               └── cn/
│                   └── hutool/
│                       ├── Hutool.java
│                       └── package-info.java
├── hutool-aop/
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   ├── java/
│       │   │   └── cn/
│       │   │       └── hutool/
│       │   │           └── aop/
│       │   │               ├── ProxyUtil.java
│       │   │               ├── aspects/
│       │   │               │   ├── Aspect.java
│       │   │               │   ├── SimpleAspect.java
│       │   │               │   ├── TimeIntervalAspect.java
│       │   │               │   └── package-info.java
│       │   │               ├── interceptor/
│       │   │               │   ├── CglibInterceptor.java
│       │   │               │   ├── JdkInterceptor.java
│       │   │               │   ├── SpringCglibInterceptor.java
│       │   │               │   └── package-info.java
│       │   │               ├── package-info.java
│       │   │               └── proxy/
│       │   │                   ├── CglibProxyFactory.java
│       │   │                   ├── JdkProxyFactory.java
│       │   │                   ├── ProxyFactory.java
│       │   │                   ├── SpringCglibProxyFactory.java
│       │   │                   └── package-info.java
│       │   └── resources/
│       │       └── META-INF/
│       │           └── services/
│       │               └── cn.hutool.aop.proxy.ProxyFactory
│       └── test/
│           └── java/
│               └── cn/
│                   └── hutool/
│                       └── aop/
│                           └── test/
│                               ├── AopTest.java
│                               ├── IssueI74EX7Test.java
│                               └── IssueIBF20ZTest.java
├── hutool-bloomFilter/
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   └── java/
│       │       └── cn/
│       │           └── hutool/
│       │               └── bloomfilter/
│       │                   ├── BitMapBloomFilter.java
│       │                   ├── BitSetBloomFilter.java
│       │                   ├── BloomFilter.java
│       │                   ├── BloomFilterUtil.java
│       │                   ├── bitMap/
│       │                   │   ├── BitMap.java
│       │                   │   ├── IntMap.java
│       │                   │   ├── LongMap.java
│       │                   │   └── package-info.java
│       │                   ├── filter/
│       │                   │   ├── AbstractFilter.java
│       │                   │   ├── DefaultFilter.java
│       │                   │   ├── ELFFilter.java
│       │                   │   ├── FNVFilter.java
│       │                   │   ├── FuncFilter.java
│       │                   │   ├── HfFilter.java
│       │                   │   ├── HfIpFilter.java
│       │                   │   ├── JSFilter.java
│       │                   │   ├── PJWFilter.java
│       │                   │   ├── RSFilter.java
│       │                   │   ├── SDBMFilter.java
│       │                   │   ├── TianlFilter.java
│       │                   │   └── package-info.java
│       │                   └── package-info.java
│       └── test/
│           └── java/
│               └── cn/
│                   └── hutool/
│                       └── bloomfilter/
│                           ├── AbstractFilterTest.java
│                           ├── BitMapBloomFilterTest.java
│                           └── BitSetBloomFilterTest.java
├── hutool-bom/
│   └── pom.xml
├── hutool-cache/
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   └── java/
│       │       └── cn/
│       │           └── hutool/
│       │               └── cache/
│       │                   ├── Cache.java
│       │                   ├── CacheListener.java
│       │                   ├── CacheUtil.java
│       │                   ├── GlobalPruneTimer.java
│       │                   ├── file/
│       │                   │   ├── AbstractFileCache.java
│       │                   │   ├── LFUFileCache.java
│       │                   │   ├── LRUFileCache.java
│       │                   │   └── package-info.java
│       │                   ├── impl/
│       │                   │   ├── AbstractCache.java
│       │                   │   ├── CacheObj.java
│       │                   │   ├── CacheObjIterator.java
│       │                   │   ├── CacheValuesIterator.java
│       │                   │   ├── FIFOCache.java
│       │                   │   ├── LFUCache.java
│       │                   │   ├── LRUCache.java
│       │                   │   ├── NoCache.java
│       │                   │   ├── ReentrantCache.java
│       │                   │   ├── StampedCache.java
│       │                   │   ├── TimedCache.java
│       │                   │   ├── WeakCache.java
│       │                   │   └── package-info.java
│       │                   └── package-info.java
│       └── test/
│           └── java/
│               └── cn/
│                   └── hutool/
│                       └── cache/
│                           ├── CacheConcurrentTest.java
│                           ├── CacheTest.java
│                           ├── FileCacheTest.java
│                           ├── Issue3618Test.java
│                           ├── IssueI8MEIXTest.java
│                           ├── LRUCacheTest.java
│                           └── WeakCacheTest.java
├── hutool-captcha/
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   └── java/
│       │       └── cn/
│       │           └── hutool/
│       │               └── captcha/
│       │                   ├── AbstractCaptcha.java
│       │                   ├── CaptchaUtil.java
│       │                   ├── CircleCaptcha.java
│       │                   ├── GifCaptcha.java
│       │                   ├── ICaptcha.java
│       │                   ├── LineCaptcha.java
│       │                   ├── ShearCaptcha.java
│       │                   ├── generator/
│       │                   │   ├── AbstractGenerator.java
│       │                   │   ├── CodeGenerator.java
│       │                   │   ├── MathGenerator.java
│       │                   │   ├── RandomGenerator.java
│       │                   │   └── package-info.java
│       │                   └── package-info.java
│       └── test/
│           └── java/
│               └── cn/
│                   └── hutool/
│                       └── captcha/
│                           ├── CaptchaTest.java
│                           ├── CaptchaUtilTest.java
│                           ├── GeneratorTest.java
│                           ├── GifCaptchaUtilTest.java
│                           └── ShearCaptchaTest.java
├── hutool-core/
│   ├── README.md
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   └── java/
│       │       └── cn/
│       │           └── hutool/
│       │               └── core/
│       │                   ├── annotation/
│       │                   │   ├── AbstractAnnotationSynthesizer.java
│       │                   │   ├── AbstractLinkAnnotationPostProcessor.java
│       │                   │   ├── AbstractWrappedAnnotationAttribute.java
│       │                   │   ├── AggregateAnnotation.java
│       │                   │   ├── Alias.java
│       │                   │   ├── AliasAnnotationPostProcessor.java
│       │                   │   ├── AliasFor.java
│       │                   │   ├── AliasLinkAnnotationPostProcessor.java
│       │                   │   ├── AliasedAnnotationAttribute.java
│       │                   │   ├── AnnotationAttribute.java
│       │                   │   ├── AnnotationAttributeValueProvider.java
│       │                   │   ├── AnnotationProxy.java
│       │                   │   ├── AnnotationSynthesizer.java
│       │                   │   ├── AnnotationUtil.java
│       │                   │   ├── CacheableAnnotationAttribute.java
│       │                   │   ├── CacheableSynthesizedAnnotationAttributeProcessor.java
│       │                   │   ├── CombinationAnnotationElement.java
│       │                   │   ├── ForceAliasFor.java
│       │                   │   ├── ForceAliasedAnnotationAttribute.java
│       │                   │   ├── GenericSynthesizedAggregateAnnotation.java
│       │                   │   ├── GenericSynthesizedAnnotation.java
│       │                   │   ├── Hierarchical.java
│       │                   │   ├── Link.java
│       │                   │   ├── MirrorFor.java
│       │                   │   ├── MirrorLinkAnnotationPostProcessor.java
│       │                   │   ├── MirroredAnnotationAttribute.java
│       │                   │   ├── PropIgnore.java
│       │                   │   ├── RelationType.java
│       │                   │   ├── SynthesizedAggregateAnnotation.java
│       │                   │   ├── SynthesizedAnnotation.java
│       │                   │   ├── SynthesizedAnnotationAttributeProcessor.java
│       │                   │   ├── SynthesizedAnnotationPostProcessor.java
│       │                   │   ├── SynthesizedAnnotationProxy.java
│       │                   │   ├── SynthesizedAnnotationSelector.java
│       │                   │   ├── WrappedAnnotationAttribute.java
│       │                   │   ├── package-info.java
│       │                   │   └── scanner/
│       │                   │       ├── AbstractTypeAnnotationScanner.java
│       │                   │       ├── AnnotationScanner.java
│       │                   │       ├── ElementAnnotationScanner.java
│       │                   │       ├── EmptyAnnotationScanner.java
│       │                   │       ├── FieldAnnotationScanner.java
│       │                   │       ├── GenericAnnotationScanner.java
│       │                   │       ├── MetaAnnotationScanner.java
│       │                   │       ├── MethodAnnotationScanner.java
│       │                   │       ├── TypeAnnotationScanner.java
│       │                   │       └── package-info.java
│       │                   ├── bean/
│       │                   │   ├── BeanDesc.java
│       │                   │   ├── BeanDescCache.java
│       │                   │   ├── BeanException.java
│       │                   │   ├── BeanInfoCache.java
│       │                   │   ├── BeanPath.java
│       │                   │   ├── BeanUtil.java
│       │                   │   ├── DynaBean.java
│       │                   │   ├── NullWrapperBean.java
│       │                   │   ├── PropDesc.java
│       │                   │   ├── RecordUtil.java
│       │                   │   ├── copier/
│       │                   │   │   ├── AbsCopier.java
│       │                   │   │   ├── BeanCopier.java
│       │                   │   │   ├── BeanToBeanCopier.java
│       │                   │   │   ├── BeanToMapCopier.java
│       │                   │   │   ├── CopyOptions.java
│       │                   │   │   ├── IJSONTypeConverter.java
│       │                   │   │   ├── MapToBeanCopier.java
│       │                   │   │   ├── MapToMapCopier.java
│       │                   │   │   ├── ValueProvider.java
│       │                   │   │   ├── ValueProviderToBeanCopier.java
│       │                   │   │   ├── package-info.java
│       │                   │   │   └── provider/
│       │                   │   │       ├── BeanValueProvider.java
│       │                   │   │       ├── DynaBeanValueProvider.java
│       │                   │   │       ├── MapValueProvider.java
│       │                   │   │       └── package-info.java
│       │                   │   └── package-info.java
│       │                   ├── builder/
│       │                   │   ├── Builder.java
│       │                   │   ├── CompareToBuilder.java
│       │                   │   ├── EqualsBuilder.java
│       │                   │   ├── GenericBuilder.java
│       │                   │   ├── HashCodeBuilder.java
│       │                   │   ├── IDKey.java
│       │                   │   └── package-info.java
│       │                   ├── clone/
│       │                   │   ├── CloneRuntimeException.java
│       │                   │   ├── CloneSupport.java
│       │                   │   ├── Cloneable.java
│       │                   │   ├── DefaultCloneable.java
│       │                   │   └── package-info.java
│       │                   ├── codec/
│       │                   │   ├── BCD.java
│       │                   │   ├── Base16Codec.java
│       │                   │   ├── Base32.java
│       │                   │   ├── Base32Codec.java
│       │                   │   ├── Base58.java
│       │                   │   ├── Base58Codec.java
│       │                   │   ├── Base62.java
│       │                   │   ├── Base62Codec.java
│       │                   │   ├── Base64.java
│       │                   │   ├── Base64Decoder.java
│       │                   │   ├── Base64Encoder.java
│       │                   │   ├── Caesar.java
│       │                   │   ├── Decoder.java
│       │                   │   ├── Encoder.java
│       │                   │   ├── Hashids.java
│       │                   │   ├── Morse.java
│       │                   │   ├── PercentCodec.java
│       │                   │   ├── PunyCode.java
│       │                   │   ├── Rot.java
│       │                   │   └── package-info.java
│       │                   ├── collection/
│       │                   │   ├── ArrayIter.java
│       │                   │   ├── AvgPartition.java
│       │                   │   ├── BoundedPriorityQueue.java
│       │                   │   ├── CollStreamUtil.java
│       │                   │   ├── CollUtil.java
│       │                   │   ├── CollectionUtil.java
│       │                   │   ├── ComputeIter.java
│       │                   │   ├── ConcurrentHashSet.java
│       │                   │   ├── CopiedIter.java
│       │                   │   ├── EnumerationIter.java
│       │                   │   ├── FilterIter.java
│       │                   │   ├── IterChain.java
│       │                   │   ├── IterUtil.java
│       │                   │   ├── IterableIter.java
│       │                   │   ├── IteratorEnumeration.java
│       │                   │   ├── LineIter.java
│       │                   │   ├── ListUtil.java
│       │                   │   ├── NodeListIter.java
│       │                   │   ├── Partition.java
│       │                   │   ├── PartitionIter.java
│       │                   │   ├── RandomAccessAvgPartition.java
│       │                   │   ├── RandomAccessPartition.java
│       │                   │   ├── ResettableIter.java
│       │                   │   ├── RingIndexUtil.java
│       │                   │   ├── SpliteratorUtil.java
│       │                   │   ├── TransCollection.java
│       │                   │   ├── TransIter.java
│       │                   │   ├── TransSpliterator.java
│       │                   │   ├── UniqueKeySet.java
│       │                   │   └── package-info.java
│       │                   ├── comparator/
│       │                   │   ├── BaseFieldComparator.java
│       │                   │   ├── ComparableComparator.java
│       │                   │   ├── ComparatorChain.java
│       │                   │   ├── ComparatorException.java
│       │                   │   ├── CompareUtil.java
│       │                   │   ├── FieldComparator.java
│       │                   │   ├── FieldsComparator.java
│       │                   │   ├── FuncComparator.java
│       │                   │   ├── IndexedComparator.java
│       │                   │   ├── InstanceComparator.java
│       │                   │   ├── LengthComparator.java
│       │                   │   ├── NullComparator.java
│       │                   │   ├── PinyinComparator.java
│       │                   │   ├── PropertyComparator.java
│       │                   │   ├── ReverseComparator.java
│       │                   │   ├── VersionComparator.java
│       │                   │   ├── WindowsExplorerStringComparator.java
│       │                   │   └── package-info.java
│       │                   ├── compiler/
│       │                   │   ├── CompilerException.java
│       │                   │   ├── CompilerUtil.java
│       │                   │   ├── DiagnosticUtil.java
│       │                   │   ├── JavaClassFileManager.java
│       │                   │   ├── JavaClassFileObject.java
│       │                   │   ├── JavaFileObjectUtil.java
│       │                   │   ├── JavaSourceCompiler.java
│       │                   │   ├── JavaSourceFileObject.java
│       │                   │   └── package-info.java
│       │                   ├── compress/
│       │                   │   ├── Deflate.java
│       │                   │   ├── Gzip.java
│       │                   │   ├── ZipCopyVisitor.java
│       │                   │   ├── ZipReader.java
│       │                   │   ├── ZipWriter.java
│       │                   │   └── package-info.java
│       │                   ├── convert/
│       │                   │   ├── AbstractConverter.java
│       │                   │   ├── BasicType.java
│       │                   │   ├── CastUtil.java
│       │                   │   ├── Convert.java
│       │                   │   ├── ConvertException.java
│       │                   │   ├── Converter.java
│       │                   │   ├── ConverterRegistry.java
│       │                   │   ├── NumberChineseFormatter.java
│       │                   │   ├── NumberWithFormat.java
│       │                   │   ├── NumberWordFormatter.java
│       │                   │   ├── TypeConverter.java
│       │                   │   ├── impl/
│       │                   │   │   ├── ArrayConverter.java
│       │                   │   │   ├── AtomicBooleanConverter.java
│       │                   │   │   ├── AtomicIntegerArrayConverter.java
│       │                   │   │   ├── AtomicLongArrayConverter.java
│       │                   │   │   ├── AtomicReferenceConverter.java
│       │                   │   │   ├── BeanConverter.java
│       │                   │   │   ├── BooleanConverter.java
│       │                   │   │   ├── CalendarConverter.java
│       │                   │   │   ├── CastConverter.java
│       │                   │   │   ├── CharacterConverter.java
│       │                   │   │   ├── CharsetConverter.java
│       │                   │   │   ├── ClassConverter.java
│       │                   │   │   ├── CollectionConverter.java
│       │                   │   │   ├── CurrencyConverter.java
│       │                   │   │   ├── DateConverter.java
│       │                   │   │   ├── DurationConverter.java
│       │                   │   │   ├── EntryConverter.java
│       │                   │   │   ├── EnumConverter.java
│       │                   │   │   ├── LocaleConverter.java
│       │                   │   │   ├── MapConverter.java
│       │                   │   │   ├── NumberConverter.java
│       │                   │   │   ├── OptConverter.java
│       │                   │   │   ├── OptionalConverter.java
│       │                   │   │   ├── PairConverter.java
│       │                   │   │   ├── PathConverter.java
│       │                   │   │   ├── PeriodConverter.java
│       │                   │   │   ├── PrimitiveConverter.java
│       │                   │   │   ├── RecordConverter.java
│       │                   │   │   ├── ReferenceConverter.java
│       │                   │   │   ├── StackTraceElementConverter.java
│       │                   │   │   ├── StringConverter.java
│       │                   │   │   ├── TemporalAccessorConverter.java
│       │                   │   │   ├── TimeZoneConverter.java
│       │                   │   │   ├── URIConverter.java
│       │                   │   │   ├── URLConverter.java
│       │                   │   │   ├── UUIDConverter.java
│       │                   │   │   └── package-info.java
│       │                   │   └── package-info.java
│       │                   ├── date/
│       │                   │   ├── BetweenFormatter.java
│       │                   │   ├── CalendarUtil.java
│       │                   │   ├── ChineseDate.java
│       │                   │   ├── DateBetween.java
│       │                   │   ├── DateException.java
│       │                   │   ├── DateField.java
│       │                   │   ├── DateModifier.java
│       │                   │   ├── DatePattern.java
│       │                   │   ├── DateRange.java
│       │                   │   ├── DateTime.java
│       │                   │   ├── DateUnit.java
│       │                   │   ├── DateUtil.java
│       │                   │   ├── GroupTimeInterval.java
│       │                   │   ├── LocalDateTimeUtil.java
│       │                   │   ├── Month.java
│       │                   │   ├── Quarter.java
│       │                   │   ├── StopWatch.java
│       │                   │   ├── SystemClock.java
│       │                   │   ├── TemporalAccessorUtil.java
│       │                   │   ├── TemporalUtil.java
│       │                   │   ├── TimeInterval.java
│       │                   │   ├── TimeZoneUtil.java
│       │                   │   ├── Week.java
│       │                   │   ├── YearQuarter.java
│       │                   │   ├── Zodiac.java
│       │                   │   ├── ZoneUtil.java
│       │                   │   ├── chinese/
│       │                   │   │   ├── ChineseMonth.java
│       │                   │   │   ├── GanZhi.java
│       │                   │   │   ├── LunarFestival.java
│       │                   │   │   ├── LunarInfo.java
│       │                   │   │   ├── SolarTerms.java
│       │                   │   │   └── package-info.java
│       │                   │   ├── format/
│       │                   │   │   ├── AbstractDateBasic.java
│       │                   │   │   ├── DateBasic.java
│       │                   │   │   ├── DateParser.java
│       │                   │   │   ├── DatePrinter.java
│       │                   │   │   ├── FastDateFormat.java
│       │                   │   │   ├── FastDateParser.java
│       │                   │   │   ├── FastDatePrinter.java
│       │                   │   │   ├── FormatCache.java
│       │                   │   │   ├── GlobalCustomFormat.java
│       │                   │   │   └── package-info.java
│       │                   │   └── package-info.java
│       │                   ├── exceptions/
│       │                   │   ├── CheckedUtil.java
│       │                   │   ├── DependencyException.java
│       │                   │   ├── ExceptionUtil.java
│       │                   │   ├── InvocationTargetRuntimeException.java
│       │                   │   ├── NotInitedException.java
│       │                   │   ├── StatefulException.java
│       │                   │   ├── UtilException.java
│       │                   │   ├── ValidateException.java
│       │                   │   └── package-info.java
│       │                   ├── getter/
│       │                   │   ├── ArrayTypeGetter.java
│       │                   │   ├── BasicTypeGetter.java
│       │                   │   ├── GroupedTypeGetter.java
│       │                   │   ├── ListTypeGetter.java
│       │                   │   ├── OptArrayTypeGetter.java
│       │                   │   ├── OptBasicTypeGetter.java
│       │                   │   ├── OptNullBasicTypeFromObjectGetter.java
│       │                   │   ├── OptNullBasicTypeFromStringGetter.java
│       │                   │   ├── OptNullBasicTypeGetter.java
│       │                   │   └── package-info.java
│       │                   ├── img/
│       │                   │   ├── BackgroundRemoval.java
│       │                   │   ├── ColorUtil.java
│       │                   │   ├── FontUtil.java
│       │                   │   ├── GraphicsUtil.java
│       │                   │   ├── Img.java
│       │                   │   ├── ImgUtil.java
│       │                   │   ├── LabColor.java
│       │                   │   ├── ScaleType.java
│       │                   │   ├── gif/
│       │                   │   │   ├── AnimatedGifEncoder.java
│       │                   │   │   ├── GifDecoder.java
│       │                   │   │   ├── LZWEncoder.java
│       │                   │   │   ├── NeuQuant.java
│       │                   │   │   └── package-info.java
│       │                   │   └── package-info.java
│       │                   ├── io/
│       │                   │   ├── AppendableWriter.java
│       │                   │   ├── BOMInputStream.java
│       │                   │   ├── BomReader.java
│       │                   │   ├── BufferUtil.java
│       │                   │   ├── CharsetDetector.java
│       │                   │   ├── FastByteArrayOutputStream.java
│       │                   │   ├── FastByteBuffer.java
│       │                   │   ├── FastStringWriter.java
│       │                   │   ├── FileMagicNumber.java
│       │                   │   ├── FileTypeUtil.java
│       │                   │   ├── FileUtil.java
│       │                   │   ├── IORuntimeException.java
│       │                   │   ├── IoUtil.java
│       │                   │   ├── LimitedInputStream.java
│       │                   │   ├── LineHandler.java
│       │                   │   ├── ManifestUtil.java
│       │                   │   ├── NioUtil.java
│       │                   │   ├── NullOutputStream.java
│       │                   │   ├── StreamProgress.java
│       │                   │   ├── ValidateObjectInputStream.java
│       │                   │   ├── checksum/
│       │                   │   │   ├── CRC16.java
│       │                   │   │   ├── CRC8.java
│       │                   │   │   ├── crc16/
│       │                   │   │   │   ├── CRC16Ansi.java
│       │                   │   │   │   ├── CRC16CCITT.java
│       │                   │   │   │   ├── CRC16CCITTFalse.java
│       │                   │   │   │   ├── CRC16Checksum.java
│       │                   │   │   │   ├── CRC16DNP.java
│       │                   │   │   │   ├── CRC16IBM.java
│       │                   │   │   │   ├── CRC16Maxim.java
│       │                   │   │   │   ├── CRC16Modbus.java
│       │                   │   │   │   ├── CRC16USB.java
│       │                   │   │   │   ├── CRC16X25.java
│       │                   │   │   │   ├── CRC16XModem.java
│       │                   │   │   │   └── package-info.java
│       │                   │   │   └── package-info.java
│       │                   │   ├── copy/
│       │                   │   │   ├── ChannelCopier.java
│       │                   │   │   ├── IoCopier.java
│       │                   │   │   ├── ReaderWriterCopier.java
│       │                   │   │   ├── StreamCopier.java
│       │                   │   │   └── package-info.java
│       │                   │   ├── file/
│       │                   │   │   ├── FileAppender.java
│       │                   │   │   ├── FileCopier.java
│       │                   │   │   ├── FileMode.java
│       │                   │   │   ├── FileNameUtil.java
│       │                   │   │   ├── FileReader.java
│       │                   │   │   ├── FileSystemUtil.java
│       │                   │   │   ├── FileWrapper.java
│       │                   │   │   ├── FileWriter.java
│       │                   │   │   ├── LineReadWatcher.java
│       │                   │   │   ├── LineSeparator.java
│       │                   │   │   ├── PathMover.java
│       │                   │   │   ├── PathUtil.java
│       │                   │   │   ├── Tailer.java
│       │                   │   │   ├── package-info.java
│       │                   │   │   └── visitor/
│       │                   │   │       ├── CopyVisitor.java
│       │                   │   │       ├── DelVisitor.java
│       │                   │   │       ├── MoveVisitor.java
│       │                   │   │       └── package-info.java
│       │                   │   ├── package-info.java
│       │                   │   ├── resource/
│       │                   │   │   ├── BytesResource.java
│       │                   │   │   ├── CharSequenceResource.java
│       │                   │   │   ├── ClassPathResource.java
│       │                   │   │   ├── FileObjectResource.java
│       │                   │   │   ├── FileResource.java
│       │                   │   │   ├── InputStreamResource.java
│       │                   │   │   ├── MultiFileResource.java
│       │                   │   │   ├── MultiResource.java
│       │                   │   │   ├── NoResourceException.java
│       │                   │   │   ├── Resource.java
│       │                   │   │   ├── ResourceUtil.java
│       │                   │   │   ├── StringResource.java
│       │                   │   │   ├── UrlResource.java
│       │                   │   │   ├── VfsResource.java
│       │                   │   │   ├── WebAppResource.java
│       │                   │   │   └── package-info.java
│       │                   │   ├── unit/
│       │                   │   │   ├── DataSize.java
│       │                   │   │   ├── DataSizeUtil.java
│       │                   │   │   ├── DataUnit.java
│       │                   │   │   └── package-info.java
│       │                   │   └── watch/
│       │                   │       ├── SimpleWatcher.java
│       │                   │       ├── WatchAction.java
│       │                   │       ├── WatchException.java
│       │                   │       ├── WatchKind.java
│       │                   │       ├── WatchMonitor.java
│       │                   │       ├── WatchServer.java
│       │                   │       ├── WatchUtil.java
│       │                   │       ├── Watcher.java
│       │                   │       ├── package-info.java
│       │                   │       └── watchers/
│       │                   │           ├── DelayWatcher.java
│       │                   │           ├── IgnoreWatcher.java
│       │                   │           ├── WatcherChain.java
│       │                   │           └── package-info.java
│       │                   ├── lang/
│       │                   │   ├── Assert.java
│       │                   │   ├── Chain.java
│       │                   │   ├── ClassScanner.java
│       │                   │   ├── ConsistentHash.java
│       │                   │   ├── Console.java
│       │                   │   ├── ConsoleTable.java
│       │                   │   ├── DefaultSegment.java
│       │                   │   ├── Dict.java
│       │                   │   ├── Editor.java
│       │                   │   ├── EnumItem.java
│       │                   │   ├── Filter.java
│       │                   │   ├── JarClassLoader.java
│       │                   │   ├── Matcher.java
│       │                   │   ├── ObjectId.java
│       │                   │   ├── Opt.java
│       │                   │   ├── Pair.java
│       │                   │   ├── ParameterizedTypeImpl.java
│       │                   │   ├── PatternPool.java
│       │                   │   ├── Pid.java
│       │                   │   ├── Range.java
│       │                   │   ├── RegexPool.java
│       │                   │   ├── Replacer.java
│       │                   │   ├── ResourceClassLoader.java
│       │                   │   ├── Segment.java
│       │                   │   ├── SimpleCache.java
│       │                   │   ├── Singleton.java
│       │                   │   ├── Snowflake.java
│       │                   │   ├── Tuple.java
│       │                   │   ├── TypeReference.java
│       │                   │   ├── UUID.java
│       │                   │   ├── Validator.java
│       │                   │   ├── Version.java
│       │                   │   ├── WeightListRandom.java
│       │                   │   ├── WeightRandom.java
│       │                   │   ├── ansi/
│       │                   │   │   ├── Ansi8BitColor.java
│       │                   │   │   ├── AnsiBackground.java
│       │                   │   │   ├── AnsiColor.java
│       │                   │   │   ├── AnsiColorWrapper.java
│       │                   │   │   ├── AnsiColors.java
│       │                   │   │   ├── AnsiElement.java
│       │                   │   │   ├── AnsiEncoder.java
│       │                   │   │   ├── AnsiStyle.java
│       │                   │   │   ├── ForeOrBack.java
│       │                   │   │   └── package-info.java
│       │                   │   ├── caller/
│       │                   │   │   ├── Caller.java
│       │                   │   │   ├── CallerUtil.java
│       │                   │   │   ├── SecurityManagerCaller.java
│       │                   │   │   ├── StackTraceCaller.java
│       │                   │   │   └── package-info.java
│       │                   │   ├── copier/
│       │                   │   │   ├── Copier.java
│       │                   │   │   ├── SrcToDestCopier.java
│       │                   │   │   └── package-info.java
│       │                   │   ├── func/
│       │                   │   │   ├── Consumer3.java
│       │                   │   │   ├── Func.java
│       │                   │   │   ├── Func0.java
│       │                   │   │   ├── Func1.java
│       │                   │   │   ├── LambdaUtil.java
│       │                   │   │   ├── Supplier1.java
│       │                   │   │   ├── Supplier2.java
│       │                   │   │   ├── Supplier3.java
│       │                   │   │   ├── Supplier4.java
│       │                   │   │   ├── Supplier5.java
│       │                   │   │   ├── VoidFunc.java
│       │                   │   │   ├── VoidFunc0.java
│       │                   │   │   ├── VoidFunc1.java
│       │                   │   │   └── package-info.java
│       │                   │   ├── generator/
│       │                   │   │   ├── Generator.java
│       │                   │   │   ├── ObjectGenerator.java
│       │                   │   │   ├── ObjectIdGenerator.java
│       │                   │   │   ├── SnowflakeGenerator.java
│       │                   │   │   ├── UUIDGenerator.java
│       │                   │   │   └── package-info.java
│       │                   │   ├── hash/
│       │                   │   │   ├── CityHash.java
│       │                   │   │   ├── Hash.java
│       │                   │   │   ├── Hash128.java
│       │                   │   │   ├── Hash32.java
│       │                   │   │   ├── Hash64.java
│       │                   │   │   ├── KetamaHash.java
│       │                   │   │   ├── MetroHash.java
│       │                   │   │   ├── MurmurHash.java
│       │                   │   │   ├── Number128.java
│       │                   │   │   └── package-info.java
│       │                   │   ├── id/
│       │                   │   │   ├── IdConstants.java
│       │                   │   │   ├── NanoId.java
│       │                   │   │   └── package-info.java
│       │                   │   ├── intern/
│       │                   │   │   ├── InternUtil.java
│       │                   │   │   ├── Interner.java
│       │                   │   │   ├── JdkStringInterner.java
│       │                   │   │   ├── WeakInterner.java
│       │                   │   │   └── package-info.java
│       │                   │   ├── loader/
│       │                   │   │   ├── AtomicLoader.java
│       │                   │   │   ├── LazyFunLoader.java
│       │                   │   │   ├── LazyLoader.java
│       │                   │   │   ├── Loader.java
│       │                   │   │   └── package-info.java
│       │                   │   ├── mutable/
│       │                   │   │   ├── Mutable.java
│       │                   │   │   ├── MutableBool.java
│       │                   │   │   ├── MutableByte.java
│       │                   │   │   ├── MutableDouble.java
│       │                   │   │   ├── MutableFloat.java
│       │                   │   │   ├── MutableInt.java
│       │                   │   │   ├── MutableLong.java
│       │                   │   │   ├── MutableObj.java
│       │                   │   │   ├── MutablePair.java
│       │                   │   │   ├── MutableShort.java
│       │                   │   │   └── package-info.java
│       │                   │   ├── package-info.java
│       │                   │   ├── ref/
│       │                   │   │   ├── PhantomObj.java
│       │                   │   │   ├── Ref.java
│       │                   │   │   ├── ReferenceType.java
│       │                   │   │   ├── SoftObj.java
│       │                   │   │   ├── StrongObj.java
│       │                   │   │   ├── WeakObj.java
│       │                   │   │   └── package-info.java
│       │                   │   ├── reflect/
│       │                   │   │   ├── ActualTypeMapperPool.java
│       │                   │   │   ├── LookupFactory.java
│       │                   │   │   ├── MethodHandleUtil.java
│       │                   │   │   └── package-info.java
│       │                   │   └── tree/
│       │                   │       ├── Node.java
│       │                   │       ├── Tree.java
│       │                   │       ├── TreeBuilder.java
│       │                   │       ├── TreeNode.java
│       │                   │       ├── TreeNodeConfig.java
│       │                   │       ├── TreeUtil.java
│       │                   │       ├── package-info.java
│       │                   │       └── parser/
│       │                   │           ├── DefaultNodeParser.java
│       │                   │           └── NodeParser.java
│       │                   ├── map/
│       │                   │   ├── AbsEntry.java
│       │                   │   ├── BiMap.java
│       │                   │   ├── CamelCaseLinkedMap.java
│       │                   │   ├── CamelCaseMap.java
│       │                   │   ├── CaseInsensitiveLinkedMap.java
│       │                   │   ├── CaseInsensitiveMap.java
│       │                   │   ├── CaseInsensitiveTreeMap.java
│       │                   │   ├── CustomKeyMap.java
│       │                   │   ├── FixedLinkedHashMap.java
│       │                   │   ├── ForestMap.java
│       │                   │   ├── FuncKeyMap.java
│       │                   │   ├── FuncMap.java
│       │                   │   ├── LinkedForestMap.java
│       │                   │   ├── MapBuilder.java
│       │                   │   ├── MapProxy.java
│       │                   │   ├── MapUtil.java
│       │                   │   ├── MapWrapper.java
│       │                   │   ├── ReferenceConcurrentMap.java
│       │                   │   ├── SafeConcurrentHashMap.java
│       │                   │   ├── TableMap.java
│       │                   │   ├── TolerantMap.java
│       │                   │   ├── TransMap.java
│       │                   │   ├── TreeEntry.java
│       │                   │   ├── WeakConcurrentMap.java
│       │                   │   ├── multi/
│       │                   │   │   ├── AbsCollValueMap.java
│       │                   │   │   ├── AbsTable.java
│       │                   │   │   ├── CollectionValueMap.java
│       │                   │   │   ├── ListValueMap.java
│       │                   │   │   ├── RowKeyTable.java
│       │                   │   │   ├── SetValueMap.java
│       │                   │   │   ├── Table.java
│       │                   │   │   └── package-info.java
│       │                   │   ├── package-info.java
│       │                   │   └── reference/
│       │                   │       ├── ReferenceConcurrentMap.java
│       │                   │       ├── SoftConcurrentMap.java
│       │                   │       ├── WeakKeyConcurrentMap.java
│       │                   │       ├── WeakKeyValueConcurrentMap.java
│       │                   │       └── package-info.java
│       │                   ├── math/
│       │                   │   ├── Arrangement.java
│       │                   │   ├── BitStatusUtil.java
│       │                   │   ├── Calculator.java
│       │                   │   ├── Combination.java
│       │                   │   ├── MathUtil.java
│       │                   │   ├── Money.java
│       │                   │   └── package-info.java
│       │                   ├── net/
│       │                   │   ├── DefaultTrustManager.java
│       │                   │   ├── FormUrlencoded.java
│       │                   │   ├── Ipv4Util.java
│       │                   │   ├── LocalPortGenerater.java
│       │                   │   ├── MaskBit.java
│       │                   │   ├── NetUtil.java
│       │                   │   ├── PassAuth.java
│       │                   │   ├── ProxySocketFactory.java
│       │                   │   ├── RFC3986.java
│       │                   │   ├── SSLContextBuilder.java
│       │                   │   ├── SSLProtocols.java
│       │                   │   ├── SSLUtil.java
│       │                   │   ├── URLDecoder.java
│       │                   │   ├── URLEncodeUtil.java
│       │                   │   ├── URLEncoder.java
│       │                   │   ├── UserPassAuthenticator.java
│       │                   │   ├── multipart/
│       │                   │   │   ├── MultipartFormData.java
│       │                   │   │   ├── MultipartRequestInputStream.java
│       │                   │   │   ├── UploadFile.java
│       │                   │   │   ├── UploadFileHeader.java
│       │                   │   │   ├── UploadSetting.java
│       │                   │   │   └── package-info.java
│       │                   │   ├── package-info.java
│       │                   │   └── url/
│       │                   │       ├── UrlBuilder.java
│       │                   │       ├── UrlPath.java
│       │                   │       ├── UrlQuery.java
│       │                   │       └── package-info.java
│       │                   ├── package-info.java
│       │                   ├── stream/
│       │                   │   ├── CollectorUtil.java
│       │                   │   ├── SimpleCollector.java
│       │                   │   ├── StreamUtil.java
│       │                   │   └── package-info.java
│       │                   ├── swing/
│       │                   │   ├── DesktopUtil.java
│       │                   │   ├── RobotUtil.java
│       │                   │   ├── ScreenUtil.java
│       │                   │   ├── clipboard/
│       │                   │   │   ├── ClipboardListener.java
│       │                   │   │   ├── ClipboardMonitor.java
│       │                   │   │   ├── ClipboardUtil.java
│       │                   │   │   ├── ImageSelection.java
│       │                   │   │   ├── StrClipboardListener.java
│       │                   │   │   └── package-info.java
│       │                   │   └── package-info.java
│       │                   ├── text/
│       │                   │   ├── ASCIIStrCache.java
│       │                   │   ├── AntPathMatcher.java
│       │                   │   ├── CharPool.java
│       │                   │   ├── CharSequenceUtil.java
│       │                   │   ├── NamingCase.java
│       │                   │   ├── PasswdStrength.java
│       │                   │   ├── Simhash.java
│       │                   │   ├── StrBuilder.java
│       │                   │   ├── StrFormatter.java
│       │                   │   ├── StrJoiner.java
│       │                   │   ├── StrMatcher.java
│       │                   │   ├── StrPool.java
│       │                   │   ├── StrSplitter.java
│       │                   │   ├── TextSimilarity.java
│       │                   │   ├── UnicodeUtil.java
│       │                   │   ├── csv/
│       │                   │   │   ├── CsvBaseReader.java
│       │                   │   │   ├── CsvConfig.java
│       │                   │   │   ├── CsvData.java
│       │                   │   │   ├── CsvParser.java
│       │                   │   │   ├── CsvReadConfig.java
│       │                   │   │   ├── CsvReader.java
│       │                   │   │   ├── CsvRow.java
│       │                   │   │   ├── CsvRowHandler.java
│       │                   │   │   ├── CsvTokener.java
│       │                   │   │   ├── CsvUtil.java
│       │                   │   │   ├── CsvWriteConfig.java
│       │                   │   │   ├── CsvWriter.java
│       │                   │   │   └── package-info.java
│       │                   │   ├── escape/
│       │                   │   │   ├── Html4Escape.java
│       │                   │   │   ├── Html4Unescape.java
│       │                   │   │   ├── InternalEscapeUtil.java
│       │                   │   │   ├── NumericEntityUnescaper.java
│       │                   │   │   ├── XmlEscape.java
│       │                   │   │   ├── XmlUnescape.java
│       │                   │   │   └── package-info.java
│       │                   │   ├── finder/
│       │                   │   │   ├── CharFinder.java
│       │                   │   │   ├── CharMatcherFinder.java
│       │                   │   │   ├── Finder.java
│       │                   │   │   ├── LengthFinder.java
│       │                   │   │   ├── PatternFinder.java
│       │                   │   │   ├── StrFinder.java
│       │                   │   │   ├── TextFinder.java
│       │                   │   │   └── package-info.java
│       │                   │   ├── package-info.java
│       │                   │   ├── replacer/
│       │                   │   │   ├── LookupReplacer.java
│       │                   │   │   ├── ReplacerChain.java
│       │                   │   │   ├── StrReplacer.java
│       │                   │   │   └── package-info.java
│       │                   │   └── split/
│       │                   │       └── SplitIter.java
│       │                   ├── thread/
│       │                   │   ├── AsyncUtil.java
│       │                   │   ├── BlockPolicy.java
│       │                   │   ├── ConcurrencyTester.java
│       │                   │   ├── DelegatedExecutorService.java
│       │                   │   ├── ExecutorBuilder.java
│       │                   │   ├── FinalizableDelegatedExecutorService.java
│       │                   │   ├── GlobalThreadPool.java
│       │                   │   ├── NamedThreadFactory.java
│       │                   │   ├── RecyclableBatchThreadPoolExecutor.java
│       │                   │   ├── RejectPolicy.java
│       │                   │   ├── SemaphoreRunnable.java
│       │                   │   ├── SyncFinisher.java
│       │                   │   ├── ThreadException.java
│       │                   │   ├── ThreadFactoryBuilder.java
│       │                   │   ├── ThreadUtil.java
│       │                   │   ├── lock/
│       │                   │   │   ├── LockUtil.java
│       │                   │   │   ├── NoLock.java
│       │                   │   │   ├── NoReadWriteLock.java
│       │                   │   │   ├── SegmentLock.java
│       │                   │   │   └── package-info.java
│       │                   │   ├── package-info.java
│       │                   │   └── threadlocal/
│       │                   │       ├── NamedInheritableThreadLocal.java
│       │                   │       ├── NamedThreadLocal.java
│       │                   │       └── package-info.java
│       │                   └── util/
│       │                       ├── ArrayUtil.java
│       │                       ├── BooleanUtil.java
│       │                       ├── ByteUtil.java
│       │                       ├── CharUtil.java
│       │                       ├── CharsetUtil.java
│       │                       ├── ClassLoaderUtil.java
│       │                       ├── ClassUtil.java
│       │                       ├── CoordinateUtil.java
│       │                       ├── CreditCodeUtil.java
│       │                       ├── DesensitizedUtil.java
│       │                       ├── EnumUtil.java
│       │                       ├── EscapeUtil.java
│       │                       ├── HashUtil.java
│       │                       ├── HexUtil.java
│       │                       ├── IdUtil.java
│       │                       ├── IdcardUtil.java
│       │                       ├── JAXBUtil.java
│       │                       ├── JNDIUtil.java
│       │                       ├── JdkUtil.java
│       │                       ├── ModifierUtil.java
│       │                       ├── NumberUtil.java
│       │                       ├── ObjUtil.java
│       │                       ├── ObjectUtil.java
│       │                       ├── PageUtil.java
│       │                       ├── PhoneUtil.java
│       │                       ├── PrimitiveArrayUtil.java
│       │                       ├── RadixUtil.java
│       │                       ├── RandomUtil.java
│       │                       ├── ReUtil.java
│       │                       ├── ReferenceUtil.java
│       │                       ├── ReflectUtil.java
│       │                       ├── RuntimeUtil.java
│       │                       ├── SerializeUtil.java
│       │                       ├── ServiceLoaderUtil.java
│       │                       ├── StrUtil.java
│       │                       ├── SystemPropsUtil.java
│       │                       ├── TypeUtil.java
│       │                       ├── URLUtil.java
│       │                       ├── VersionUtil.java
│       │                       ├── XmlUtil.java
│       │                       ├── ZipUtil.java
│       │                       └── package-info.java
│       └── test/
│           ├── java/
│           │   └── cn/
│           │       └── hutool/
│           │           └── core/
│           │               ├── annotation/
│           │               │   ├── AbstractWrappedAnnotationAttributeTest.java
│           │               │   ├── AliasAnnotationPostProcessorTest.java
│           │               │   ├── AliasLinkAnnotationPostProcessorTest.java
│           │               │   ├── AliasedAnnotationAttributeTest.java
│           │               │   ├── AnnotationForTest.java
│           │               │   ├── AnnotationUtilTest.java
│           │               │   ├── CacheableAnnotationAttributeTest.java
│           │               │   ├── CacheableSynthesizedAnnotationAttributeProcessorTest.java
│           │               │   ├── ForceAliasedAnnotationAttributeTest.java
│           │               │   ├── GenericSynthesizedAggregateAnnotationTest.java
│           │               │   ├── MirrorLinkAnnotationPostProcessorTest.java
│           │               │   ├── MirroredAnnotationAttributeTest.java
│           │               │   ├── RepeatAnnotationForTest.java
│           │               │   ├── SynthesizedAnnotationSelectorTest.java
│           │               │   ├── TestIssueI8CLBJ.java
│           │               │   └── scanner/
│           │               │       ├── AnnotationForScannerTest.java
│           │               │       ├── ElementAnnotationScannerTest.java
│           │               │       ├── FieldAnnotationScannerTest.java
│           │               │       ├── GenericAnnotationScannerTest.java
│           │               │       ├── MateAnnotationScannerTest.java
│           │               │       ├── MethodAnnotationScannerTest.java
│           │               │       └── TypeAnnotationScannerTest.java
│           │               ├── bean/
│           │               │   ├── BeanCopyMappingTest.java
│           │               │   ├── BeanDescTest.java
│           │               │   ├── BeanPathTest.java
│           │               │   ├── BeanUtilTest.java
│           │               │   ├── DynaBeanTest.java
│           │               │   ├── Issue1687Test.java
│           │               │   ├── Issue2009Test.java
│           │               │   ├── Issue2082Test.java
│           │               │   ├── Issue2202Test.java
│           │               │   ├── Issue2697Test.java
│           │               │   ├── Issue3091Test.java
│           │               │   ├── Issue3452Test.java
│           │               │   ├── Issue3497Test.java
│           │               │   ├── Issue3645Test.java
│           │               │   ├── Issue3702Test.java
│           │               │   ├── IssueI80FP4Test.java
│           │               │   ├── IssueI8JASOTest.java
│           │               │   ├── IssueIAYGT0Test.java
│           │               │   ├── IssueIBLTZWTest.java
│           │               │   ├── IssueICHM3OTest.java
│           │               │   └── copier/
│           │               │       ├── BeanCopierTest.java
│           │               │       └── Issue2718Test.java
│           │               ├── builder/
│           │               │   └── GenericBuilderTest.java
│           │               ├── clone/
│           │               │   ├── CloneTest.java
│           │               │   └── DefaultCloneTest.java
│           │               ├── codec/
│           │               │   ├── BCDTest.java
│           │               │   ├── Base32Test.java
│           │               │   ├── Base58Test.java
│           │               │   ├── Base62Test.java
│           │               │   ├── Base64Test.java
│           │               │   ├── CaesarTest.java
│           │               │   ├── HashidsTest.java
│           │               │   ├── MorseTest.java
│           │               │   ├── PunyCodeTest.java
│           │               │   └── RotTest.java
│           │               ├── collection/
│           │               │   ├── CollStreamUtilTest.java
│           │               │   ├── CollUtilTest.java
│           │               │   ├── FilterIterTest.java
│           │               │   ├── IterUtilTest.java
│           │               │   ├── ListUtilTest.java
│           │               │   ├── MapProxyTest.java
│           │               │   ├── PartitionIterTest.java
│           │               │   ├── RingIndexUtilTest.java
│           │               │   └── UniqueKeySetTest.java
│           │               ├── comparator/
│           │               │   ├── ArrayIndexedComparator.java
│           │               │   ├── CompareUtilTest.java
│           │               │   ├── IndexedComparatorTest.java
│           │               │   ├── Issue3259Test.java
│           │               │   ├── PropertyComparatorTest.java
│           │               │   ├── VersionComparatorTest.java
│           │               │   └── WindowsExplorerStringComparatorTest.java
│           │               ├── compiler/
│           │               │   └── JavaSourceCompilerTest.java
│           │               ├── compress/
│           │               │   ├── IssueI5DRU0Test.java
│           │               │   ├── IssueIAGYDGTest.java
│           │               │   ├── ZipReaderTest.java
│           │               │   └── ZipWriterTest.java
│           │               ├── convert/
│           │               │   ├── CastUtilTest.java
│           │               │   ├── ConvertOtherTest.java
│           │               │   ├── ConvertTest.java
│           │               │   ├── ConvertToArrayTest.java
│           │               │   ├── ConvertToBeanTest.java
│           │               │   ├── ConvertToBooleanTest.java
│           │               │   ├── ConvertToCollectionTest.java
│           │               │   ├── ConvertToNumberTest.java
│           │               │   ├── ConvertToSBCAndDBCTest.java
│           │               │   ├── ConverterRegistryTest.java
│           │               │   ├── DateConvertTest.java
│           │               │   ├── EnumConvertTest.java
│           │               │   ├── Issue2611Test.java
│           │               │   ├── Issue3241Test.java
│           │               │   ├── IssueI7WJHHTest.java
│           │               │   ├── IssueIALV38Test.java
│           │               │   ├── MapConvertTest.java
│           │               │   ├── NumberChineseFormatterTest.java
│           │               │   ├── NumberConverterTest.java
│           │               │   ├── NumberWordFormatTest.java
│           │               │   ├── NumberWordFormatterTest.java
│           │               │   ├── PrimitiveConvertTest.java
│           │               │   ├── StringConvertTest.java
│           │               │   ├── TemporalAccessorConverterTest.java
│           │               │   └── ToBytesTest.java
│           │               ├── date/
│           │               │   ├── BetweenFormatterTest.java
│           │               │   ├── CalendarUtilTest.java
│           │               │   ├── ChineseDateTest.java
│           │               │   ├── DateBetweenTest.java
│           │               │   ├── DateFieldTest.java
│           │               │   ├── DateModifierTest.java
│           │               │   ├── DateRangeTest.java
│           │               │   ├── DateTimeTest.java
│           │               │   ├── DateUtilTest.java
│           │               │   ├── FastDateFormatTest.java
│           │               │   ├── GanzhiTest.java
│           │               │   ├── Issue2612Test.java
│           │               │   ├── Issue2981Test.java
│           │               │   ├── Issue3011Test.java
│           │               │   ├── Issue3036Test.java
│           │               │   ├── Issue3301Test.java
│           │               │   ├── Issue3348Test.java
│           │               │   ├── Issue3608Test.java
│           │               │   ├── Issue3798Test.java
│           │               │   ├── IssueI7QI6RTest.java
│           │               │   ├── IssueI7XMYWTest.java
│           │               │   ├── IssueI82Y1LTest.java
│           │               │   ├── IssueI97WU6Test.java
│           │               │   ├── IssueI9C2D4Test.java
│           │               │   ├── IssueIB8OFSTest.java
│           │               │   ├── IssueIB9NPUTest.java
│           │               │   ├── IssueIBB6I5Test.java
│           │               │   ├── IssueIC00HGTest.java
│           │               │   ├── IssueIDFMXJTest.java
│           │               │   ├── LocalDateTimeUtilTest.java
│           │               │   ├── MonthTest.java
│           │               │   ├── QuarterTest.java
│           │               │   ├── TemporalAccessorUtilTest.java
│           │               │   ├── TimeIntervalTest.java
│           │               │   ├── TimeZoneTest.java
│           │               │   ├── WeekTest.java
│           │               │   ├── YearQuarterTest.java
│           │               │   ├── ZodiacTest.java
│           │               │   ├── ZoneUtilTest.java
│           │               │   └── chinese/
│           │               │       ├── IssueI5YB1ATest.java
│           │               │       ├── IssueICL1BTTest.java
│           │               │       └── SolarTermsTest.java
│           │               ├── exceptions/
│           │               │   ├── CheckedUtilTest.java
│           │               │   └── ExceptionUtilTest.java
│           │               ├── img/
│           │               │   ├── FontUtilTest.java
│           │               │   ├── ImgTest.java
│           │               │   ├── ImgUtilTest.java
│           │               │   ├── Issue2735Test.java
│           │               │   └── IssueI8L8UATest.java
│           │               ├── io/
│           │               │   ├── BufferUtilTest.java
│           │               │   ├── CharsetDetectorTest.java
│           │               │   ├── ClassPathResourceTest.java
│           │               │   ├── FileCopierTest.java
│           │               │   ├── FileReaderTest.java
│           │               │   ├── FileTypeUtilTest.java
│           │               │   ├── FileUtilTest.java
│           │               │   ├── IoUtilTest.java
│           │               │   ├── Issue3846Test.java
│           │               │   ├── ManifestUtilTest.java
│           │               │   ├── WatchMonitorTest.java
│           │               │   ├── checksum/
│           │               │   │   ├── CRC16Test.java
│           │               │   │   └── CrcTest.java
│           │               │   ├── file/
│           │               │   │   ├── FileNameUtilTest.java
│           │               │   │   ├── FileSystemUtilTest.java
│           │               │   │   ├── FileWriterTest.java
│           │               │   │   ├── Issue3557Test.java
│           │               │   │   ├── IssueIAB65VTest.java
│           │               │   │   ├── PathUtilTest.java
│           │               │   │   └── TailerTest.java
│           │               │   ├── resource/
│           │               │   │   └── ResourceUtilTest.java
│           │               │   └── unit/
│           │               │       └── DataSizeUtilTest.java
│           │               ├── lang/
│           │               │   ├── AssertTest.java
│           │               │   ├── ClassScanerTest.java
│           │               │   ├── ConsoleTableTest.java
│           │               │   ├── ConsoleTest.java
│           │               │   ├── DictTest.java
│           │               │   ├── IssueIAOGDRTest.java
│           │               │   ├── NanoIdTest.java
│           │               │   ├── ObjectIdTest.java
│           │               │   ├── OptTest.java
│           │               │   ├── RangeTest.java
│           │               │   ├── SimhashTest.java
│           │               │   ├── SimpleCacheTest.java
│           │               │   ├── SingletonTest.java
│           │               │   ├── SnowflakeTest.java
│           │               │   ├── StrFormatterTest.java
│           │               │   ├── TupleTest.java
│           │               │   ├── UUIDTest.java
│           │               │   ├── ValidatorTest.java
│           │               │   ├── WeightListRandomTest.java
│           │               │   ├── WeightRandomTest.java
│           │               │   ├── ansi/
│           │               │   │   └── AnsiEncoderTest.java
│           │               │   ├── caller/
│           │               │   │   ├── CallerTest.java
│           │               │   │   └── CallerUtilTest.java
│           │               │   ├── func/
│           │               │   │   └── LambdaUtilTest.java
│           │               │   ├── hash/
│           │               │   │   ├── CityHashTest.java
│           │               │   │   ├── MetroHashTest.java
│           │               │   │   └── MurmurHashTest.java
│           │               │   ├── intern/
│           │               │   │   └── InternUtilTest.java
│           │               │   ├── loader/
│           │               │   │   └── LazyFunLoaderTest.java
│           │               │   ├── reflect/
│           │               │   │   ├── ActualTypeMapperPoolTest.java
│           │               │   │   └── MethodHandleUtilTest.java
│           │               │   ├── test/
│           │               │   │   └── bean/
│           │               │   │       ├── ExamInfoDict.java
│           │               │   │       ├── UserInfoDict.java
│           │               │   │       └── UserInfoRedundCount.java
│           │               │   └── tree/
│           │               │       ├── Issue2279Test.java
│           │               │       ├── IssueI795INTest.java
│           │               │       ├── IssueI9PDVFTest.java
│           │               │       ├── IssueIAUSHRTest.java
│           │               │       ├── Issues2538Test.java
│           │               │       ├── TreeBuilderTest.java
│           │               │       ├── TreeSearchTest.java
│           │               │       └── TreeTest.java
│           │               ├── map/
│           │               │   ├── BiMapTest.java
│           │               │   ├── CamelCaseMapTest.java
│           │               │   ├── CaseInsensitiveMapTest.java
│           │               │   ├── CollValueMapTest.java
│           │               │   ├── FuncMapTest.java
│           │               │   ├── IssueI88R5MTest.java
│           │               │   ├── LinkedForestMapTest.java
│           │               │   ├── MapBuilderTest.java
│           │               │   ├── MapUtilTest.java
│           │               │   ├── RowKeyTableTest.java
│           │               │   ├── TableMapTest.java
│           │               │   ├── TolerantMapTest.java
│           │               │   └── WeakConcurrentMapTest.java
│           │               ├── math/
│           │               │   ├── ArrangementTest.java
│           │               │   ├── CalculatorTest.java
│           │               │   ├── CombinationTest.java
│           │               │   └── MoneyTest.java
│           │               ├── net/
│           │               │   ├── FormUrlencodedTest.java
│           │               │   ├── Ipv4UtilTest.java
│           │               │   ├── IssueI70UPUTest.java
│           │               │   ├── NetUtilTest.java
│           │               │   ├── RFC3986Test.java
│           │               │   ├── UrlBuilderTest.java
│           │               │   ├── UrlDecoderTest.java
│           │               │   └── UrlQueryTest.java
│           │               ├── stream/
│           │               │   ├── CollectorUtilTest.java
│           │               │   └── StreamUtilTest.java
│           │               ├── swing/
│           │               │   ├── ClipboardMonitorTest.java
│           │               │   ├── ClipboardUtilTest.java
│           │               │   ├── DesktopUtilTest.java
│           │               │   └── RobotUtilTest.java
│           │               ├── text/
│           │               │   ├── AntPathMatcherTest.java
│           │               │   ├── CharSequenceUtilTest.java
│           │               │   ├── IssueI96LWHTest.java
│           │               │   ├── NamingCaseTest.java
│           │               │   ├── PasswdStrengthTest.java
│           │               │   ├── StrBuilderTest.java
│           │               │   ├── StrJoinerTest.java
│           │               │   ├── StrMatcherTest.java
│           │               │   ├── TextSimilarityTest.java
│           │               │   ├── UnicodeUtilTest.java
│           │               │   ├── csv/
│           │               │   │   ├── CsvParserTest.java
│           │               │   │   ├── CsvReaderTest.java
│           │               │   │   ├── CsvUtilTest.java
│           │               │   │   ├── CsvWriterTest.java
│           │               │   │   ├── Issue3705Test.java
│           │               │   │   ├── IssueI91VF1Test.java
│           │               │   │   ├── IssueIA8WE0Test.java
│           │               │   │   ├── IssueIB5UQ8Test.java
│           │               │   │   ├── IssueICRMKATest.java
│           │               │   │   └── Pr1244Test.java
│           │               │   ├── finder/
│           │               │   │   └── CharFinderTest.java
│           │               │   └── split/
│           │               │       ├── SplitIterTest.java
│           │               │       └── StrSplitterTest.java
│           │               ├── thread/
│           │               │   ├── AsyncUtilTest.java
│           │               │   ├── ConcurrencyTesterTest.java
│           │               │   ├── ExecutorBuilderTest.java
│           │               │   ├── RecyclableBatchThreadPoolExecutorTest.java
│           │               │   ├── SegmentLockTest.java
│           │               │   ├── SyncFinisherTest.java
│           │               │   └── ThreadUtilTest.java
│           │               └── util/
│           │                   ├── ArrayUtilTest.java
│           │                   ├── BooleanUtilTest.java
│           │                   ├── ByteUtilTest.java
│           │                   ├── CharUtilTest.java
│           │                   ├── ClassLoaderUtilTest.java
│           │                   ├── ClassUtilTest.java
│           │                   ├── CoordinateUtilTest.java
│           │                   ├── CreditCodeUtilTest.java
│           │                   ├── DesensitizedUtilTest.java
│           │                   ├── EnumUtilTest.java
│           │                   ├── EscapeUtilTest.java
│           │                   ├── HashUtilTest.java
│           │                   ├── HexUtilTest.java
│           │                   ├── IdUtilTest.java
│           │                   ├── IdcardUtilTest.java
│           │                   ├── Issue3136Test.java
│           │                   ├── Issue3423Test.java
│           │                   ├── Issue3516Test.java
│           │                   ├── Issue3660Test.java
│           │                   ├── Issue3809Test.java
│           │                   ├── IssueI7CRIWTest.java
│           │                   ├── IssueI9IDAGTest.java
│           │                   ├── IssueI9K494Test.java
│           │                   ├── IssueI9NSZ4Test.java
│           │                   ├── IssueI9UK5VTest.java
│           │                   ├── IssueIAQ16ETest.java
│           │                   ├── IssueIB95X4Test.java
│           │                   ├── IssueIBP6T1Test.java
│           │                   ├── IssueICA9S5Test.java
│           │                   ├── IssueICOJVZTest.java
│           │                   ├── JAXBUtilTest.java
│           │                   ├── JNDIUtilTest.java
│           │                   ├── ModifierUtilTest.java
│           │                   ├── NumberUtilTest.java
│           │                   ├── ObjectUtilTest.java
│           │                   ├── PageUtilTest.java
│           │                   ├── PhoneUtilTest.java
│           │                   ├── RadixUtilTest.java
│           │                   ├── RandomUtilTest.java
│           │                   ├── ReUtilTest.java
│           │                   ├── ReferenceUtilTest.java
│           │                   ├── ReflectUtilTest.java
│           │                   ├── RuntimeUtilTest.java
│           │                   ├── StrUtilTest.java
│           │                   ├── TypeUtilTest.java
│           │                   ├── URLUtilTest.java
│           │                   ├── VersionUtilTest.java
│           │                   ├── XmlUtilTest.java
│           │                   └── ZipUtilTest.java
│           └── resources/
│               ├── 1_psi_index_0.txt
│               ├── issueI91VF1.csv
│               ├── issueIA8WE0.csv
│               ├── issueICRMKA.csv
│               ├── test-compile/
│               │   ├── a/
│               │   │   └── A.java
│               │   ├── b/
│               │   │   └── B.java
│               │   ├── c/
│               │   │   └── C.java
│               │   └── error/
│               │       └── ErrorClazz.java
│               ├── test-zip/
│               │   ├── addFile.txt
│               │   └── test-add/
│               │       └── test.txt
│               ├── test.csv
│               ├── test.properties
│               ├── test.xml
│               ├── test_bean.csv
│               ├── test_lines.csv
│               ├── test_lines_cr.csv
│               ├── test_lines_crlf.csv
│               └── text.txt
├── hutool-cron/
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   └── java/
│       │       └── cn/
│       │           └── hutool/
│       │               └── cron/
│       │                   ├── CronConfig.java
│       │                   ├── CronException.java
│       │                   ├── CronTimer.java
│       │                   ├── CronUtil.java
│       │                   ├── Scheduler.java
│       │                   ├── TaskExecutor.java
│       │                   ├── TaskExecutorManager.java
│       │                   ├── TaskLauncher.java
│       │                   ├── TaskLauncherManager.java
│       │                   ├── TaskTable.java
│       │                   ├── listener/
│       │                   │   ├── SimpleTaskListener.java
│       │                   │   ├── TaskListener.java
│       │                   │   ├── TaskListenerManager.java
│       │                   │   └── package-info.java
│       │                   ├── package-info.java
│       │                   ├── pattern/
│       │                   │   ├── CronPattern.java
│       │                   │   ├── CronPatternBuilder.java
│       │                   │   ├── CronPatternUtil.java
│       │                   │   ├── Part.java
│       │                   │   ├── PatternUtil.java
│       │                   │   ├── matcher/
│       │                   │   │   ├── AlwaysTrueMatcher.java
│       │                   │   │   ├── BoolArrayMatcher.java
│       │                   │   │   ├── DayOfMonthMatcher.java
│       │                   │   │   ├── PartMatcher.java
│       │                   │   │   ├── PatternMatcher.java
│       │                   │   │   ├── YearValueMatcher.java
│       │                   │   │   └── package-info.java
│       │                   │   ├── package-info.java
│       │                   │   └── parser/
│       │                   │       ├── PartParser.java
│       │                   │       ├── PatternParser.java
│       │                   │       └── package-info.java
│       │                   ├── task/
│       │                   │   ├── CronTask.java
│       │                   │   ├── InvokeTask.java
│       │                   │   ├── RunnableTask.java
│       │                   │   ├── Task.java
│       │                   │   └── package-info.java
│       │                   └── timingwheel/
│       │                       ├── SystemTimer.java
│       │                       ├── TimerTask.java
│       │                       ├── TimerTaskList.java
│       │                       ├── TimingWheel.java
│       │                       └── package-info.java
│       └── test/
│           ├── java/
│           │   └── cn/
│           │       └── hutool/
│           │           └── cron/
│           │               ├── TaskTableTest.java
│           │               ├── demo/
│           │               │   ├── AddAndRemoveMainTest.java
│           │               │   ├── CronTest.java
│           │               │   ├── DeamonMainTest.java
│           │               │   ├── JobMainTest.java
│           │               │   ├── TestJob.java
│           │               │   └── TestJob2.java
│           │               ├── pattern/
│           │               │   ├── CronPatternBuilderTest.java
│           │               │   ├── CronPatternNextMatchTest.java
│           │               │   ├── CronPatternTest.java
│           │               │   ├── CronPatternUtilTest.java
│           │               │   ├── Issue3685Test.java
│           │               │   ├── Issue4006Test.java
│           │               │   ├── Issue4056Test.java
│           │               │   ├── IssueI7SMP7Test.java
│           │               │   ├── IssueI82CSHTest.java
│           │               │   └── IssueI9FQUATest.java
│           │               └── timingwheel/
│           │                   └── Issue3090Test.java
│           └── resources/
│               └── config/
│                   └── cron.setting
├── hutool-crypto/
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   └── java/
│       │       └── cn/
│       │           └── hutool/
│       │               └── crypto/
│       │                   ├── ASN1Util.java
│       │                   ├── BCUtil.java
│       │                   ├── CipherMode.java
│       │                   ├── CipherWrapper.java
│       │                   ├── CryptoException.java
│       │                   ├── ECKeyUtil.java
│       │                   ├── GlobalBouncyCastleProvider.java
│       │                   ├── KeyUtil.java
│       │                   ├── Mode.java
│       │                   ├── OpensslKeyUtil.java
│       │                   ├── Padding.java
│       │                   ├── PemUtil.java
│       │                   ├── ProviderFactory.java
│       │                   ├── SecureUtil.java
│       │                   ├── SignUtil.java
│       │                   ├── SmUtil.java
│       │                   ├── SpecUtil.java
│       │                   ├── asymmetric/
│       │                   │   ├── AbstractAsymmetricCrypto.java
│       │                   │   ├── AsymmetricAlgorithm.java
│       │                   │   ├── AsymmetricCrypto.java
│       │                   │   ├── AsymmetricDecryptor.java
│       │                   │   ├── AsymmetricEncryptor.java
│       │                   │   ├── BaseAsymmetric.java
│       │                   │   ├── ECIES.java
│       │                   │   ├── KeyType.java
│       │                   │   ├── RSA.java
│       │                   │   ├── SM2.java
│       │                   │   ├── Sign.java
│       │                   │   ├── SignAlgorithm.java
│       │                   │   └── package-info.java
│       │                   ├── digest/
│       │                   │   ├── Argon2.java
│       │                   │   ├── BCrypt.java
│       │                   │   ├── DigestAlgorithm.java
│       │                   │   ├── DigestUtil.java
│       │                   │   ├── Digester.java
│       │                   │   ├── DigesterFactory.java
│       │                   │   ├── HMac.java
│       │                   │   ├── HmacAlgorithm.java
│       │                   │   ├── MD5.java
│       │                   │   ├── SM3.java
│       │                   │   ├── mac/
│       │                   │   │   ├── BCHMacEngine.java
│       │                   │   │   ├── BCMacEngine.java
│       │                   │   │   ├── CBCBlockCipherMacEngine.java
│       │                   │   │   ├── DefaultHMacEngine.java
│       │                   │   │   ├── Mac.java
│       │                   │   │   ├── MacEngine.java
│       │                   │   │   ├── MacEngineFactory.java
│       │                   │   │   ├── SM4MacEngine.java
│       │                   │   │   └── package-info.java
│       │                   │   ├── otp/
│       │                   │   │   ├── HOTP.java
│       │                   │   │   ├── TOTP.java
│       │                   │   │   └── package-info.java
│       │                   │   └── package-info.java
│       │                   ├── package-info.java
│       │                   └── symmetric/
│       │                       ├── AES.java
│       │                       ├── ChaCha20.java
│       │                       ├── DES.java
│       │                       ├── DESede.java
│       │                       ├── PBKDF2.java
│       │                       ├── RC4.java
│       │                       ├── SM4.java
│       │                       ├── SymmetricAlgorithm.java
│       │                       ├── SymmetricCrypto.java
│       │                       ├── SymmetricDecryptor.java
│       │                       ├── SymmetricEncryptor.java
│       │                       ├── Vigenere.java
│       │                       ├── XXTEA.java
│       │                       ├── ZUC.java
│       │                       ├── fpe/
│       │                       │   └── FPE.java
│       │                       └── package-info.java
│       └── test/
│           ├── java/
│           │   └── cn/
│           │       └── hutool/
│           │           └── crypto/
│           │               ├── BCUtilTest.java
│           │               ├── Issue3512Test.java
│           │               ├── KeyUtilTest.java
│           │               ├── OpensslKeyUtilTest.java
│           │               ├── PemUtilTest.java
│           │               ├── SecureUtilTest.java
│           │               ├── SmTest.java
│           │               ├── asymmetric/
│           │               │   ├── ECIESTest.java
│           │               │   ├── Issue3925Test.java
│           │               │   ├── IssueI6OQJATest.java
│           │               │   ├── IssueID1EIKTest.java
│           │               │   ├── RSATest.java
│           │               │   ├── SM2Test.java
│           │               │   └── SignTest.java
│           │               ├── digest/
│           │               │   ├── Argon2Test.java
│           │               │   ├── BCryptTest.java
│           │               │   ├── CBCBlockCipherMacEngineTest.java
│           │               │   ├── DigestTest.java
│           │               │   ├── HmacTest.java
│           │               │   ├── Md5Test.java
│           │               │   └── OTPTest.java
│           │               └── symmetric/
│           │                   ├── AESTest.java
│           │                   ├── ChaCha20Test.java
│           │                   ├── DesTest.java
│           │                   ├── PBKDF2Test.java
│           │                   ├── RC4Test.java
│           │                   ├── Sm4StreamTest.java
│           │                   ├── SymmetricTest.java
│           │                   ├── TEATest.java
│           │                   ├── ZucTest.java
│           │                   └── fpe/
│           │                       └── FPETest.java
│           └── resources/
│               ├── asn1.key
│               ├── test_ec_certificate.cer
│               ├── test_ec_certificate_request.csr
│               ├── test_ec_encrypted_private_key.key
│               ├── test_ec_pkcs8_private_key.key
│               ├── test_ec_public_key.pem
│               ├── test_ec_sec1_private_key.pem
│               ├── test_private_key.pem
│               └── test_public_key.csr
├── hutool-db/
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   └── java/
│       │       └── cn/
│       │           └── hutool/
│       │               └── db/
│       │                   ├── AbstractDb.java
│       │                   ├── ActiveEntity.java
│       │                   ├── DaoTemplate.java
│       │                   ├── Db.java
│       │                   ├── DbRuntimeException.java
│       │                   ├── DbUtil.java
│       │                   ├── DialectRunner.java
│       │                   ├── Entity.java
│       │                   ├── GlobalDbConfig.java
│       │                   ├── Page.java
│       │                   ├── PageResult.java
│       │                   ├── Session.java
│       │                   ├── SqlConnRunner.java
│       │                   ├── StatementUtil.java
│       │                   ├── ThreadLocalConnection.java
│       │                   ├── dialect/
│       │                   │   ├── Dialect.java
│       │                   │   ├── DialectFactory.java
│       │                   │   ├── DialectName.java
│       │                   │   ├── DriverNamePool.java
│       │                   │   ├── DriverUtil.java
│       │                   │   ├── impl/
│       │                   │   │   ├── AnsiSqlDialect.java
│       │                   │   │   ├── DmDialect.java
│       │                   │   │   ├── H2Dialect.java
│       │                   │   │   ├── HanaDialect.java
│       │                   │   │   ├── MysqlDialect.java
│       │                   │   │   ├── OracleDialect.java
│       │                   │   │   ├── PhoenixDialect.java
│       │                   │   │   ├── PostgresqlDialect.java
│       │                   │   │   ├── SqlServer2012Dialect.java
│       │                   │   │   ├── Sqlite3Dialect.java
│       │                   │   │   └── package-info.java
│       │                   │   └── package-info.java
│       │                   ├── ds/
│       │                   │   ├── AbstractDSFactory.java
│       │                   │   ├── DSFactory.java
│       │                   │   ├── DataSourceWrapper.java
│       │                   │   ├── GlobalDSFactory.java
│       │                   │   ├── bee/
│       │                   │   │   ├── BeeDSFactory.java
│       │                   │   │   └── package-info.java
│       │                   │   ├── c3p0/
│       │                   │   │   ├── C3p0DSFactory.java
│       │                   │   │   └── package-info.java
│       │                   │   ├── dbcp/
│       │                   │   │   ├── DbcpDSFactory.java
│       │                   │   │   └── package-info.java
│       │                   │   ├── druid/
│       │                   │   │   ├── DruidDSFactory.java
│       │                   │   │   └── package-info.java
│       │                   │   ├── hikari/
│       │                   │   │   ├── HikariDSFactory.java
│       │                   │   │   └── package-info.java
│       │                   │   ├── jndi/
│       │                   │   │   ├── JndiDSFactory.java
│       │                   │   │   └── package-info.java
│       │                   │   ├── package-info.java
│       │                   │   ├── pooled/
│       │                   │   │   ├── ConnectionWraper.java
│       │                   │   │   ├── DbConfig.java
│       │                   │   │   ├── DbSetting.java
│       │                   │   │   ├── PooledConnection.java
│       │                   │   │   ├── PooledDSFactory.java
│       │                   │   │   ├── PooledDataSource.java
│       │                   │   │   └── package-info.java
│       │                   │   ├── simple/
│       │                   │   │   ├── AbstractDataSource.java
│       │                   │   │   ├── SimpleDSFactory.java
│       │                   │   │   ├── SimpleDataSource.java
│       │                   │   │   └── package-info.java
│       │                   │   └── tomcat/
│       │                   │       ├── TomcatDSFactory.java
│       │                   │       └── package-info.java
│       │                   ├── handler/
│       │                   │   ├── BeanHandler.java
│       │                   │   ├── BeanListHandler.java
│       │                   │   ├── EntityHandler.java
│       │                   │   ├── EntityListHandler.java
│       │                   │   ├── EntitySetHandler.java
│       │                   │   ├── HandleHelper.java
│       │                   │   ├── NumberHandler.java
│       │                   │   ├── PageResultHandler.java
│       │                   │   ├── RsHandler.java
│       │                   │   ├── StringHandler.java
│       │                   │   ├── ValueListHandler.java
│       │                   │   └── package-info.java
│       │                   ├── meta/
│       │                   │   ├── Column.java
│       │                   │   ├── ColumnIndexInfo.java
│       │                   │   ├── IndexInfo.java
│       │                   │   ├── JdbcType.java
│       │                   │   ├── MetaUtil.java
│       │                   │   ├── Table.java
│       │                   │   ├── TableType.java
│       │                   │   └── package-info.java
│       │                   ├── nosql/
│       │                   │   ├── mongo/
│       │                   │   │   ├── MongoDS.java
│       │                   │   │   ├── MongoFactory.java
│       │                   │   │   └── package-info.java
│       │                   │   ├── package-info.java
│       │                   │   └── redis/
│       │                   │       ├── RedisDS.java
│       │                   │       └── package-info.java
│       │                   ├── package-info.java
│       │                   ├── sql/
│       │                   │   ├── Condition.java
│       │                   │   ├── ConditionBuilder.java
│       │                   │   ├── ConditionGroup.java
│       │                   │   ├── Direction.java
│       │                   │   ├── LogicalOperator.java
│       │                   │   ├── NamedSql.java
│       │                   │   ├── Order.java
│       │                   │   ├── Query.java
│       │                   │   ├── SqlBuilder.java
│       │                   │   ├── SqlExecutor.java
│       │                   │   ├── SqlFormatter.java
│       │                   │   ├── SqlLog.java
│       │                   │   ├── SqlUtil.java
│       │                   │   ├── StatementWrapper.java
│       │                   │   ├── Wrapper.java
│       │                   │   └── package-info.java
│       │                   └── transaction/
│       │                       ├── TransactionLevel.java
│       │                       └── package-info.java
│       └── test/
│           ├── java/
│           │   └── cn/
│           │       └── hutool/
│           │           └── db/
│           │               ├── CRUDTest.java
│           │               ├── ConcurentTest.java
│           │               ├── DbTest.java
│           │               ├── DerbyTest.java
│           │               ├── DmTest.java
│           │               ├── DsTest.java
│           │               ├── EntityTest.java
│           │               ├── FindBeanTest.java
│           │               ├── GlobalDbConfigTest.java
│           │               ├── H2Test.java
│           │               ├── HanaTest.java
│           │               ├── HsqldbTest.java
│           │               ├── IssueI73770Test.java
│           │               ├── IssueI9BANETest.java
│           │               ├── MySQLTest.java
│           │               ├── NamedSqlTest.java
│           │               ├── OracleTest.java
│           │               ├── PageResultTest.java
│           │               ├── PageTest.java
│           │               ├── PicTransferTest.java
│           │               ├── PostgreTest.java
│           │               ├── SessionTest.java
│           │               ├── SqlServerTest.java
│           │               ├── UpdateTest.java
│           │               ├── WrapperTest.java
│           │               ├── dialect/
│           │               │   ├── DialectFactoryTest.java
│           │               │   └── DriverUtilTest.java
│           │               ├── ds/
│           │               │   ├── DataSourceWrapperTest.java
│           │               │   └── IssueI70J95Test.java
│           │               ├── meta/
│           │               │   └── MetaUtilTest.java
│           │               ├── nosql/
│           │               │   ├── MongoDBTest.java
│           │               │   └── RedisDSTest.java
│           │               ├── pojo/
│           │               │   └── User.java
│           │               └── sql/
│           │                   ├── ConditionBuilderTest.java
│           │                   ├── ConditionGroupTest.java
│           │                   ├── ConditionTest.java
│           │                   ├── Issue4066Test.java
│           │                   ├── Issue4200Test.java
│           │                   ├── SqlBuilderTest.java
│           │                   └── SqlFormatterTest.java
│           └── resources/
│               ├── config/
│               │   ├── db.setting
│               │   ├── example/
│               │   │   ├── db-example-c3p0.setting
│               │   │   ├── db-example-dbcp.setting
│               │   │   ├── db-example-druid.setting
│               │   │   ├── db-example-hikari.setting
│               │   │   ├── db-example-tomcat.setting
│               │   │   └── mongo-example.setting
│               │   ├── mongo.setting
│               │   └── redis.setting
│               ├── logback.xml
│               └── simplelogger.properties
├── hutool-dfa/
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   └── java/
│       │       └── cn/
│       │           └── hutool/
│       │               └── dfa/
│       │                   ├── FoundWord.java
│       │                   ├── SensitiveProcessor.java
│       │                   ├── SensitiveUtil.java
│       │                   ├── StopChar.java
│       │                   ├── WordTree.java
│       │                   └── package-info.java
│       └── test/
│           └── java/
│               └── cn/
│                   └── hutool/
│                       └── dfa/
│                           ├── DfaTest.java
│                           └── SensitiveUtilTest.java
├── hutool-extra/
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   ├── java/
│       │   │   └── cn/
│       │   │       └── hutool/
│       │   │           └── extra/
│       │   │               ├── cglib/
│       │   │               │   ├── BeanCopierCache.java
│       │   │               │   ├── CglibUtil.java
│       │   │               │   └── package-info.java
│       │   │               ├── compress/
│       │   │               │   ├── CompressException.java
│       │   │               │   ├── CompressUtil.java
│       │   │               │   ├── archiver/
│       │   │               │   │   ├── Archiver.java
│       │   │               │   │   ├── SevenZArchiver.java
│       │   │               │   │   ├── StreamArchiver.java
│       │   │               │   │   └── package-info.java
│       │   │               │   ├── extractor/
│       │   │               │   │   ├── Extractor.java
│       │   │               │   │   ├── Seven7EntryInputStream.java
│       │   │               │   │   ├── SevenZExtractor.java
│       │   │               │   │   ├── StreamExtractor.java
│       │   │               │   │   └── package-info.java
│       │   │               │   └── package-info.java
│       │   │               ├── emoji/
│       │   │               │   ├── EmojiUtil.java
│       │   │               │   └── package-info.java
│       │   │               ├── expression/
│       │   │               │   ├── ExpressionEngine.java
│       │   │               │   ├── ExpressionException.java
│       │   │               │   ├── ExpressionUtil.java
│       │   │               │   ├── engine/
│       │   │               │   │   ├── ExpressionFactory.java
│       │   │               │   │   ├── aviator/
│       │   │               │   │   │   ├── AviatorEngine.java
│       │   │               │   │   │   └── package-info.java
│       │   │               │   │   ├── jexl/
│       │   │               │   │   │   ├── JexlEngine.java
│       │   │               │   │   │   └── package-info.java
│       │   │               │   │   ├── jfireel/
│       │   │               │   │   │   ├── JfireELEngine.java
│       │   │               │   │   │   └── package-info.java
│       │   │               │   │   ├── mvel/
│       │   │               │   │   │   ├── MvelEngine.java
│       │   │               │   │   │   └── package-info.java
│       │   │               │   │   ├── package-info.java
│       │   │               │   │   ├── qlexpress/
│       │   │               │   │   │   ├── QLExpressEngine.java
│       │   │               │   │   │   └── package-info.java
│       │   │               │   │   ├── rhino/
│       │   │               │   │   │   ├── RhinoEngine.java
│       │   │               │   │   │   └── package-info.java
│       │   │               │   │   └── spel/
│       │   │               │   │       ├── SpELEngine.java
│       │   │               │   │       └── package-info.java
│       │   │               │   └── package-info.java
│       │   │               ├── ftp/
│       │   │               │   ├── AbstractFtp.java
│       │   │               │   ├── Ftp.java
│       │   │               │   ├── FtpConfig.java
│       │   │               │   ├── FtpException.java
│       │   │               │   ├── FtpMode.java
│       │   │               │   ├── SimpleFtpServer.java
│       │   │               │   └── package-info.java
│       │   │               ├── mail/
│       │   │               │   ├── GlobalMailAccount.java
│       │   │               │   ├── InternalMailUtil.java
│       │   │               │   ├── JakartaInternalMailUtil.java
│       │   │               │   ├── JakartaMail.java
│       │   │               │   ├── JakartaMailUtil.java
│       │   │               │   ├── JakartaUserPassAuthenticator.java
│       │   │               │   ├── Mail.java
│       │   │               │   ├── MailAccount.java
│       │   │               │   ├── MailException.java
│       │   │               │   ├── MailUtil.java
│       │   │               │   ├── UserPassAuthenticator.java
│       │   │               │   └── package-info.java
│       │   │               ├── package-info.java
│       │   │               ├── pinyin/
│       │   │               │   ├── PinyinEngine.java
│       │   │               │   ├── PinyinException.java
│       │   │               │   ├── PinyinUtil.java
│       │   │               │   ├── engine/
│       │   │               │   │   ├── PinyinFactory.java
│       │   │               │   │   ├── bopomofo4j/
│       │   │               │   │   │   ├── Bopomofo4jEngine.java
│       │   │               │   │   │   └── package-info.java
│       │   │               │   │   ├── houbbpinyin/
│       │   │               │   │   │   ├── HoubbPinyinEngine.java
│       │   │               │   │   │   └── package-info.java
│       │   │               │   │   ├── jpinyin/
│       │   │               │   │   │   ├── JPinyinEngine.java
│       │   │               │   │   │   └── package-info.java
│       │   │               │   │   ├── package-info.java
│       │   │               │   │   ├── pinyin4j/
│       │   │               │   │   │   ├── Pinyin4jEngine.java
│       │   │               │   │   │   └── package-info.java
│       │   │               │   │   └── tinypinyin/
│       │   │               │   │       ├── TinyPinyinEngine.java
│       │   │               │   │       └── package-info.java
│       │   │               │   └── package-info.java
│       │   │               ├── qrcode/
│       │   │               │   ├── BufferedImageLuminanceSource.java
│       │   │               │   ├── QrCodeException.java
│       │   │               │   ├── QrCodeUtil.java
│       │   │               │   ├── QrConfig.java
│       │   │               │   └── package-info.java
│       │   │               ├── servlet/
│       │   │               │   ├── JakartaServletUtil.java
│       │   │               │   ├── ServletUtil.java
│       │   │               │   └── package-info.java
│       │   │               ├── spring/
│       │   │               │   ├── EnableSpringUtil.java
│       │   │               │   ├── SpringUtil.java
│       │   │               │   └── package-info.java
│       │   │               ├── ssh/
│       │   │               │   ├── ChannelType.java
│       │   │               │   ├── Connector.java
│       │   │               │   ├── GanymedUtil.java
│       │   │               │   ├── JschRuntimeException.java
│       │   │               │   ├── JschSessionPool.java
│       │   │               │   ├── JschUtil.java
│       │   │               │   ├── Sftp.java
│       │   │               │   ├── SshjSftp.java
│       │   │               │   └── package-info.java
│       │   │               ├── template/
│       │   │               │   ├── AbstractTemplate.java
│       │   │               │   ├── Template.java
│       │   │               │   ├── TemplateConfig.java
│       │   │               │   ├── TemplateEngine.java
│       │   │               │   ├── TemplateException.java
│       │   │               │   ├── TemplateUtil.java
│       │   │               │   ├── engine/
│       │   │               │   │   ├── TemplateFactory.java
│       │   │               │   │   ├── beetl/
│       │   │               │   │   │   ├── BeetlEngine.java
│       │   │               │   │   │   ├── BeetlTemplate.java
│       │   │               │   │   │   └── package-info.java
│       │   │               │   │   ├── enjoy/
│       │   │               │   │   │   ├── EnjoyEngine.java
│       │   │               │   │   │   ├── EnjoyTemplate.java
│       │   │               │   │   │   └── package-info.java
│       │   │               │   │   ├── freemarker/
│       │   │               │   │   │   ├── FreemarkerEngine.java
│       │   │               │   │   │   ├── FreemarkerTemplate.java
│       │   │               │   │   │   ├── SimpleStringTemplateLoader.java
│       │   │               │   │   │   └── package-info.java
│       │   │               │   │   ├── jetbrick/
│       │   │               │   │   │   ├── JetbrickEngine.java
│       │   │               │   │   │   ├── JetbrickTemplate.java
│       │   │               │   │   │   ├── loader/
│       │   │               │   │   │   │   ├── StringResourceLoader.java
│       │   │               │   │   │   │   └── package-info.java
│       │   │               │   │   │   └── package-info.java
│       │   │               │   │   ├── package-info.java
│       │   │               │   │   ├── rythm/
│       │   │               │   │   │   ├── RythmEngine.java
│       │   │               │   │   │   ├── RythmTemplate.java
│       │   │               │   │   │   └── package-info.java
│       │   │               │   │   ├── thymeleaf/
│       │   │               │   │   │   ├── ThymeleafEngine.java
│       │   │               │   │   │   ├── ThymeleafTemplate.java
│       │   │               │   │   │   └── package-info.java
│       │   │               │   │   ├── velocity/
│       │   │               │   │   │   ├── SimpleStringResourceLoader.java
│       │   │               │   │   │   ├── VelocityEngine.java
│       │   │               │   │   │   ├── VelocityTemplate.java
│       │   │               │   │   │   └── package-info.java
│       │   │               │   │   └── wit/
│       │   │               │   │       ├── WitEngine.java
│       │   │               │   │       ├── WitTemplate.java
│       │   │               │   │       └── package-info.java
│       │   │               │   └── package-info.java
│       │   │               ├── tokenizer/
│       │   │               │   ├── AbstractResult.java
│       │   │               │   ├── Result.java
│       │   │               │   ├── TokenizerEngine.java
│       │   │               │   ├── TokenizerException.java
│       │   │               │   ├── TokenizerUtil.java
│       │   │               │   ├── Word.java
│       │   │               │   ├── engine/
│       │   │               │   │   ├── TokenizerFactory.java
│       │   │               │   │   ├── analysis/
│       │   │               │   │   │   ├── AnalysisEngine.java
│       │   │               │   │   │   ├── AnalysisResult.java
│       │   │               │   │   │   ├── AnalysisWord.java
│       │   │               │   │   │   ├── SmartcnEngine.java
│       │   │               │   │   │   └── package-info.java
│       │   │               │   │   ├── ansj/
│       │   │               │   │   │   ├── AnsjEngine.java
│       │   │               │   │   │   ├── AnsjResult.java
│       │   │               │   │   │   ├── AnsjWord.java
│       │   │               │   │   │   └── package-info.java
│       │   │               │   │   ├── hanlp/
│       │   │               │   │   │   ├── HanLPEngine.java
│       │   │               │   │   │   ├── HanLPResult.java
│       │   │               │   │   │   ├── HanLPWord.java
│       │   │               │   │   │   └── package-info.java
│       │   │               │   │   ├── ikanalyzer/
│       │   │               │   │   │   ├── IKAnalyzerEngine.java
│       │   │               │   │   │   ├── IKAnalyzerResult.java
│       │   │               │   │   │   ├── IKAnalyzerWord.java
│       │   │               │   │   │   └── package-info.java
│       │   │               │   │   ├── jcseg/
│       │   │               │   │   │   ├── JcsegEngine.java
│       │   │               │   │   │   ├── JcsegResult.java
│       │   │               │   │   │   ├── JcsegWord.java
│       │   │               │   │   │   └── package-info.java
│       │   │               │   │   ├── jieba/
│       │   │               │   │   │   ├── JiebaEngine.java
│       │   │               │   │   │   ├── JiebaResult.java
│       │   │               │   │   │   ├── JiebaWord.java
│       │   │               │   │   │   └── package-info.java
│       │   │               │   │   ├── mmseg/
│       │   │               │   │   │   ├── MmsegEngine.java
│       │   │               │   │   │   ├── MmsegResult.java
│       │   │               │   │   │   ├── MmsegWord.java
│       │   │               │   │   │   └── package-info.java
│       │   │               │   │   ├── mynlp/
│       │   │               │   │   │   ├── MynlpEngine.java
│       │   │               │   │   │   ├── MynlpResult.java
│       │   │               │   │   │   ├── MynlpWord.java
│       │   │               │   │   │   └── package-info.java
│       │   │               │   │   ├── package-info.java
│       │   │               │   │   └── word/
│       │   │               │   │       ├── WordEngine.java
│       │   │               │   │       ├── WordResult.java
│       │   │               │   │       ├── WordWord.java
│       │   │               │   │       └── package-info.java
│       │   │               │   └── package-info.java
│       │   │               └── validation/
│       │   │                   ├── BeanValidationResult.java
│       │   │                   ├── ValidationUtil.java
│       │   │                   └── package-info.java
│       │   └── resources/
│       │       └── META-INF/
│       │           ├── services/
│       │           │   ├── cn.hutool.extra.expression.ExpressionEngine
│       │           │   ├── cn.hutool.extra.pinyin.PinyinEngine
│       │           │   ├── cn.hutool.extra.template.TemplateEngine
│       │           │   └── cn.hutool.extra.tokenizer.TokenizerEngine
│       │           ├── spring/
│       │           │   └── org.springframework.boot.autoconfigure.AutoConfiguration.imports
│       │           └── spring.factories
│       └── test/
│           ├── java/
│           │   └── cn/
│           │       └── hutool/
│           │           └── extra/
│           │               ├── cglib/
│           │               │   └── CglibUtilTest.java
│           │               ├── compress/
│           │               │   ├── ArchiverTest.java
│           │               │   ├── ExtractorTest.java
│           │               │   └── IssueI7PMJ0Test.java
│           │               ├── emoji/
│           │               │   └── EmojiUtilTest.java
│           │               ├── expression/
│           │               │   ├── AviatorTest.java
│           │               │   └── ExpressionUtilTest.java
│           │               ├── ftp/
│           │               │   ├── FtpTest.java
│           │               │   └── SimpleFtpServerTest.java
│           │               ├── mail/
│           │               │   ├── JakartaMailTest.java
│           │               │   ├── MailAccountTest.java
│           │               │   └── MailTest.java
│           │               ├── pinyin/
│           │               │   ├── Bopomofo4jTest.java
│           │               │   ├── HoubbPinyinTest.java
│           │               │   ├── JpinyinTest.java
│           │               │   ├── Pinyin4jTest.java
│           │               │   ├── PinyinUtilTest.java
│           │               │   └── TinyPinyinTest.java
│           │               ├── qrcode/
│           │               │   ├── IssueI7RUIVTest.java
│           │               │   └── QrCodeUtilTest.java
│           │               ├── servlet/
│           │               │   └── ServletUtilTest.java
│           │               ├── spring/
│           │               │   ├── EnableSpringUtilTest.java
│           │               │   ├── SpringUtilTest.java
│           │               │   └── SpringUtilWithAutoConfigTest.java
│           │               ├── ssh/
│           │               │   ├── JschUtilTest.java
│           │               │   ├── SftpTest.java
│           │               │   └── SshjSftpTest.java
│           │               ├── template/
│           │               │   ├── Issue3488Test.java
│           │               │   ├── JetbrickTest.java
│           │               │   ├── TemplateUtilTest.java
│           │               │   ├── ThymeleafTest.java
│           │               │   └── VelocityTest.java
│           │               ├── tokenizer/
│           │               │   └── TokenizerUtilTest.java
│           │               └── validation/
│           │                   └── BeanValidatorUtilTest.java
│           └── resources/
│               ├── beetl.properties
│               ├── config/
│               │   └── mail.setting
│               ├── example/
│               │   ├── beetl-example.properties
│               │   ├── mail-example.setting
│               │   └── velocity-example.vm
│               └── templates/
│                   ├── beetl_test.btl
│                   ├── enjoy_test.etl
│                   ├── freemarker_test.ftl
│                   ├── issue3488.ftl
│                   ├── jetbrick_test.jetx
│                   ├── rythm_test.tmpl
│                   ├── thymeleaf_test.ttl
│                   ├── velocity_test.vtl
│                   ├── velocity_test_gbk.vtl
│                   └── wit_test.wit
├── hutool-http/
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   └── java/
│       │       └── cn/
│       │           └── hutool/
│       │               └── http/
│       │                   ├── ContentType.java
│       │                   ├── GlobalHeaders.java
│       │                   ├── GlobalInterceptor.java
│       │                   ├── HTMLFilter.java
│       │                   ├── Header.java
│       │                   ├── HtmlUtil.java
│       │                   ├── HttpBase.java
│       │                   ├── HttpConfig.java
│       │                   ├── HttpConnection.java
│       │                   ├── HttpDownloader.java
│       │                   ├── HttpException.java
│       │                   ├── HttpGlobalConfig.java
│       │                   ├── HttpInputStream.java
│       │                   ├── HttpInterceptor.java
│       │                   ├── HttpRequest.java
│       │                   ├── HttpResource.java
│       │                   ├── HttpResponse.java
│       │                   ├── HttpStatus.java
│       │                   ├── HttpUtil.java
│       │                   ├── Method.java
│       │                   ├── MultipartOutputStream.java
│       │                   ├── Status.java
│       │                   ├── body/
│       │                   │   ├── BytesBody.java
│       │                   │   ├── FormUrlEncodedBody.java
│       │                   │   ├── MultipartBody.java
│       │                   │   ├── RequestBody.java
│       │                   │   ├── ResourceBody.java
│       │                   │   └── package-info.java
│       │                   ├── cookie/
│       │                   │   ├── GlobalCookieManager.java
│       │                   │   ├── ThreadLocalCookieStore.java
│       │                   │   └── package-info.java
│       │                   ├── package-info.java
│       │                   ├── server/
│       │                   │   ├── HttpExchangeWrapper.java
│       │                   │   ├── HttpServerBase.java
│       │                   │   ├── HttpServerRequest.java
│       │                   │   ├── HttpServerResponse.java
│       │                   │   ├── SimpleServer.java
│       │                   │   ├── action/
│       │                   │   │   ├── Action.java
│       │                   │   │   ├── RootAction.java
│       │                   │   │   └── package-info.java
│       │                   │   ├── filter/
│       │                   │   │   ├── DefaultExceptionFilter.java
│       │                   │   │   ├── ExceptionFilter.java
│       │                   │   │   ├── HttpFilter.java
│       │                   │   │   ├── SimpleFilter.java
│       │                   │   │   └── package-info.java
│       │                   │   ├── handler/
│       │                   │   │   ├── ActionHandler.java
│       │                   │   │   └── package-info.java
│       │                   │   └── package-info.java
│       │                   ├── ssl/
│       │                   │   ├── AndroidSupportSSLFactory.java
│       │                   │   ├── CustomProtocolsSSLFactory.java
│       │                   │   ├── DefaultSSLFactory.java
│       │                   │   ├── DefaultSSLInfo.java
│       │                   │   ├── SSLSocketFactoryBuilder.java
│       │                   │   ├── TrustAnyHostnameVerifier.java
│       │                   │   └── package-info.java
│       │                   ├── useragent/
│       │                   │   ├── Browser.java
│       │                   │   ├── Engine.java
│       │                   │   ├── OS.java
│       │                   │   ├── Platform.java
│       │                   │   ├── UserAgent.java
│       │                   │   ├── UserAgentInfo.java
│       │                   │   ├── UserAgentParser.java
│       │                   │   ├── UserAgentUtil.java
│       │                   │   └── package-info.java
│       │                   └── webservice/
│       │                       ├── JakartaSoapClient.java
│       │                       ├── JakartaSoapProtocol.java
│       │                       ├── JakartaSoapUtil.java
│       │                       ├── SoapClient.java
│       │                       ├── SoapProtocol.java
│       │                       ├── SoapRuntimeException.java
│       │                       ├── SoapUtil.java
│       │                       └── package-info.java
│       └── test/
│           ├── java/
│           │   └── cn/
│           │       └── hutool/
│           │           └── http/
│           │               ├── ContentTypeTest.java
│           │               ├── DownloadTest.java
│           │               ├── HTMLFilterTest.java
│           │               ├── HtmlUtilTest.java
│           │               ├── HttpGlobalConfigTest.java
│           │               ├── HttpRequestTest.java
│           │               ├── HttpUtilTest.java
│           │               ├── HttpsTest.java
│           │               ├── Issue2658Test.java
│           │               ├── Issue3074Test.java
│           │               ├── Issue3197Test.java
│           │               ├── Issue3314Test.java
│           │               ├── Issue3536Test.java
│           │               ├── IssueI5TPSYTest.java
│           │               ├── IssueI6RE7JTest.java
│           │               ├── IssueI7EHSETest.java
│           │               ├── IssueI7WZEOTest.java
│           │               ├── IssueI7ZRJUTest.java
│           │               ├── IssueI8YV0KTest.java
│           │               ├── IssueIB7REWTest.java
│           │               ├── IssueIBQIYQTest.java
│           │               ├── IssueIBRVE4Test.java
│           │               ├── RestTest.java
│           │               ├── UploadTest.java
│           │               ├── body/
│           │               │   └── MultipartBodyTest.java
│           │               ├── server/
│           │               │   ├── BlankServerTest.java
│           │               │   ├── DocServerTest.java
│           │               │   ├── ExceptionServerTest.java
│           │               │   ├── Issue3343Test.java
│           │               │   ├── Issue3568Test.java
│           │               │   ├── Issue3723Test.java
│           │               │   ├── RedirectServerTest.java
│           │               │   └── SimpleServerTest.java
│           │               ├── useragent/
│           │               │   ├── IssueIB3SJFTest.java
│           │               │   └── UserAgentUtilTest.java
│           │               └── webservice/
│           │                   ├── JakartaSoapClientTest.java
│           │                   └── SoapClientTest.java
│           └── resources/
│               └── html/
│                   ├── formForUpload.html
│                   └── index.html
├── hutool-json/
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   └── java/
│       │       └── cn/
│       │           └── hutool/
│       │               └── json/
│       │                   ├── InternalJSONUtil.java
│       │                   ├── JSON.java
│       │                   ├── JSONArray.java
│       │                   ├── JSONBeanParser.java
│       │                   ├── JSONConfig.java
│       │                   ├── JSONConverter.java
│       │                   ├── JSONException.java
│       │                   ├── JSONGetter.java
│       │                   ├── JSONNull.java
│       │                   ├── JSONObject.java
│       │                   ├── JSONObjectIter.java
│       │                   ├── JSONParser.java
│       │                   ├── JSONStrFormatter.java
│       │                   ├── JSONString.java
│       │                   ├── JSONSupport.java
│       │                   ├── JSONTokener.java
│       │                   ├── JSONUtil.java
│       │                   ├── ObjectMapper.java
│       │                   ├── XML.java
│       │                   ├── XMLTokener.java
│       │                   ├── package-info.java
│       │                   ├── serialize/
│       │                   │   ├── GlobalSerializeMapping.java
│       │                   │   ├── JSONArraySerializer.java
│       │                   │   ├── JSONDeserializer.java
│       │                   │   ├── JSONObjectSerializer.java
│       │                   │   ├── JSONSerializer.java
│       │                   │   ├── JSONWriter.java
│       │                   │   ├── TemporalAccessorSerializer.java
│       │                   │   └── package-info.java
│       │                   └── xml/
│       │                       ├── JSONXMLParser.java
│       │                       ├── JSONXMLSerializer.java
│       │                       ├── ParseConfig.java
│       │                       └── package-info.java
│       └── test/
│           ├── java/
│           │   └── cn/
│           │       └── hutool/
│           │           └── json/
│           │               ├── BeanToJsonTest.java
│           │               ├── CustomSerializeTest.java
│           │               ├── Issue1075Test.java
│           │               ├── Issue1101Test.java
│           │               ├── Issue1200Test.java
│           │               ├── Issue2090Test.java
│           │               ├── Issue2131Test.java
│           │               ├── Issue2223Test.java
│           │               ├── Issue2365Test.java
│           │               ├── Issue2369Test.java
│           │               ├── Issue2377Test.java
│           │               ├── Issue2447Test.java
│           │               ├── Issue2555Test.java
│           │               ├── Issue2572Test.java
│           │               ├── Issue2746Test.java
│           │               ├── Issue2749Test.java
│           │               ├── Issue2953Test.java
│           │               ├── Issue2997Test.java
│           │               ├── Issue3051Test.java
│           │               ├── Issue3086Test.java
│           │               ├── Issue3139Test.java
│           │               ├── Issue3274Test.java
│           │               ├── Issue3289Test.java
│           │               ├── Issue3504Test.java
│           │               ├── Issue3506Test.java
│           │               ├── Issue3541Test.java
│           │               ├── Issue3588Test.java
│           │               ├── Issue3619Test.java
│           │               ├── Issue3649Test.java
│           │               ├── Issue3713Test.java
│           │               ├── Issue3759Test.java
│           │               ├── Issue3790Test.java
│           │               ├── Issue3795Test.java
│           │               ├── Issue4197Test.java
│           │               ├── Issue4210Test.java
│           │               ├── Issue4214Test.java
│           │               ├── Issue488Test.java
│           │               ├── Issue644Test.java
│           │               ├── Issue677Test.java
│           │               ├── Issue867Test.java
│           │               ├── IssueI1AU86Test.java
│           │               ├── IssueI1F8M2.java
│           │               ├── IssueI1H2VN.java
│           │               ├── IssueI3BS4S.java
│           │               ├── IssueI3EGJP.java
│           │               ├── IssueI49VZBTest.java
│           │               ├── IssueI4RBZ4Test.java
│           │               ├── IssueI4XFMWTest.java
│           │               ├── IssueI50EGGTest.java
│           │               ├── IssueI59LW4Test.java
│           │               ├── IssueI5OMSCTest.java
│           │               ├── IssueI676IT.java
│           │               ├── IssueI6H0XFTest.java
│           │               ├── IssueI6SZYBTest.java
│           │               ├── IssueI6TPIFTest.java
│           │               ├── IssueI6YN2ATest.java
│           │               ├── IssueI71BE6Test.java
│           │               ├── IssueI7FQ29Test.java
│           │               ├── IssueI7GPGXTest.java
│           │               ├── IssueI7M2GZTest.java
│           │               ├── IssueI82AM8Test.java
│           │               ├── IssueI84V6ITest.java
│           │               ├── IssueI8NMP7Test.java
│           │               ├── IssueI8PC9FTest.java
│           │               ├── IssueI90ADXTest.java
│           │               ├── IssueIA5YOETest.java
│           │               ├── IssueIALQ0NTest.java
│           │               ├── IssueIAOPI9Test.java
│           │               ├── IssueIAP4GMTest.java
│           │               ├── IssueIB9MH0Test.java
│           │               ├── IssueID418BTest.java
│           │               ├── IssueID61QRTest.java
│           │               ├── Issues1881Test.java
│           │               ├── IssuesI44E4HTest.java
│           │               ├── IssuesI4V14NTest.java
│           │               ├── JSONArrayTest.java
│           │               ├── JSONBeanParserTest.java
│           │               ├── JSONConvertTest.java
│           │               ├── JSONNullTest.java
│           │               ├── JSONObjectTest.java
│           │               ├── JSONPathTest.java
│           │               ├── JSONStrFormatterTest.java
│           │               ├── JSONSupportTest.java
│           │               ├── JSONUtilTest.java
│           │               ├── ParseBeanTest.java
│           │               ├── Pr1431Test.java
│           │               ├── Pr192Test.java
│           │               ├── TransientTest.java
│           │               ├── issueIVMD5/
│           │               │   ├── BaseResult.java
│           │               │   ├── IssueIVMD5Test.java
│           │               │   └── StudentInfo.java
│           │               ├── test/
│           │               │   └── bean/
│           │               │       ├── ADT.java
│           │               │       ├── Data.java
│           │               │       ├── Exam.java
│           │               │       ├── ExamInfoDict.java
│           │               │       ├── JSONBean.java
│           │               │       ├── JsonNode.java
│           │               │       ├── KeyBean.java
│           │               │       ├── PerfectEvaluationProductResVo.java
│           │               │       ├── Price.java
│           │               │       ├── ProductResBase.java
│           │               │       ├── ResultBean.java
│           │               │       ├── ResultDto.java
│           │               │       ├── Seq.java
│           │               │       ├── TokenAuthResponse.java
│           │               │       ├── TokenAuthWarp.java
│           │               │       ├── TokenAuthWarp2.java
│           │               │       ├── UUMap.java
│           │               │       ├── UserA.java
│           │               │       ├── UserB.java
│           │               │       ├── UserC.java
│           │               │       ├── UserInfoDict.java
│           │               │       ├── UserInfoRedundCount.java
│           │               │       ├── UserWithMap.java
│           │               │       └── report/
│           │               │           ├── CaseReport.java
│           │               │           ├── EnvSettingInfo.java
│           │               │           ├── StepReport.java
│           │               │           └── SuiteReport.java
│           │               └── xml/
│           │                   ├── Issue2748Test.java
│           │                   ├── Issue3560Test.java
│           │                   ├── IssueID0HP2Test.java
│           │                   └── XMLTest.java
│           └── resources/
│               ├── evaluation.json
│               ├── exam_test.json
│               ├── issue1200.json
│               ├── issue488.json
│               ├── issue488Array.json
│               ├── issueI5OMSC.json
│               ├── issueI676IT.json
│               ├── issueI82AM8.json
│               ├── issueIVMD5.json
│               └── suiteReport.json
├── hutool-jwt/
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   └── java/
│       │       └── cn/
│       │           └── hutool/
│       │               └── jwt/
│       │                   ├── Claims.java
│       │                   ├── JWT.java
│       │                   ├── JWTException.java
│       │                   ├── JWTHeader.java
│       │                   ├── JWTPayload.java
│       │                   ├── JWTUtil.java
│       │                   ├── JWTValidator.java
│       │                   ├── RegisteredPayload.java
│       │                   ├── package-info.java
│       │                   └── signers/
│       │                       ├── AlgorithmUtil.java
│       │                       ├── AsymmetricJWTSigner.java
│       │                       ├── EllipticCurveJWTSigner.java
│       │                       ├── HMacJWTSigner.java
│       │                       ├── JWTSigner.java
│       │                       ├── JWTSignerUtil.java
│       │                       ├── NoneJWTSigner.java
│       │                       └── package-info.java
│       └── test/
│           └── java/
│               └── cn/
│                   └── hutool/
│                       └── jwt/
│                           ├── Issue3205Test.java
│                           ├── Issue3732Test.java
│                           ├── Issue4105Test.java
│                           ├── IssueI5QRUOTest.java
│                           ├── IssueI6IS5BTest.java
│                           ├── JWTSignerTest.java
│                           ├── JWTTest.java
│                           ├── JWTUtilTest.java
│                           └── JWTValidatorTest.java
├── hutool-log/
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   ├── java/
│       │   │   └── cn/
│       │   │       └── hutool/
│       │   │           └── log/
│       │   │               ├── AbstractLog.java
│       │   │               ├── GlobalLogFactory.java
│       │   │               ├── Log.java
│       │   │               ├── LogFactory.java
│       │   │               ├── StaticLog.java
│       │   │               ├── dialect/
│       │   │               │   ├── commons/
│       │   │               │   │   ├── ApacheCommonsLog.java
│       │   │               │   │   ├── ApacheCommonsLog4JLog.java
│       │   │               │   │   ├── ApacheCommonsLogFactory.java
│       │   │               │   │   └── package-info.java
│       │   │               │   ├── console/
│       │   │               │   │   ├── ConsoleColorLog.java
│       │   │               │   │   ├── ConsoleColorLogFactory.java
│       │   │               │   │   ├── ConsoleLog.java
│       │   │               │   │   ├── ConsoleLogFactory.java
│       │   │               │   │   └── package-info.java
│       │   │               │   ├── jboss/
│       │   │               │   │   ├── JbossLog.java
│       │   │               │   │   ├── JbossLogFactory.java
│       │   │               │   │   └── package-info.java
│       │   │               │   ├── jdk/
│       │   │               │   │   ├── JdkLog.java
│       │   │               │   │   ├── JdkLogFactory.java
│       │   │               │   │   └── package-info.java
│       │   │               │   ├── log4j/
│       │   │               │   │   ├── Log4jLog.java
│       │   │               │   │   ├── Log4jLogFactory.java
│       │   │               │   │   └── package-info.java
│       │   │               │   ├── log4j2/
│       │   │               │   │   ├── Log4j2Log.java
│       │   │               │   │   ├── Log4j2LogFactory.java
│       │   │               │   │   └── package-info.java
│       │   │               │   ├── logtube/
│       │   │               │   │   ├── LogTubeLog.java
│       │   │               │   │   ├── LogTubeLogFactory.java
│       │   │               │   │   └── package-info.java
│       │   │               │   ├── package-info.java
│       │   │               │   ├── slf4j/
│       │   │               │   │   ├── Slf4jLog.java
│       │   │               │   │   ├── Slf4jLogFactory.java
│       │   │               │   │   └── package-info.java
│       │   │               │   └── tinylog/
│       │   │               │       ├── TinyLog.java
│       │   │               │       ├── TinyLog2.java
│       │   │               │       ├── TinyLog2Factory.java
│       │   │               │       ├── TinyLogFactory.java
│       │   │               │       └── package-info.java
│       │   │               ├── level/
│       │   │               │   ├── DebugLog.java
│       │   │               │   ├── ErrorLog.java
│       │   │               │   ├── InfoLog.java
│       │   │               │   ├── Level.java
│       │   │               │   ├── TraceLog.java
│       │   │               │   ├── WarnLog.java
│       │   │               │   └── package-info.java
│       │   │               └── package-info.java
│       │   └── resources/
│       │       └── META-INF/
│       │           └── services/
│       │               └── cn.hutool.log.LogFactory
│       └── test/
│           ├── java/
│           │   └── cn/
│           │       └── hutool/
│           │           └── log/
│           │               └── test/
│           │                   ├── CustomLogTest.java
│           │                   ├── LogTest.java
│           │                   ├── LogTubeTest.java
│           │                   └── StaticLogTest.java
│           └── resources/
│               ├── example/
│               │   └── log4j2.xml
│               ├── log4j.properties
│               ├── log4j2.xml
│               ├── logback.xml
│               ├── logging.properties
│               ├── logtube.properties
│               └── tinylog.properties
├── hutool-poi/
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   └── java/
│       │       └── cn/
│       │           └── hutool/
│       │               └── poi/
│       │                   ├── GlobalPoiConfig.java
│       │                   ├── PoiChecker.java
│       │                   ├── excel/
│       │                   │   ├── BigExcelWriter.java
│       │                   │   ├── ExcelBase.java
│       │                   │   ├── ExcelDateUtil.java
│       │                   │   ├── ExcelExtractorUtil.java
│       │                   │   ├── ExcelFileUtil.java
│       │                   │   ├── ExcelPicUtil.java
│       │                   │   ├── ExcelReader.java
│       │                   │   ├── ExcelUtil.java
│       │                   │   ├── ExcelWriter.java
│       │                   │   ├── RowUtil.java
│       │                   │   ├── StyleSet.java
│       │                   │   ├── WorkbookUtil.java
│       │                   │   ├── cell/
│       │                   │   │   ├── CellEditor.java
│       │                   │   │   ├── CellHandler.java
│       │                   │   │   ├── CellLocation.java
│       │                   │   │   ├── CellSetter.java
│       │                   │   │   ├── CellUtil.java
│       │                   │   │   ├── CellValue.java
│       │                   │   │   ├── FormulaCellValue.java
│       │                   │   │   ├── NullCell.java
│       │                   │   │   ├── package-info.java
│       │                   │   │   ├── setters/
│       │                   │   │   │   ├── BooleanCellSetter.java
│       │                   │   │   │   ├── CalendarCellSetter.java
│       │                   │   │   │   ├── CellSetterFactory.java
│       │                   │   │   │   ├── CharSequenceCellSetter.java
│       │                   │   │   │   ├── DateCellSetter.java
│       │                   │   │   │   ├── EscapeStrCellSetter.java
│       │                   │   │   │   ├── HyperlinkCellSetter.java
│       │                   │   │   │   ├── NullCellSetter.java
│       │                   │   │   │   ├── NumberCellSetter.java
│       │                   │   │   │   ├── RichTextCellSetter.java
│       │                   │   │   │   ├── TemporalAccessorCellSetter.java
│       │                   │   │   │   └── package-info.java
│       │                   │   │   └── values/
│       │                   │   │       ├── ErrorCellValue.java
│       │                   │   │       └── NumericCellValue.java
│       │                   │   ├── editors/
│       │                   │   │   ├── NumericToIntEditor.java
│       │                   │   │   ├── TrimEditor.java
│       │                   │   │   └── package-info.java
│       │                   │   ├── package-info.java
│       │                   │   ├── reader/
│       │                   │   │   ├── AbstractSheetReader.java
│       │                   │   │   ├── BeanSheetReader.java
│       │                   │   │   ├── ColumnSheetReader.java
│       │                   │   │   ├── ListSheetReader.java
│       │                   │   │   ├── MapSheetReader.java
│       │                   │   │   ├── SheetReader.java
│       │                   │   │   └── package-info.java
│       │                   │   ├── sax/
│       │                   │   │   ├── AttributeName.java
│       │                   │   │   ├── CellDataType.java
│       │                   │   │   ├── ElementName.java
│       │                   │   │   ├── Excel03SaxReader.java
│       │                   │   │   ├── Excel07SaxReader.java
│       │                   │   │   ├── ExcelSaxReader.java
│       │                   │   │   ├── ExcelSaxUtil.java
│       │                   │   │   ├── SheetDataSaxHandler.java
│       │                   │   │   ├── SheetRidReader.java
│       │                   │   │   ├── StopReadException.java
│       │                   │   │   ├── handler/
│       │                   │   │   │   ├── AbstractRowHandler.java
│       │                   │   │   │   ├── BeanRowHandler.java
│       │                   │   │   │   ├── MapRowHandler.java
│       │                   │   │   │   ├── RowHandler.java
│       │                   │   │   │   └── package-info.java
│       │                   │   │   └── package-info.java
│       │                   │   └── style/
│       │                   │       ├── Align.java
│       │                   │       ├── StyleUtil.java
│       │                   │       └── package-info.java
│       │                   ├── exceptions/
│       │                   │   ├── POIException.java
│       │                   │   └── package-info.java
│       │                   ├── ofd/
│       │                   │   ├── OfdWriter.java
│       │                   │   └── package-info.java
│       │                   ├── package-info.java
│       │                   └── word/
│       │                       ├── DocUtil.java
│       │                       ├── PicType.java
│       │                       ├── TableUtil.java
│       │                       ├── Word07Writer.java
│       │                       ├── WordUtil.java
│       │                       └── package-info.java
│       └── test/
│           ├── java/
│           │   └── cn/
│           │       └── hutool/
│           │           └── poi/
│           │               ├── IssueI5Q1TWTest.java
│           │               ├── excel/
│           │               │   ├── BigExcelWriteTest.java
│           │               │   ├── CellEditorTest.java
│           │               │   ├── CellUtilTest.java
│           │               │   ├── ExcelFileUtilTest.java
│           │               │   ├── ExcelReadTest.java
│           │               │   ├── ExcelReaderToWriterTest.java
│           │               │   ├── ExcelUtilTest.java
│           │               │   ├── ExcelWriteBeanTest.java
│           │               │   ├── ExcelWriteTest.java
│           │               │   ├── Issue1729Test.java
│           │               │   ├── Issue2221Test.java
│           │               │   ├── Issue2706Test.java
│           │               │   ├── Issue2899Test.java
│           │               │   ├── Issue2941Test.java
│           │               │   ├── Issue3048Test.java
│           │               │   ├── Issue3698Test.java
│           │               │   ├── Issue3965Test.java
│           │               │   ├── Issue4146Test.java
│           │               │   ├── IssueI53OSTTest.java
│           │               │   ├── IssueI64P2KTest.java
│           │               │   ├── IssueI6MBS5Test.java
│           │               │   ├── IssueI6URF3Test.java
│           │               │   ├── IssueIB0EJ9Test.java
│           │               │   ├── NumericCellValueTest.java
│           │               │   ├── OrderExcel.java
│           │               │   ├── TestBean.java
│           │               │   ├── WorkbookUtilTest.java
│           │               │   ├── WriteNumberToStringTest.java
│           │               │   ├── WriteStyleTest.java
│           │               │   └── sax/
│           │               │       ├── ExcelSaxReadTest.java
│           │               │       └── Issue4195Test.java
│           │               ├── ofd/
│           │               │   └── OfdWriterTest.java
│           │               └── word/
│           │                   └── WordWriterTest.java
│           └── resources/
│               ├── 1899bug_demo.xlsx
│               ├── I5Q1TW.xlsx
│               ├── UserProjectDO.xlsx
│               ├── aaa.xls
│               ├── aaa.xlsx
│               ├── alias.xlsx
│               ├── blankAndDateTest.xlsx
│               ├── cell_editor_test.xlsx
│               ├── data_for_sax_test.xls
│               ├── data_for_sax_test.xlsx
│               ├── formula_test.xlsx
│               ├── merge_test.xlsx
│               ├── null_cell_test.xlsx
│               ├── priceIndex.xls
│               ├── readBySax.xls
│               ├── read_row_npe.xlsx
│               └── test.xls
├── hutool-script/
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   └── java/
│       │       └── cn/
│       │           └── hutool/
│       │               └── script/
│       │                   ├── FullSupportScriptEngine.java
│       │                   ├── JavaScriptEngine.java
│       │                   ├── ScriptRuntimeException.java
│       │                   ├── ScriptUtil.java
│       │                   └── package-info.java
│       └── test/
│           ├── java/
│           │   └── cn/
│           │       └── hutool/
│           │           └── script/
│           │               └── test/
│           │                   ├── NashornDeepTest.java
│           │                   └── ScriptUtilTest.java
│           └── resources/
│               └── filter1.js
├── hutool-setting/
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   └── java/
│       │       └── cn/
│       │           └── hutool/
│       │               └── setting/
│       │                   ├── AbsSetting.java
│       │                   ├── GroupedMap.java
│       │                   ├── GroupedSet.java
│       │                   ├── Setting.java
│       │                   ├── SettingLoader.java
│       │                   ├── SettingRuntimeException.java
│       │                   ├── SettingUtil.java
│       │                   ├── dialect/
│       │                   │   ├── Props.java
│       │                   │   ├── PropsUtil.java
│       │                   │   └── package-info.java
│       │                   ├── package-info.java
│       │                   ├── profile/
│       │                   │   ├── GlobalProfile.java
│       │                   │   ├── Profile.java
│       │                   │   └── package-info.java
│       │                   └── yaml/
│       │                       ├── YamlUtil.java
│       │                       └── package-info.java
│       └── test/
│           ├── java/
│           │   └── cn/
│           │       └── hutool/
│           │           └── setting/
│           │               ├── Issue3008Test.java
│           │               ├── IssueI7G34ETest.java
│           │               ├── PropsTest.java
│           │               ├── PropsUtilTest.java
│           │               ├── SettingTest.java
│           │               ├── SettingUtilTest.java
│           │               └── yaml/
│           │                   └── YamlUtilTest.java
│           └── resources/
│               ├── example/
│               │   ├── example.set
│               │   ├── example.setting
│               │   └── group-set-example.set
│               ├── issue3008.properties
│               ├── test.properties
│               ├── test.setting
│               ├── test.yaml
│               ├── test_with_bom.setting
│               └── to_bean_test.properties
├── hutool-socket/
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   └── java/
│       │       └── cn/
│       │           └── hutool/
│       │               └── socket/
│       │                   ├── ChannelUtil.java
│       │                   ├── SocketConfig.java
│       │                   ├── SocketRuntimeException.java
│       │                   ├── SocketUtil.java
│       │                   ├── aio/
│       │                   │   ├── AcceptHandler.java
│       │                   │   ├── AioClient.java
│       │                   │   ├── AioServer.java
│       │                   │   ├── AioSession.java
│       │                   │   ├── IoAction.java
│       │                   │   ├── ReadHandler.java
│       │                   │   ├── SimpleIoAction.java
│       │                   │   └── package-info.java
│       │                   ├── nio/
│       │                   │   ├── AcceptHandler.java
│       │                   │   ├── ChannelHandler.java
│       │                   │   ├── NioClient.java
│       │                   │   ├── NioServer.java
│       │                   │   ├── NioUtil.java
│       │                   │   ├── Operation.java
│       │                   │   └── package-info.java
│       │                   ├── package-info.java
│       │                   └── protocol/
│       │                       ├── MsgDecoder.java
│       │                       ├── MsgEncoder.java
│       │                       ├── Protocol.java
│       │                       └── package-info.java
│       └── test/
│           └── java/
│               └── cn/
│                   └── hutool/
│                       └── socket/
│                           ├── aio/
│                           │   ├── AioClientTest.java
│                           │   └── AioServerTest.java
│                           └── nio/
│                               ├── NioClientTest.java
│                               └── NioServerTest.java
├── hutool-system/
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   └── java/
│       │       └── cn/
│       │           └── hutool/
│       │               └── system/
│       │                   ├── HostInfo.java
│       │                   ├── JavaInfo.java
│       │                   ├── JavaRuntimeInfo.java
│       │                   ├── JavaSpecInfo.java
│       │                   ├── JvmInfo.java
│       │                   ├── JvmSpecInfo.java
│       │                   ├── OsInfo.java
│       │                   ├── RuntimeInfo.java
│       │                   ├── SystemPropsKeys.java
│       │                   ├── SystemUtil.java
│       │                   ├── UserInfo.java
│       │                   ├── oshi/
│       │                   │   ├── CpuInfo.java
│       │                   │   ├── CpuTicks.java
│       │                   │   ├── OshiUtil.java
│       │                   │   └── package-info.java
│       │                   └── package-info.java
│       └── test/
│           └── java/
│               └── cn/
│                   └── hutool/
│                       └── system/
│                           ├── OshiPrintTest.java
│                           ├── OshiTest.java
│                           └── SystemUtilTest.java
├── hutool.sh
└── pom.xml

================================================
FILE CONTENTS
================================================

================================================
FILE: .editorconfig
================================================
# http://editorconfig.org
# 配置修改自:https://gitee.com/596392912/mica/blob/master/.editorconfig

root = true

[*]
indent_style = tab
charset = utf-8
end_of_line = lf
trim_trailing_whitespace = true
insert_final_newline = true

[*.{json,yml}]
indent_style = space
indent_size = 2

[*.md]
insert_final_newline = false
trim_trailing_whitespace = false


================================================
FILE: .gitee/ISSUE_TEMPLATE.zh-CN.md
================================================
### 版本情况

JDK版本:    openjdk_8_201
hutool版本: 5.X.X(请确保最新尝试是否还有问题)

### 问题描述(包括截图)

1. 复现代码

```java
Console.log("报错了");
```

2. 堆栈信息

3. 测试涉及到的文件(注意脱密)

比如报错的Excel文件,有问题的图片等。

================================================
FILE: .gitee/PULL_REQUEST_TEMPLATE.zh-CN.md
================================================
#### 说明

1. 请确认你提交的PR是到'v5-dev'分支,否则我会手动修改代码并关闭PR。
2. 请确认没有更改代码风格(如tab缩进)
3. 新特性添加请确认注释完备,如有必要,请在src/test/java下添加Junit测试用例

### 修改描述(包括说明bug修复或者添加新特性)

1. [bug修复] balabala……
2. [新特性]  balabala……

### 提交前自测
> 请在提交前自测确保代码没有问题,提交新代码应包含:测试用例、通过(mvn javadoc:javadoc)检验详细注释。 

1. 本地如有多个JDK版本,可以设置临时JDk版本,如:`export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_331.jdk/Contents/Home`,具体替换为本地jdk目录
2. 确保本地测试使用JDK8最新版本,`echo $JAVA_HOME`、`mvn -v`、`java -version`均正确。
3. 执行打包生成文档,使用`mvn clean package -Dmaven.test.skip=true -U`,并确认通过,会自动执行打包、生成文档
4. 如需要单独执行文档生成,执行:`mvn javadoc:javadoc `,并确认通过
5. 如需要单独执行测试用例,执行:`mvn clean test`,并确认通过


================================================
FILE: .github/FUNDING.yml
================================================
# These are supported funding model platforms

github: [looly]
custom: ['https://gitee.com/chinabugotech/hutool']


================================================
FILE: .github/ISSUE_TEMPLATE.md
================================================
### 版本情况

JDK版本:    openjdk_8_201
hutool版本: 5.X.X(请确保最新尝试是否还有问题)

### 问题描述(包括截图)

1. 复现代码

```java
Console.log("报错了");
```

2. 堆栈信息

3. 测试涉及到的文件(注意脱密)

比如报错的Excel文件,有问题的图片等。

================================================
FILE: .github/PULL_REQUEST_TEMPLATE.md
================================================
#### 说明

1. 请确认你提交的PR是到'v5-dev'分支,否则我会手动修改代码并关闭PR。
2. 请确认没有更改代码风格(如tab缩进)
3. 新特性添加请确认注释完备,如有必要,请在src/test/java下添加Junit测试用例

### 修改描述(包括说明bug修复或者添加新特性)

1. [bug修复] balabala……
2. [新特性]  balabala……

### 提交前自测
> 请在提交前自测确保代码没有问题,提交新代码应包含:测试用例、通过(mvn javadoc:javadoc)检验详细注释。

1. 本地如有多个JDK版本,可以设置临时JDk版本,如:`export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_331.jdk/Contents/Home`,具体替换为本地jdk目录
2. 确保本地测试使用JDK8最新版本,`echo $JAVA_HOME`、`mvn -v`、`java -version`均正确。
3. 执行打包生成文档,使用`mvn clean package -Dmaven.test.skip=true -U`,并确认通过,会自动执行打包、生成文档
4. 如需要单独执行文档生成,执行:`mvn javadoc:javadoc `,并确认通过
5. 如需要单独执行测试用例,执行:`mvn clean test`,并确认通过

================================================
FILE: .github/codeql-analysis.yml
================================================
# For most projects, this workflow file will not need changing; you simply need
# to commit it to your repository.
#
# You may wish to alter this file to override the set of languages analyzed,
# or to provide custom queries or build logic.
#
# ******** NOTE ********
# We have attempted to detect the languages in your repository. Please check
# the `language` matrix defined below to confirm you have the correct set of
# supported CodeQL languages.
#
name: "CodeQL"

on:
  push:
    branches: [ v5-dev ]
  pull_request:
    # The branches below must be a subset of the branches above
    branches: [ v5-dev ]
  schedule:
    - cron: '45 6 * * 1'

jobs:
  analyze:
    name: Analyze
    runs-on: ubuntu-latest
    permissions:
      actions: read
      contents: read
      security-events: write

    strategy:
      fail-fast: false
      matrix:
        language: [ 'java', 'javascript' ]
        # CodeQL supports [ 'cpp', 'csharp', 'go', 'java', 'javascript', 'python' ]
        # Learn more:
        # https://docs.github.com/en/free-pro-team@latest/github/finding-security-vulnerabilities-and-errors-in-your-code/configuring-code-scanning#changing-the-languages-that-are-analyzed

    steps:
      - name: Checkout repository
        uses: actions/checkout@v2

      # Initializes the CodeQL tools for scanning.
      - name: Initialize CodeQL
        uses: github/codeql-action/init@v1
        with:
          languages: ${{ matrix.language }}
          # If you wish to specify custom queries, you can do so here or in a config file.
          # By default, queries listed here will override any specified in a config file.
          # Prefix the list here with "+" to use these queries and those in the config file.
          # queries: ./path/to/local/query, your-org/your-repo/queries@main

      # Autobuild attempts to build any compiled languages  (C/C++, C#, or Java).
      # If this step fails, then you should remove it and run the build manually (see below)
      - name: Autobuild
        uses: github/codeql-action/autobuild@v1

      # ℹ️ Command-line programs to run using the OS shell.
      # 📚 https://git.io/JvXDl

      # ✏️ If the Autobuild fails above, remove it and uncomment the following three lines
      #    and modify them (or add more) to build your code if your project
      #    uses a compiled language

      #- run: |
      #   make bootstrap
      #   make release

      - name: Perform CodeQL Analysis
        uses: github/codeql-action/analyze@v1


================================================
FILE: .gitignore
================================================
# Eclipse
.project
.classpath
.settings/

# Maven
target/
dependency-reduced-pom.xml
pom.xml.versionsBackup
.factorypath

# Gradle
.gradle/
build/

#IDEA
# idea ignore
.idea/
*.ipr
*.iml
*.iws

# temp ignore
*.log
*.cache
*.diff
*.patch
*.tmp
.jython_cache/

# system ignore
.DS_Store
Thumbs.db


================================================
FILE: .travis.yml
================================================
language: java

sudo: false # faster builds

install: true

jdk:
  - openjdk8

notifications:
  email: false

cache:
  directories:
    - '$HOME/.m2'

script: 
  - export TZ=Asia/Shanghai
  - mvn install -DskipTests=true -Dmaven.javadoc.skip=true -B -V
  - mvn cobertura:cobertura -Dcobertura.report.format=xml -Dmaven.javadoc.skip.true

after_success:
  - bash <(curl -s https://codecov.io/bash)



================================================
FILE: CHANGELOG.md
================================================

# 🚀Changelog
-------------------------------------------------------------------------------------------------------------
# 5.8.44(2026-03-11)
### 🐣新特性
* 【core   】      `NumberUtil.parseNumber`增加支持科学计数法(pr#4211@Github)
* 【captcha】      `AbstractCaptcha`增加`setStroke`方法支持线条粗细(issue#IDJQ15@Gitee)
* 【core   】      `BooleanUtil`新增 exactlyOneTrue 方法用于互斥条件校验(issue#IDJQ15@Gitee)
* 【core   】      `DateUtil.normalize`方法中正则预编译提升效率(pr#4221@Gitee)
* 【core   】      `AppendableWriter`增加checkNotClosed(issue#IDMZ5K@Gitee)
* 【core   】      `FastDateParser`改进在JDK25下三字母时区警告(issue#4100@Github)
* 【core   】      `ReflectUtil`增加二级缓存(pr#1433@Gitee)

### 🐞Bug修复
* 【json       】  修复`JSONUtil.wrap`忽略错误问题(issue#4210@Github)
* 【http       】  修复`HttpUtil.normalizeParams `在极端输入下抛 StringIndexOutOfBoundsException(pr#4216@Github)
* 【extra      】  修复`MailAccount.setAuth`参数与field不一致问题(issue#4217@Github)
* 【core       】  修复`TransMap.computeIfAbsent`mappingFunction处理不一致问题(issue#IDM6UR@Gitee)
* 【core       】  修复`MultiResource`游标歧义问题(issue#IDNAOY@Gitee)
* 【core       】  修复`BufferUtil`copy歧义问题(issue#IDN097@Gitee)
* 【core       】  修复`JschSessionPool`回收导致的session未关闭问题(issue#4223@Github)
* 【core       】  修复`XmlUtil.xmlToBean`option参数无效问题(issue#4226@Github)
* 【core       】  修复`ReUtil.replaceAll`空指针问题(issue#IDPHVW@Gitee)
* 【core       】  修复`EnumUtil`枚举类静态初始化时触发 Recursive update 异常(pr#1432@Gitee)
* 【core       】  修复`AbstractCache`高并发下 get+supplier 双重检查锁逻辑缺陷(pr#1432@Gitee)
* 【core       】  修复`Quarter`fromMonth计算错误问题(issue#IF15CP@Gitee)

-------------------------------------------------------------------------------------------------------------
# 5.8.43(2026-01-04)

### 🐣新特性
* 【core   】      `ColorUtil`颜色名称DARKGOLD、LIGHTGOLD新增蛇形命名匹配(pr#1400@Github)
* 【core   】      添加`BeanPath`方法中对“*”的处理逻辑(pr#1412@Gitee)
* 【core   】      `StrUtil`添加`reverseByCodePoint`方法(pr#4187@Github)
* 【core   】      `JdkUtil`添加`IS_AT_LEAST_JDK25`
* 【core   】      `HexUtil.toHex`添加对float和double的支持,并提供反向方法(pr#4193@Github)
* 【core   】      增强`BitSetBloomFilter`构造器的参数有效性校验逻辑(pr#4194@Github)
* 【core   】      `HexUtil.isHexNumber`增加空检查(pr#1420@Gitee)
* 【core   】      `BooleanUtil`增加中文、英文及符号布尔值的识别能力(pr#1429@Gitee)
* 【core   】      `DataBetween`类的构造函数中做 defensive copy(pr#1426@Gitee)
* 【core   】      `RadixUtil.decode`添加校验(pr#1422@Gitee)
* 【core   】      `CharUtil.toCloseByNumber`增加下边界检查(pr#1421@Gitee)
* 【ai     】      增加`gemini`支持(pr#4205@Github)

### 🐞Bug修复
* 【core       】  修复`Calculator.conversion`方法计算包含科学计数法表达式的值时逻辑有误,结果不符合预期(pr#4172@Github)
* 【core       】  修复`NumberUtil.getBinaryStr`方法计算Double等丢失小数问题(pr#1411@Gitee)
* 【core       】  修复`MathUtil.multiple`方法在大整数乘法运算中整数溢出风险(pr#4174@Github)
* 【core       】  修复`CharSequenceUtil.move`方法在局部循环位移中输出不符合预期问题(issue#IDD181@Gitee)
* 【bloomFilter】  修复`AbstractFilter`的`init`方法在`maxValue`小于`machineNum`时导致数组越界异常(pr#4189@Github)
* 【ai         】  修复`Models`枚举命名大小写混用问题(pr#4185@Github)
* 【core       】  修复`ThreadUtil.getMainThread`在JDK25中返回null的问题(pr#1416@Gitee)
* 【core       】  修复`NumberUtil.parseNumber`使用中文逗号导致识别问题(issue#4197@Github)
* 【crypto     】  修复`SecureUtil.hmacSha1`和`hmacSha256`生成随机密钥时存在逻辑问题(pr#4199@Github)
* 【core       】  修复`StopWatch.stop`时间回拨时计算结果为负的问题(pr#1417@Gitee)
* 【core       】  修复`SplitIter.reset`后无法重新迭代的问题(pr#1418@Gitee)
* 【core       】  修复`StrMatcher`连续变量解析导致的歧义问题(pr#1419@Gitee)
* 【ai         】  修复`BaseAIService`发送请求方法中try/catch块捕获的应该是Exception而不是自定义的AIException(pr#1430@Gitee)
* 【core       】  修复`StrUtil.truncateByByteLength`在限制长度小于...时报错问题(issue#IDFTJS@Gitee)
* 【core       】  修复`Calculator.conversion`方法计算包含%连接一元运算符的计算表达式的结果时逻辑缺陷(pr#4191@Github)
* 【db         】  修复`SqlUtil.PATTERN_IN_CLAUSE`逻辑缺陷导致in语句参数不正确的问题(pr#4203@Github)
* 【json       】  修复`ObjectMapper`过滤器对Bean复制无效的问题(pr#1431@Gitee)
* 【core       】  修复`DateUnit`毫秒转换问题(issue#4209@Github)

-------------------------------------------------------------------------------------------------------------
# 5.8.42(2025-11-28)

### 🐣新特性
* 【core   】      `ListUtil`增加`zip`方法(pr#4052@Github)
* 【http   】      增加`JakartaSoapClient`(issue#4103@Github)
* 【ai     】      增加代理支持(pr#4107@Github)
* 【core   】      `CharSequenceUtil`增加`builder`方法重载(pr#4107@Github)
* 【core   】      `Combination`和`Arrangement `重构避免数组频繁拷贝,并避免溢出(pr#4144@Github)
* 【core   】      优化`EscapeUtil`,兼容不规范的转义(pr#4150@Github)
* 【core   】      优化`ObjectUtil.contains`String改为CharSequence(pr#4154@Github)
* 【poi    】      `Word07Writer`增加addText重载,支持字体颜色(pr#1388@Gitee)
* 【core   】      增强`HexUtil`自动去除`0x`和`#`前缀(pr#4163@Github)

### 🐞Bug修复
* 【jwt    】      修复verify方法在定义alg为`none`时验证失效问题(issue#4105@Github)
* 【extra  】      修复`JschSessionPool.remove`逻辑错误问题(issue#ID4XZ7@gitee)
* 【db     】      修复`Dialect.psForCount`未传入Wrapper导致大小写问题(issue#ID39G9@Gitee)
* 【core   】      修复`PasswdStrength.check`indexOf逻辑问题(pr#4114@Github)
* 【http   】      修复`HttpConnection.reflectSetMethod`反射在JDK9+权限问题(issue#4109@Github)
* 【http   】      修复`JsonUtil.toJsonStr`对Boolean和Number返回错误问题(issue#4109@Github)
* 【core   】      修复`FileUtil.listFileNames`相对路径index混乱问题(issue#4121@Github)
* 【core   】      修复`NumberWithFormat`没有实现Comparable接口导致的JSON排序报错问题(issue#ID61QR@Gitee)
* 【core   】      修复`ImgUtil.write`没有释放BufferedImage可能导致内存泄露(issue#ID6VNJ@Gitee)
* 【core   】      修复`VersionUtil.matchEl`如果输入的版本范围表达式右边界为空时,会抛出数组越界访问错误的问题(pr#4130@Github)
* 【core   】      修复`Validator.isBetween`在高精度Number类型下存在精度丢失问题(pr#4136@Github)
* 【core   】      修复`FileNameUtil.extName`在特殊后缀判断逻辑过于宽松导致误判问题(pr#4142@Github)
* 【core   】      修复`TypeUtil.getClass`无法识别`GenericArrayType`问题(pr#4138@Github)
* 【core   】      修复`CreditCodeUtil.randomCreditCode`部分字母未使用问题(pr#4149@Github)
* 【core   】      修复`CacheableAnnotationAttribute`可能并发问题(pr#4149@Github)
* 【core   】      修复`URLUtil.url`未断开连接问题(pr#4149@Github)
* 【core   】      修复`Bimap.put`重复put问题(pr#4150@Github)
* 【core   】      修复`StrUtil.str(ByteBuffer, Charset)` 方法修改入参 `ByteBuffer` 的 `position`,导致入参变化 (pr#4153@Github)
* 【core   】      修复`ReflectUtil.newInstanceIfPossible`传入Object逻辑错误(pr#4160@Github)
* 【core   】      修复`DateModifier`处理AM和PM的ceiling和round问题(pr#4161@Github)
* 【poi    】      修复`Word07Writer`run.setColor()的颜色十六进制转换逻辑(pr#4164@Github)
* 【core   】      修复`Arrangement.iterate(int m)`方法的排列迭代器实现逻辑问题(pr#4166@Github)
* 【core   】      修复`HexUtil.format`在处理长度小于2的字符串会抛异常,在处理长度为奇数的字符串时最后一个字符会被忽略的问题(pr#4168@Github)
* 【core   】      修复`SplitIter.computeNext`递归调用可能导致栈溢出风险(pr#4168@Github)

-------------------------------------------------------------------------------------------------------------
# 5.8.41(2025-10-12)

### 🐣新特性
* 【core   】      增加`WeakKeyValueConcurrentMap`及其关联类,同时废弃`WeakConcurrentMap`并替换(issue#4039@Github)
* 【core   】      `MapUtil`增加`removeByValue`和`removeIf`方法
* 【core   】      `ObjectUtil`增加`apply`方法
* 【core   】      `ReferenceUtil`增加`get`方法
* 【db     】      `Condition`增加构造方法支持BETWEEN(issue#4041@Github)
* 【core   】      `IoUtil.writeObjects`判空避免空指针(issue#4049@Github)
* 【extra  】      `OsInfo`增加`isWindows11`方法(pr#4054@Github)
* 【extra  】      `RedisDS`增加`getPool`和`getSetting`方法(issue#ICVWDI@Gitee)
* 【core   】      `NumberUtil.pow`增加重载,支持指数自定义保留位数(pr#4052@Github)
* 【core   】      `NumberUtil.isPrimes`优化判断(pr#4058@Github)
* 【extra  】      `Mail.buildContent`改进,正文部分总在最前(issue#4072@Github)
* 【core   】      `DataSizeUtil`改进,兼容`GiB`等单位名称(issue#ICXXVF@Github)
* 【ai     】      `Message`增加setter和构造方法(issue#ICXTP2@Gitee)
* 【extra  】      `PinyinUtil`增加判空(pr#4081@Github)
* 【core   】      `LocalDateTimeUtil.parseDate`注释修正(pr#4085@Github)
* 【core   】      `StrUtil`增加null检查处理(pr#4086@Github)
* 【json   】      增加Record支持(pr#4096@Github)
* 【crypto 】      增加`SpecUtil`,`KeyUtil`增加`generateRSAPrivateKey`重载,(issue#ID1EIK@Gitee)
* 【core   】      `RandomUtil`增加`randomStringLower`方法

### 🐞Bug修复
* 【core   】      修复`ReflectUtil`中因class和Method关联导致的缓存无法回收问题(issue#4039@Github)
* 【db     】      修复`Condition`的`Condition("discount_end_time", "!=", (String) null)`方法生成SQL时,生成SQL不符合预期要求的错误(pr#4042@Github)
* 【core   】      修复`IoUtil`的`closeIfPosible`拼写错误,新建一个`closeIfPossible`方法,原方法标记deprecated(issue#4047@Github)
* 【http   】      修复`HttpRequest.sendRedirectIfPossible`未对308做判断问题。(issue#4053@Github)
* 【cron   】      修复`CronPatternUtil.nextDateAfter`当日为L时计算错误问题。(issue#4056@Github)
* 【db     】      修复`NamedSql.replaceVar`关键字处理问题(issue#4062@Github)
* 【db     】      修复`DialectRunner.count`方法中,去除包含多字段order by子句的SQL语句时错误问题(issue#4066@Github)
* 【extra  】      修复`JschSessionPool`并发问题(pr#4079@Github)
* 【extra  】      修复`Sftp`递归删除目录时使用相对路径可能导致死循环的问题(pr#1380@Gitee)
* 【db     】      修复`SqlUtil.removeOuterOrderBy`处理没有order by的语句导致异常问题(pr#4089@Github)
* 【extra  】      修复`Sftp.upload`目标路径为null时空指针问题(issue#ID14WX@Gitee)
* 【ai     】      修复`AIConfigBuilder`中方法名拼写错误(pr#1382@Gitee)
* 【core   】      修复`StrBuilder`charAt越界判断错误(pr#4094@Github)
* 【dfa    】      修复`WordTree.addWord`末尾为特殊字符导致的无法匹配问题(pr#4092@Github)
* 【core   】      修复`ServiceLoaderUtil.loadFirstAvailable`在JDK24+后未捕获异常导致的报错问题(pr#4098@Github)
* 【cron   】      修复`CronTimer`在任务非常多时,追赶系统时间导致遗漏任务的问题(issue#IB49EF@Gitee)

-------------------------------------------------------------------------------------------------------------
# 5.8.40(2025-08-26)

### 🐣新特性
* 【captcha】      `MathGenerator`四则运算方式支持不生成负数结果(pr#1363@Gitee)
* 【core   】      增加`MapValueProvider`和`RecordConverter`并支持Record转换(issue#3985@Github)
* 【core   】      `CalendarUtil`增加`isSameYear`和`calendar`方法(issue#3995@Github)
* 【core   】      `DateUtil`增加`yyyy-MM-dd'T'HH:mmXXX`格式支持(pr#1367@Gitee)
* 【core   】      `MapUtil`增加flatten方法(pr#1368@Gitee)
* 【extra  】      `getClientIP`优先获取传入的请求头信息(pr#1373@Gitee)
* 【db     】      增加`Gbase8s`驱动支持(issue#ICSFAM@Gitee)
* 【db     】      增加TDSQL PostgreSQL版本、TDSQL-H LibraDB、Snowflake、Teradata 的驱动支持(pr#4024@Github)
* 【core   】      `EnumUtil`增加缓存支持(pr#1376@Gitee)

### 🐞Bug修复
* 【extra  】      `Sftp``reconnectIfTimeout`方法改为捕获所有异常(issue#3989@Github)
* 【core   】      修复`ChineseDate `闰年闰月节日获取问题(issue#ICL1BT@Gitee)
* 【core   】      修复`TreeBuilder`append重复向idTreeMap中put问题(pr#3992@Github)
* 【extra  】      修复`QLExpressEngine`allowClassSet无效问题(issue#3994@Github)
* 【core   】      修复`StrBuilder`insert插入计算错误问题(issue#ICTSRZ@Gitee)
* 【cron   】      修复`CronPatternUtil.nextDateAfter`计算下一个匹配表达式的日期时,计算错误问题(issue#4006@Github)
* 【cache  】      `ReentrantCache`修改get逻辑key锁改为全局锁,保证安全(issue#4022@Github)
* 【core   】      修复`NumberWordFormatter`formatSimple输出错误问题(pr#4034@Github)

-------------------------------------------------------------------------------------------------------------
# 5.8.39(2025-06-20)

### 🐣新特性
* 【ai     】      增加SSE流式返回函数参数callback,增加超时时间配置,豆包、grok新增文生图接口,豆包生成视频支持使用model,新增HutoolAI平台
* 【core   】      DesensitizedUtil新增护照号码脱敏功能(pr#1347@Gitee)
* 【core   】      优化XXXToMapCopier的部分性能(pr#1345@Gitee)
* 【http   】      `HttpConfig`增加参数`setIgnoreContentLength`可选忽略读取响应contentLength头(issue#ICB1B8@Gitee)
* 【core   】      `Assert`新增断言给定集合为空的方法以及单元测试用例(pr#3952@Github)
* 【db     】      Db添加FetchSize的全局设置(pr#3978@Github)
* 【core   】      增加可召回批处理线程池执行器`RecyclableBatchThreadPoolExecutor`(pr#1343@Gitee)
* 
### 🐞Bug修复
* 【core   】      修复`NumberUtil`isNumber方法以L结尾没有小数点判断问题(issue#3938@Github)
* 【core   】      修复`CharsequenceUtil`toLowerCase方法拼写错误(issue#3941@Github)
* 【core   】      修复`UUID`equals的问题,改为final类(issue#3948@Github)
* 【core   】      修复`Money`中金额分配的问题bug(issue#IC9Y35@Gitee)
* 【poi    】      修复`ExcelPicUtil`中可能的空指针异常
* 【core   】      修复`LunarFestival`中重复节日问题(issue#ICC8X3@Gitee)
* 【core   】      修复`ThreadUtil`中中断异常处理丢失中断信息的问题,解决ConcurrencyTester资源未释放的问题(pr#1358@Gitee)
* 【core   】      修复`TEL_400_800`正则规则太窄问题(issue#3967@Github)
* 【core   】      修复`ClassUti`isNormalClass判断未排除String问题(issue#3965@Github)
* 【core   】      修复`ZipUtil`中zlib和unZlib调用后资源未释放问题(issue#3976@Github)
* 【core   】      修复`Money`类的setAmount方法没有获取当前币种的小数位数而是使用的默认小数位和在遇到非2小数位的币种(如日元使用 0 位)会导致金额设置错误问题(pr#3970@Github)
* 【cache  】      修复`AbstractCache`putWithoutLock方法可能导致的外部资源泄露问题(pr#3958@Github)

-------------------------------------------------------------------------------------------------------------
# 5.8.38(2025-05-13)

### 🐣新特性
* 【core   】      `PathUtil#del`增加null检查(pr#1331@Gitee)
* 【db     】      增加SAP HANA识别及方言(pr#3914@Github)
* 【crypto 】      增加`Argon2`类,实现Argon2算法(issue#3890@Github)
* 【core   】      `CharSequenceUtil`增加toLoweCase和toUpperCase方法(issue#IC0H2B@Gitee)
* 【core   】      增加分段锁实现`SegmentLock`(pr#1330@Gitee)
* 【core   】      重载subtractToList方法,提供isLinked选项(pr#3923@Github)
* 【extra  】      `TemplateConfig`增加`setUseCache`方法(issue#IC3JRY@Gitee)
* 【extra  】      `AbstractFtp`增加`rename`方法(issue#IC3PMI@Gitee)
* 【core   】      优化`PropDesc`缓存注解判断,提升性能(pr#1335@Gitee)
* 【core   】      添加`RecordUtil`支持record类(issue#3931@Github)
* 【core   】      `Dict`的customKey方法访问权限修改为protected(pr#1340@Gitee)
* 【ai     】      增加hutool-ai模块,对AI大模型的封装实现(pr#3937@Github)

### 🐞Bug修复
* 【setting】      修复`Setting`autoLoad可能的加载为空的问题(issue#3919@Github)
* 【db     】      修复某些数据库的getParameterMetaData会返回NULL,导致空指针的问题。(pr#3936@Github)
* 【extra  】      修正`SshjSftp`在SftpSubsystem服务时报错问题(pr#1338@Gitee)

-------------------------------------------------------------------------------------------------------------
# 5.8.37(2025-03-31)

### 🐣新特性
* 【json   】      ObjectMapper删除重复trim(pr#3859@Github)
* 【core   】      `FileWriter`增加方法,可选是否追加换行符(issue#3858@Github)
* 【core   】      `IdcardUtil`验证10位身份证兼容中英文括号(issue#IBP6T1@Gitee)
* 【extra  】      `PinyinUtil`增加重载可选是否返回声调(pr#3875@Github)
* 【extra   】      `PinyinEngine`增加重载可选是否返回声调(pr#3883@Github)
* 【core   】      增加`VersionUtil`版本比较工具(pr#3876@Github)
* 【db     】      增加GoldenDB识别(pr#3886@Github)
* 【http   】      改进`UrlQuery`对无参URL增加判断识别(issue#IBRVE4@Gitee)
* 【core   】      改进`PropDesc`中去除Transient引用避免NoClassDefFoundError(issue#3901@Github)
* 【core   】      `StrUtil.isBlank`增加`\u200c`判断(issue#3903@Github)
* 【core   】      优化`CombinationAnnotationElement`注解数组性能(pr#1323@Gitee)
* 【core   】      完善季度相关 API(pr#1324@Gitee)

### 🐞Bug修复
* 【setting】      修复`SettingLoader`load未抛出异常导致配置文件无法正常遍历的问题(pr#3868@Github)
* 【cache  】      修复`ReentrantCache#getOrRemoveExpired`方法丢失onRemove触发问题(pr#1315@Gitee)
* 【json   】      修复`JsonUtil.toBean`泛型数组类型丢失问题(pr#3876@Github)
* 【http   】      修复`HttpUtil.normalizeParams`规则问题(issue#IBQIYQ@Gitee)
* 【http   】      修复`NumberChineseFormatter.format`中自定义单位在0时错误问题(issue#3888@Github)

-------------------------------------------------------------------------------------------------------------
# 5.8.36(2025-02-18)

### 🐣新特性
* 【crypto 】      增加BCUtil.decodeECPrivateKey方法(issue#3829@Github)
* 【core   】      增加HtmlUtil.cleanEmptyTag方法(pr#3838@Github)
* 【db     】      GlobalDbSetting优化默认配置读取规则,优先读取文件而非jar中的文件(issue#900@Github)
* 【dfa    】      删除StopChar类中存在重复字符(pr#3841@Github)
* 【http   】      支持鸿蒙设备 UA 解析(pr#1301@Gitee)

### 🐞Bug修复
* 【aop    】      修复ProxyUtil可能的空指针问题(issue#IBF20Z@Gitee)
* 【core   】      修复XmlUtil转义调用方法错误问题,修复XmlEscape未转义单引号问题(pr#3837@Github)
* 【core   】      修复FileUtil.isAbsolutePath没有判断smb路径问题(pr#1299@Gitee)
* 【core   】      修复AbstractFilter没有检查参数长度问题(issue#3854@Github)

-------------------------------------------------------------------------------------------------------------
# 5.8.35(2024-12-25)

### 🐣新特性
* 【poi    】      优化ExcelWriter中使用比较器writer的方法,只对第一条数据进行排序(pr#3807@Github)
* 【extra  】      优化Ftp.download,返回false抛出异常(issue#3805@Github)
* 【core   】      优化MAC地址正则(issue#IB95X4@Gitee)
* 【json   】      JSON的getByPath方法新增更为通用的指定出参类型重载(pr#3814@Github)
* 【core   】      DateUtil.parseUTC方法标记废弃,改名为parseISO8601(issue#IBB6I5@Gitee)
* 【core   】      添加EnumUtil#getBy(Class, Func1, Object)方法(pr#1283@Gitee)
* 【db     】      添加Entity.addCondition方法(issue#IBCDL2@Gitee)
* 【poi    】      添加StopReadException,定义sax读取时用户可手动终止(issue#3820@Github)

### 🐞Bug修复
* 【crypto 】      修复JWTSignerUtil.createSigner中algorithmId未转换问题(issue#3806@Github)
* 【core   】      修复DateUtil.rangeContains未重置问题(issue#IB8OFS@Gitee)
* 【cache  】      修复StampedCache类get方法并发问题(issue#IBCIQG@Gitee)
* 【cache  】      修复FIFOCache类使用StampedCache导致并发读的并发问题(issue#IBCIQG@Gitee)
* 【cache  】      废弃StampedCache,可能造成Map循环调用导致死锁(issue#IBDGBZ@Gitee)

-------------------------------------------------------------------------------------------------------------
# 5.8.34(2024-11-25)

### 🐣新特性
* 【http   】      增加Windows微信浏览器识别(issue#IB3SJF@Gitee)
* 【core   】      ZipUtil.unzip增加编码容错(issue#I3UZ28@Gitee)
* 【core   】      Calculator兼容`x`字符作为乘号(issue#3787@Github)
* 【poi    】      Excel07SaxReader中,对于小数类型,增加精度判断(issue#IB0EJ9@Gitee)
* 【extra  】      SpringUtil增加getBean重载(issue#3779@Github)
* 【core   】      DataSizeUtil 新增format方法(issue#IB6UUX@Gitee)

### 🐞Bug修复
* 【core   】      修复DateUtil.rangeToList中step小于等于0时无限循环问题(issue#3783@Github)
* 【cron   】      修复cron模块依赖log模块问题
* 【extra  】      修复MailUtil发送html格式邮件无法正常展示图片问题(pr#1279@Gitee)
* 【core   】      【可能的向下兼容问题】修复双引号转义符转义错误问题,修改规则后,对非闭合双引号字段的策略变更,如"aa,则被识别为aa(issue#IB5UQ8@Gitee)
* 【extra  】      修复Sftp中传入Session重连时逻辑错误问题(issue#IB69U8@Gitee)
* 【json   】      修复JSONUtil.toBean()中将JSON数组字符串转Map对象返回错误问题(issue#3795@Github)

-------------------------------------------------------------------------------------------------------------
# 5.8.33(2024-11-05)

### 🐣新特性
* 【core   】      SyncFinisher增加setExecutorService方法(issue#IANKQ1@Gitee)
* 【http   】      HttpConfig增加`setUseDefaultContentTypeIfNull`方法(issue#3719@Github)
* 【core   】      用ArrayList重新实现权重随机类:WeightListRandom(pr#3720@Github)
* 【crypto 】      SM2解密时,兼容GmSSL非压缩省略的04头的密文(issue#IAP1QJ@Gitee)
* 【core   】      兼容NumberUtil.add方法传入整型自动类型转换为浮点类型的精度丢失问题(pr#3721@Github)
* 【core   】      ModifierUtil明确注释,并增加hasAllModifiers方法(issue#IAQ2U0@Gitee)
* 【http   】      HttpRequest增加setFixedContentLength方法(issue#3462@Github)
* 【db     】      AbstractDb增加getDs方法(issue#IARKZL@Gitee)
* 【db     】      QrCodeUtil添加二维码logo支持配置圆角(pr#3747@Github)
* 【core   】      TreeUtil.buildSingle指定rootId节点存在时,作为根节点(issue#IAUSHR@Gitee)
* 【core   】      EscapeUtil.escapeHtml4增加空处理(issue#IAZMYU@Gitee)
* 【core   】      PropDesc.isTransientForGet使用className,避免Android下类找不到问题(issue#IB0JP5@Gitee)
* 【core   】      优化NumberUtil.count(pr#3772@Github)
* 【crypto 】      SM2.signHex改名为signHexFromHex,原名标记废弃,避免歧义(issue#IB0NVY@Gitee)
* 【all    】      优化所调用的ObjectUtil#defaultIfNull避免重复创建(pr#1274@Gitee)
* 【core   】      NetUtil.bigIntegerToIPv6增加长度修正(issue#IB27HV@Gitee)

### 🐞Bug修复
* 【json   】      修复JSONConfig.setDateFormat设置后toBean无效问题(issue#3713@Github)
* 【core   】      修复RegexPool.CHINESE_NAME范围太大的问题(issue#IAOGDR@Gitee)
* 【http   】      修复重定向没有按照RFC7231规范跳转的问题,修改为除了307外重定向使用GET方式(issue#3722@Github)
* 【core   】      修复ArrayUtil.lastIndexOfSub死循环问题(issue#IAQ16E@Gitee)
* 【core   】      修复ImgUtil.write写出临时文件未清理问题(issue#IAPZG7@Gitee)
* 【json   】      修复ignoreNullValue在JSONArray中无效问题(issue#3759@Github)

-------------------------------------------------------------------------------------------------------------
**# 5.8.32(2024-08-30)

### 🐣新特性
* 【core   】      FileUtil.getTotalLines()支持CR换行符(issue#IAMZYR@Gitee)
* 【json   】      GlobalSerializeMapping增加null检查(issue#IANH1Y@Gitee)

### 🐞Bug修复
* 【http   】      修复getFileNameFromDisposition不符合规范问题(issue#IAKBPD@Gitee)
* 【crypto 】      修复SymmetricCrypto.setParams和setRandom没有加锁问题(issue#IAJIY3@Gitee)
* 【crypto 】      修复ZipUtil压缩成流的方法检查文件时报错问题(issue#3697@Github)
* 【core   】      修复CopyOptions.setFieldValueEditor后生成null值setIgnoreNullValue无效问题(issue#3702@Github)
* 【json   】      修复JSONConfig.setDateFormat设置后setWriteLongAsString失效问题(issue#IALQ0N@Gitee)
* 【core   】      修复Tree.cloneTree的Parent节点引用错误问题(issue#IANJTC@Gitee)

-------------------------------------------------------------------------------------------------------------**
# 5.8.31(2024-08-12)

### 🐣新特性
* 【core   】      TreeUtil增加build方法,可以构建Bean的树结构(pr#3692@Github)

### 🐞Bug修复
* 【extra  】      修复JakartaMailUtil引用javax的问题
* 【core   】      修复GraphicsUtil.drawString方法签名变化导致的问题(issue#3694@Github)

-------------------------------------------------------------------------------------------------------------
# 5.8.30(2024-08-09)

### 🐣新特性
* 【core   】      Converter转换规则变更,空对象、空值转为Bean时,创建默认对象,而非null(issue#3649@Github)
* 【core   】      UrlQuery增加remove方法
* 【extra  】      增加JakartaMailUtil,支持新包名的mail
* 【core   】      CharSequenceUtil增加removeAllPrefix和removeAllSuffix方法(pr#3655@Github)
* 【core   】      CharSequenceUtil增加stripAll方法(pr#3659@Github)
* 【crypto 】      支持"RSA/ECB/OAEPWithSHA-1AndMGF1Padding"的RSA加解密(pr#3675@Github)
* 【core   】      Opt增加ifFail(pr#1239@Gitee)
* 【poi    】      增加GlobalPoiConfig(issue#IAEHJH@Gitee)
* 【core   】      优化IndexedComparator性能(pr#1240@Gitee)
* 【http   】      改进ContentType.get忽略空格(pr#3664@Github)
* 【http   】      CompressUtil.createExtractor支持tgz自动识别(pr#3674@Github)
* 【poi    】      ExcelWriter.autoSizeColumn增加可选widthRatio参数,可配置中文字符宽度倍数(pr#3689@Github)
* 【mail   】      MailAccount增加自定义参数支持(issue#3687@Github)
* 【mail   】      增加文字颜色与背景颜色色差设置(pr#1252@gitee)
* 【mail   】      XmlUtil增加xmlToBean重载,支持CopyOptions参数(issue#IAISBB@gitee)
* 【core   】      增加默认色差方法(pr#1257@gitee)
* 【all    】      单元测试由Junit4变更为Junit5

### 🐞Bug修复
* 【core   】      修复因RFC3986理解有误导致的UrlPath处理冒号转义问题(issue#IAAE88@Gitee)
* 【core   】      修复FileUtil.cleanEmpty无法正确清空递归空目录问题(pr#1233@Gitee)
* 【core   】      修复BeanUtil.copyProperties中mapToMap时key被转为String问题(issue#3645@Github)
* 【core   】      修复FileUtil.file末尾换行符导致路径判断错误的问题(issue#IAB65V@Gitee)
* 【core   】      修复FileTypeUtil.getType空指针问题(issue#IAD5JM@Gitee)
* 【core   】      修复IdcardUtil.isValidHKCard校验问题(issue#IAFOLI@Gitee)
* 【core   】      修复Convert.digitToChinese(0)输出金额无`元整问题`(issue#3662@Github)
* 【core   】      修复CsvParser中对正文中双引号处理逻辑问题(pr#1244@Gitee)
* 【core   】      修复ZipUtil.zip压缩到本目录时可能造成的死循环问题(issue#IAGYDG@Gitee)
* 【cache  】      修复AbstractCache.get中锁不一致导致的并发问题(issue#3686@Github)
* 【cron   】      修复CronPatternUtil.nextDateAfter栈溢出问题(issue#3685@Github)

-------------------------------------------------------------------------------------------------------------
# 5.8.29(2024-07-03)

### 🐣新特性
* 【core   】      DateUtil增加offsetYear方法
* 【core   】      ListUtil增加move方法(issue#3603@Github)
* 【core   】      CollUtil.subtract增加空判定(issue#3605@Github)
* 【core   】      优化DateUtil.format(Date date, String format)接口效率(pr#1226@Gitee)
* 【csv    】      CsvWriter.writeBeans增加重载,可选是否写出表头(issue#IA57W2@Gitee)
* 【core   】      BetweenFormatter支持自定义设置单位(pr#1228@Gitee)
* 【cache  】      Cache.put变更策略,对于替换的键值对,不清理队列(issue#3618@Github)
* 【core   】      添加 Windows 资源管理器风格字符串比较器(pr#3620@Github)
* 【core   】      Week.of支持中文名称(issue#3637@Github)
* 【core   】      ThreadUtil.newExecutor等方法变更方法签名,返回值变更为ThreadPoolExecutor(pr#1230@Gitee)

### 🐞Bug修复
* 【core   】      修复AnnotationUtil可能的空指针错误
* 【core   】      修复BeanUtil.isBean判断Dict错误问题(issue#I9VTZG@Gitee)
* 【core   】      修复VersionComparator传入空字符串报错问题(pr#3614@Github)
* 【core   】      修复CaseInsensitiveLinkedMap顺序错误问题(issue#IA4K4F@Gitee)
* 【core   】      修复DateUtil.offset空指针问题(issue#3617@Github)
* 【core   】      修复PathMover.moveContent问题(issue#IA5Q8D@Gitee)
* 【db     】      修复PooledConnection可能的数据库驱动未找到问题(issue#IA6EUQ@Gitee)
* 【http   】      修复Mac下的微信浏览器被识别为移动端问题(issue#IA74K2@Gitee)
* 【core   】      修复Tailer指定初始读取行数的计算错误问题(issue#IA77ML@Gitee)
* 【http   】      修复getFileNameFromDisposition获取头错误问题(issue#3632@Github)
* 【core   】      修复\n#出现在双引号中解析错误问题(issue#IA8WE0@Gitee)
* 【core   】      修复FastDatePrinter处理YY错误问题(issue#3641@Github)

-------------------------------------------------------------------------------------------------------------
# 5.8.28(2024-05-29)

### 🐣新特性
* 【core   】      修正XmlUtil的omitXmlDeclaration描述注释(issue#I9CPC7@Gitee)
* 【core   】      StrUtil增加toStringOrEmpty方法(issue#I9CPC7@Gitee)
* 【extra  】      设置jsch登录认证方式,跳过Kerberos身份验证(pr#3530@Github)
* 【extra  】      增加设置验证码大小和针对alias注释(pr#3533@Github)
* 【json   】      JSONConfig增加setWriteLongAsString可选是否将Long写出为String类型(issue#3541@Github)
* 【cache  】      CacheUtil.newTimedCache增加有schedulePruneDelay参数的重载方法(issue#I9HO25@Gitee)
* 【core   】      NumberChineseFormatter提供阿拉伯转中文支持多位小数的方法(pr#3552@Github)
* 【captcha】      Captcha.setBackground为null时背景透明(issue#3558@Github)
* 【captcha】      HttpDownloader.downloadBytes增加超时参数重载(issue#3556@Github)
* 【http   】      增加ExceptionFilter和DefaultExceptionFilter支持异常处理(issue#3568@Github)
* 【poi    】      增加ExcelWriter.addIgnoredErrors,支持忽略警告小标
* 【core   】      PropertyComparator增加compareSelf构造重载(issue#3569@Github)
* 【db     】      增加OceanBase的driver推断(pr#1217@Gitee)
* 【http   】      HttpRequest#get不再尝试File路径(issue#I9O6DA@Gitee)
* 【core   】      增加IdConstants,提高Snowflake初始化性能(issue#3581@Github)
* 【core   】      优化 CharSequenceUtil工具类 startWithAny()、startWithAnyIgnoreCase() 参数命名错误问题(pr#1219@Gitee)
* 【core   】      ListUtil.setOrPadding增加重载,可选限制index大小(issue#3586@Github)
* 【http   】      getFileNameFromDisposition更加规范,从多个头的值中获取,且`filename*`优先级更高(pr#3590@Gitee)
* 【core   】      CsvWriter增加重载writeBeans方法,支持可选bean字段(pr#1222@Gitee)
* 【core   】      LocalDateTimeUtil增加beginOfDay和endOfDay重载(issue#3594@Github)
* 【core   】      NumberUtil.pow支持负数(issue#3598@Github)

### 🐞Bug修复
* 【http   】      修复HttpUtil.urlWithFormUrlEncoded方法重复编码问题(issue#3536@Github)
* 【core   】      修复FileMagicNumber.getMagicNumber空指针问题(issue#I9FE8B@Gitee)
* 【extra  】      修复CompressUtil工具多出\问题(issue#I71K5V@Gitee)
* 【db     】      解决oracle情况下setObject(inputStream)报错问题,java.sql.SQLException: 无效的列类型问题(pr#1207@Gitee)
* 【core   】      解决CalendarUtil.isSameDay时区不同导致结果错误问题(pr#3548@Github)
* 【core   】      修复RandomUtil.randomStringWithoutStr方法问题(pr#1209@Gitee)
* 【http   】      修复HttpRequest.header相同key被覆盖问题(issue#I9I61C@Gitee)
* 【core   】      修复TemporalAccessorConverter自定义格式转换问题(issue#I9HQQE@Gitee)
* 【cron   】      修复CronPattern.nextMatchAfter匹配初始值问题(issue#I9FQUA@Gitee)
* 【core   】      修复FileUtil.copyFile没有创建父目录导致的问题(issue#3557@Github)
* 【http   】      修复HttpDownloader全局超时无效问题(issue#3556@Github)
* 【core   】      修复ZipReader.checkZipBomb遇到空目录报错问题(issue#I9K494@Gitee)
* 【db     】      修复Oracle下特殊表名导致meta信息获取不到问题(issue#I9BANE@Gitee)
* 【db     】      修复FuncComparator.thenComparing不生效问题(issue#3569@Github)
* 【core   】      修复EnumUtil空指针问题(issue#I9NSZ4@Gitee)
* 【core   】      修复NumberWordFormatter.format小数问题(issue#3579@Github)
* 【db     】      修复JndiDSFactory空指针问题
* 【core   】      修复BiMap.put错误的返回值(pr#1218@Gitee)
* 【core   】      修复BooleanUtil.andOfWrap针对null错误问题(issue#3587@Github)
* 【core   】      修复FileUtil#getTotalLines在JDK9+结果错误问题(issue#3591@Github)

-------------------------------------------------------------------------------------------------------------
# 5.8.27(2024-03-29)

### 🐣新特性
* 【extra 】      FreemarkerEngine修改默认版本参数
* 【db    】      增加达梦数据库方言(pr#1178@Gitee)
* 【core  】      HexUtil#format方法增加prefix参数(issue#I93PU9@Gitee)
* 【core  】      StrUtil.replace歧义,修改为replaceByCodePoint(issue#I96LWH@Gitee)
* 【core  】      FileUtil和PathUtil增加Resource重载(issue#I97FJT@Gitee)
* 【core  】      优化ThreadUtil.safeSleep,使用System.nanoTime()(issue#I9BMGK@Gitee)
* 【db    】      新增数据库Wrapper支持反解(pr#1192@Gitee)
* 【core  】      新增RFC2822日期格式解析支持(issue#I9C2D4@Gitee)

### 🐞Bug修复
* 【core  】      修复PathMover对目标已存在且只读文件报错错误问题(issue#I95CLT@Gitee)
* 【json  】      修复JSONUtil序列化和反序列化预期的结果不一致问题(pr#3507@Github)
* 【http  】      修复CVE-2022-22885,HttpGlobalConfig可选关闭信任host(issue#2042@Github)
* 【core  】      修复DateUtil.betweenYear闰年2月问题(issue#I97U3J@Gitee)
* 【captcha】     修复Graphics2D的资源没释放问题(issue#I98PYN@Gitee)
* 【core  】      修复ClassUtil.getTypeArgument() 获取泛型存在null问题(issue#3516@Github)
* 【core  】      修复图片操作未调用flush导致资源未释放问题(issue#I9C7NA@Gitee)
* 【cron  】      修复cron中在小月时使用“L”的计算问题(pr#1189@Gitee)

-------------------------------------------------------------------------------------------------------------
# 5.8.26(2024-02-10)

### 🐣新特性
* 【db    】      RedisDS增加user支持(issue#I8XEQ4@Gitee)
* 【core  】      MapUtil增加partition方法(pr#1170@Gitee)
* 【core  】      增加Version类(issue#I8Z3VE@Gitee)

### 🐞Bug修复
* 【crypto】      修复BouncyCastleProvider导致graalvm应用报错UnsupportedFeatureError(pr#3464@Github)
* 【http  】      修复UserAgentUtil对QQ浏览器识别问题(issue#I8X5XQ@Gitee)
* 【core  】      修复BeanToMapCopier获取类型数组越界问题(issue#3468@Github)
* 【extra 】      修复SshjSftpSession关闭导致的问题(issue#3472@Github)
* 【http  】      修复HtmlUtil.removeHtmlAttr处理空格问题(issue#I8YV0K@Gitee)
* 【core  】      修复CollUtil.containsAll在coll2长度大于coll1时逻辑歧义问题(issue#I8Z2Q4@Gitee)
* 【poi   】      修复当sheetName 不存在时,ExcelUtil.getReader方法不会释放文件问题(issue#I8ZIQC@Gitee)
* 【crypto】      通过添加系统属性hutool.crypto.decodeHex强制关闭hex识别以解决hex和Base64歧义问题(issue#I90M9D@Gitee)
* 【core  】      修复VersionComparator违反传递问题(issue#I8Z3VE@Gitee)

-------------------------------------------------------------------------------------------------------------
# 5.8.25(2024-01-11)

### 🐣新特性
* 【core  】      WatchServer新增通过Path获取WatchKey方法(pr#1145@Gitee)
* 【core  】      CopyOptions中增加setAutoTransCamelCase方法(issue#3452@Github)
* 【captcha】     验证码生成器增加构造方法,可自定义随机数字符集(pr#1147@Gitee)

### 🐞Bug修复
* 【core  】      修复StrJoin当append内容后调用length()会出现空指针问题(issue#3444@Github)
* 【core  】      修复PostgreSQL、H2使用upsert字段大小写问题(issue#I8PB4X@Gitee)
* 【core  】      修复RandomUtil.randomInt,RandomUtil.randomLong边界问题(pr#3450@Github)
* 【db    】      修复Druid连接池无法设置部分属性问题(issue#I8STFC@Gitee)
* 【core  】      修复金额转换为英文时缺少 trillion 单位问题(pr#3454@Github)
* 【json  】      增加ParseConfig,通过增加maxNestingDepth参数避免StackOverflowError问题,修复CVE-2022-45688漏洞(issue#2748@Github)
* 【system】      修复UserInfo中用户名加/问题(pr#3458@Github)
* 【core  】      修复NumberUtil.toBigDecimal方法报StackOverflowError(CVE-2023-51080)(issue#3423@Github)

-------------------------------------------------------------------------------------------------------------
# 5.8.24(2023-12-23)

### 🐣新特性
* 【cache 】      Cache增加get重载,可自定义超时时间(issue#I8G0DL@Gitee)
* 【cache 】      JWT#sign增加重载,可选是否增加默认的typ参数(issue#3386@Github)
* 【db    】      增加识别OpenGauss的驱动类(issue#I8K6C0@Gitee)
* 【core  】      修复CharSequenceUtil注释和引用,避免循环引用
* 【extra 】      SpringUtil增加getProperty重载(pr#1122@Gitee)
* 【core  】      FileTypeUtil增加null判断(issue#3419@Github)
* 【core  】      DateUtil.parse支持毫秒时间戳(issue#I8NMP7@Gitee)
* 【extra 】      优化TokenizerEngine使用IK分词器支持并发(pr#3427@Github)
* 【core  】      Opt.ofEmptyAble支持更多类型(issue#I8OOSY@Gitee)
* 【http  】      HTMLFilter保留p标签(issue#3433@Gitee)

### 🐞Bug修复
* 【core  】      修复LocalDateTime#parseDate未判断空问题(issue#I8FN7F@Gitee)
* 【http  】      修复RootAction send404 抛异常问题(pr#1107@Gitee)
* 【extra 】      修复Archiver 最后一个 Entry 为空文件夹时未关闭 Entry问题(pr#1123@Gitee)
* 【core  】      修复ImgUtil.convert png转jpg在jdk9+中失败问题(issue#I8L8UA@Gitee)
* 【cache 】      修复StampedCache的get方法非原子问题(issue#I8MEIX@Gitee)
* 【core  】      修复StrSplitter.splitByRegex使用空参数导致的OOM问题(issue#3421@Github)
* 【db    】      修复嵌套SQL中order by子句错误截断问题(issue#I89RXV@Gitee)
* 【http  】      修复graalvm编译后,未读取Content-Length可能导致的读取时间过长问题(issue#I6Q30X@Gitee)
* 【core  】      修复JavaSourceCompiler.addSource目录处理错误问题(issue#3425@Github)
* 【core  】      修复时间戳转Bean时异常问题(issue#I8NMP7@Gitee)
* 【core  】      修复PostgreSQL使用upsert字段大小写问题(issue#I8PB4X@Gitee)
* 【extra 】      修复TinyPinyinEngine可能的空指针问题(issue#3437@Github)
* 【core  】      修复graalvm原生打包使用http工具被转为file协议问题(issue#I8PY3Y@Gitee)
* 【poi   】      修复cloneSheet参数错误导致非XSSFWorkbook错误命名问题(issue#I8QIBB@Gitee)

-------------------------------------------------------------------------------------------------------------
# 5.8.23(2023-11-12)

### 🐣新特性
* 【json  】      改进TemporalAccessorSerializer支持dayOfMonth和month枚举名(issue#I82AM8@Gitee)
* 【core  】      新增ProxySocketFactory
* 【http  】      UserAgent增加百度浏览器识别(issue#I847JY@Gitee)
* 【core  】      ReflectUtil.getFieldsValue增加Filter重载(pr#1090@Gitee)
* 【core  】      Snowflake增加方法:根据传入时间戳,计算ID起终点(pr#1096@Gitee)
* 【core  】      PathUtil增加loopFiles重载,可选是否追踪软链(issue#3353@Github)

### 🐞Bug修复
* 【cron  】      修复Cron表达式range解析错误问题(issue#I82CSH@Gitee)
* 【core  】      修复VersionComparator在极端数据排序时候违反了自反性问题(issue#I81N3H@Gitee)
* 【json  】      修复JSONStrFormatter:format函数对于转义符号处理逻辑错误问题(issue#I84V6I@Gitee)
* 【core  】      修复特定情况下BiMap覆盖Value后,仍能通过旧Value查询到Key问题(issue#I88R5M@Gitee)
* 【core  】      修复aop的afterException无法生效问题(issue#3329@Github)
* 【core  】      修复TypeUtil.getClass方法强转报错问题(pr#1092@Github)
* 【core  】      修复DataSize.parse(size)不支持空格问题(issue#I88Z4Z@Gitee)
* 【http  】      修复SimpleServer在添加的HttpFilter中有获取请求参数时报错问题(issue#3343@Github)
* 【http  】      修复options请求无响应体问题
* 【core  】      ImgUtil的sliceByRowsAndCols背景无法透明问题(issue#3347@Github)
* 【core  】      修复ClassUtil#scanJar未正确关闭文件问题(issue#3361@Github)
* 【db    】      修复Column.getDigit返回值错误问题(issue#3370@Github)
* 【core  】      修复合成注解在并发环境无法保证正确缓存属性值的问题(pr#1097@Gitee)
* 【core  】      修复CollectorUtil.reduceListMap与collectors.groupby一起使用时出现与预期不符问题(pr#1102@Gitee)

-------------------------------------------------------------------------------------------------------------
# 5.8.22(2023-09-13)

### 🐣新特性
* 【core  】      NumberUtil.nullToZero增加重载(issue#I7PPD2@Gitee)
* 【core  】      DesensitizedUtil增加清空策略(issue#I7PUJ2@Gitee)
* 【all   】      修改异常包装策略:运行时异常不包装,只包装非运行时异常(issue#I7RJZT@Gitee)
* 【core  】      增加IJSONTypeConverter,避免反射调用(pr#1051@Gitee)
* 【http  】      优化HttpUtil.urlWithForm方法(pr#1052@Gitee)
* 【http  】      优化HttpUtil.urlWithForm方法(pr#1052@Gitee)
* 【cron  】      优化PatternParser支持年的步进(issue#I7SMP7@Gitee)
* 【core  】      TreeUtil增加getParentsId方法(issue#I7TDCF@Gitee)

### 🐞Bug修复
* 【core  】      修复NumberUtil.toBigDecimal转换科学计数法问题(issue#3241@Github)
* 【core  】      修复PathUtil.moveContent当target不存在时会报错问题(issue#3238@Github)
* 【db    】      修复SqlUtil.formatSql 格式化的sql换行异常(pr#3247@Github)
* 【core  】      修复DateUtil.parse 给定一个时间解析错误问题(issue#I7QI6R@Gitee)
* 【core  】      去除默认的ACCEPT_LANGUAGE(issue#3258@Github)
* 【core  】      修复FieldsComparator比较结果不正确问题(issue#3259@Github)
* 【core  】      修复Db.findAll全局忽略大小写无效问题(issue#I7T30Y@Gitee)
* 【core  】      修复Ipv4Util.getEndIpLong 取反符号导致数据越界(issue#I7U1OQ@Gitee)
* 【http  】      修复302重定向时,Location中的问号被转义问题(issue#3265@Github)
* 【core  】      修复CombinationAnnotationElement判断循环问题(pr#3267@Github)
* 【core  】      修复StrUtil#containsAny NPE问题(pr#1063@Gitee)
* 【all   】      修复SONArray的add()方法抛出OutOfMemory异常问题(issue#3286@Github)
* 【core  】      修复fillColumns空指针问题(issue#3284@Github)
* 【core  】      修复Convert不能转换Optional和Opt问题(issue#I7WJHH@Gitee)
* 【core  】      修复DateUtil.age年龄计算问题(issue#I7XMYW@Gitee)
* 【core  】      修复JSONUtil.parse()溢出问题(issue#3289@Github)
* 【core  】      修复Tailer stop NPE问题(pr#1067@Gitee)
* 【json  】      修复toJSONString导致CPU使用率高的问题(issue#3297@Github)
* 【core  】      修复NumberUtil.parseInt 16进制解析错误的问题(pr#1071@Gitee)
* 【core  】      修复CopyOptions.setIgnoreCase和setIgnoreProperties冲突问题(issue#I80FP4@Gitee)
* 【core  】      修复LocalDateTimeUtil.of 某些特殊TemporalAccessor无法返回正确结果的问题(issue#3301@Github)

-------------------------------------------------------------------------------------------------------------
# 5.8.21(2023-07-29)

### 🐣新特性
* 【core  】      list 为空时,CollUtil.max等返回null而非异常(pr#1027@Gitee)
* 【poi   】      ExcelReader.getWriter逻辑变更,当从非文件读取时,获取sheet,而非空表格。
* 【core  】      Ipv4Util 新增方法:检测指定 IP 地址是否匹配通配符(pr#3171@Github)
* 【core  】      DateUtil.parse适配6位毫秒格式(issue#I7H34N@Gitee)
* 【core  】      RandomUtil增加可选是否包含边界的重载(issue#3182@Github)
* 【core  】      StrUtil增加truncateByByteLength方法(pr#3176@Github)
* 【core  】      身份证工具类isValidCard18、isValidCard15入参null直接返回null(pr#1034@Gitee)
* 【http  】      使用multiparty方式支持body参数(issue#3158@Github)
* 【core  】      ZipReader增加setMaxSizeDiff方法,自定义或关闭ZipBomb(issue#3018@Github)
* 【db    】      Query.of(entity)构建时传入fields(issue#I7M5JU@Gitee)
* 【db    】      clickhouse驱动名称变更为com.clickhouse.jdbc.ClickHouseDriver(issue#3224@Github)
* 【core  】      UrlResource增加size方法(issue#3226@Github)

### 🐞Bug修复
* 【core  】      修复MapUtil工具使用filter方法构造传入参数结果问题(issue#3162@Github)
* 【core  】      修复序列化和反序列化Class问题(issue#I7FQ29@Gitee)
* 【setting】     修复utf8-bom的setting文件读取问题(issue#I7G34E@Gitee)
* 【core  】      修复PathUtil.getMimeType可能造成的异常(issue#3179@Github)
* 【core  】      修复Pair序列化转换无效问题(issue#I7GPGX@Github)
* 【core  】      修复TypeUtil.getTypeArgument对实现接口获取不全面问题(issue#I7CRIW@Gitee)
* 【core  】      修复BeanUtil.isCommonFieldsEqual判空导致的问题
* 【extra 】      修复CompressUtil.createArchiver 将文件压缩为tgz时文件名规则无效问题(issue#I7LLL7@Gitee)
* 【core  】      修复脱敏银行卡号长度bug(pr#3210@Github)
* 【jwt   】      修复JWTSignerUtil中ES256签名不符合规范问题(issue#3205@Github)
* 【core  】      修复UserInfo获取country问题(issue#I7MCKW@Gitee)
* 【extra 】      修复MVEL加载错误问题(issue#3214@Github)
* 【json  】      修复JSONBeanParser在遇到List时没有被正确递归问题(issue#I7M2GZ@Gitee)
* 【core  】      修复VersionComparator对1.0.3及1.0.2a比较有误的问题(pr#1043@Gitee)
* 【core  】      修复IOS系统下,chrome 浏览器的解析规则有误(pr#1044@Gitee)
* 【extra 】      修复多线程下Sftp中Channel关闭的问题(issue#I7OHIB@Gitee)
* 【extra 】      修复CVE-2023-24163漏洞(issue#I6AJWJ@Gitee)

-------------------------------------------------------------------------------------------------------------
# 5.8.20(2023-06-16)

### 🐣新特性
* 【core  】      UrlQuery增加setStrict方法,区分是否严格模式(issue#I78PB1@Gitee)
* 【poi   】      添加系列方法writeCol,以支持按列输出(pr#1003@Gitee)
* 【core  】      CollUtil新增anyMatch和allMatch方法(pr#1008@Gitee)
* 【core  】      CsvWriter如果开启了append=true,默认自动开启endingLineBreak=true(pr#1010@Gitee)

### 🐞Bug修复
* 【core  】      修复TreeUtil.getParentsName()获取到的路径集合中存在值为null的路径名称问题(issue#I795IN@Gitee)
* 【core  】      修复umberUtil.parseNumber对+解析问题(issue#I79VS7@Gitee)
* 【core  】      修复IdcardUtil.getGenderByIdCard存在潜在的异常(pr#1007@Gitee)
* 【core  】      修复Table#contains空指针问题(issue#3135@Gitee)
* 【core  】      修复FileUtil.checkSlip方法缺陷(issue#3140@Github)
* 【extra 】      修复Sftp中exists方法父目录不存在时报错(issue#I7CSQ9@Gitee)
* 【extra 】      修复xml转json再转bean失败问题(issue#3139@Github)
* 【poi   】      修复RowUtil传入参数错误问题(issue#3139@Github)
* 【core  】      修复XmlUtil.xmlToBean空节点转换失败问题(issue#3136@Github)
* 【core  】      修复CVE-2023-3276漏洞,XmlUtil.readBySax问题(issue#I7DX8W@Gitee)

-------------------------------------------------------------------------------------------------------------
# 5.8.19(2023-05-27)

### 🐣新特性
* 【db    】      优化HttpRequest.toString()内容打印(issue#3072@Github)
* 【poi   】      优化Sax方式读取时空白行返回0,修改为返回-1(issue#I6WYF6@Gitee)
* 【db    】      优化count查询兼容informix(issue#I713XQ@Gitee)
* 【core  】      去除Opt头部的GPL协议头(pr#995@Gitee)
* 【core  】      邮箱校验添加对中文的支持(pr#997@Gitee)
* 【core  】      FileUtil.getMimeType增加webp识别(pr#997@Gitee)
* 【core  】      SyncFinisher增加setExceptionHandler方法(issue#I716SX@Gitee)
* 【core  】      FileTypeUtil.getType增加文件判断(pr#3112@Github)
* 【core  】      增加CsvWriteConfig.setEndingLineBreak配置项(issue#I75K5G@Gitee)
* 【core  】      增加Tailer追踪文件时文件被删除的处理情况(pr#3115@Github)
* 【core  】      DelegatedExecutorService构造方法设置成public(issue#I77LUE@Gitee)
* 【core  】      切面代理工具中的cglib支持多参数构造生成(issue#I74EX7@Gitee)
* 【poi   】      添加writeCellValue的重载,以支持isHeader(pr#1002@Gitee)

### 🐞Bug修复
* 【core  】      修复URLUtil.decode无法解码UTF-16问题(issue#3063@Github)
* 【db    】      修复insertOrUpdate更新中条件字段没有移除问题(issue#I6W91Z@Gitee)
* 【core  】      修复VIN(车架号)正则问题(pr#3078@Github)
* 【core  】      修复HtmlUtil的removeHtmlAttr方法匹配问题(issue#I6YNTF@Gitee)
* 【core  】      修复JSONUtil.toBean目标存在Map字段无序问题(issue#I6YN2A@Gitee)
* 【http  】      修复HttpDownloader.downloadFile 方法缺少static问题(issue#I6Z8VU@Gitee)
* 【core  】      修复NumberUtil mul 传入null的string入参报错问题(issue#I70JB3@Gitee)
* 【core  】      修复ZipReader.get调用reset异常问题(issue#3099@Github)
* 【core  】      修复FileUtil.createTempFile可能导致的漏洞(issue#3103@Github)
* 【cron  】      修复SystemTimer无法结束进程问题(issue#3090@Github)
* 【core  】      修复BeanUtil.copyToList复制Long等类型错误问题(issue#3091@Github)
* 【poi   】      修复MapRowHandler结果Map无序问题(issue#I71SE8@Github)
* 【db    】      修复SqlExecutor.execute执行ORACLE insert into select报ORA-00933问题(issue#I778U7@Gitee)
* 【db    】      修复AbstractDb#page分页查询异常问题(issue#I73770@Gitee)

-------------------------------------------------------------------------------------------------------------
# 5.8.18 (2023-04-27)

### 🐣新特性
* 【extra 】      JschUtil新增一个重载方法以支持私钥以byte数组形式载入(pr#3057@Github)
* 【crypto】      优化MD5性能(issue#I6ZIQH@Gitee)

### 🐞Bug修复
* 【core  】      修复CollUtil.reverseNew针对非可变列表异常(issue#3056@Github)
* 【all   】      修复junit被关联引入的bug(issue#3062@Github)

-------------------------------------------------------------------------------------------------------------
# 5.8.17 (2023-04-12)

### 🐣新特性
* 【core  】      SerializeUtil.deserialize增加白名单类,避免RCE vulnerability(issue#3021@Github)
* 【poi   】      ExcelWriter在关闭后不清空currentRow,以便复用(issue#3025@Github)
* 【core  】      完善HttpStatus,参考相关规范,补全缺失的状态码(pr#968@Gitee)
* 【core  】      NumberUtil增加(pr#968@Gitee)
* 【core  】      Number128增加hash和equals方法(pr#968@Gitee)
* 【core  】      NamingCase.toCamelCase新增重载,可选是否转换其他字符为小写(issue#3031@ithub)
* 【core  】      新增JdkUtil
* 【core  】      DateUtil.getZodiac增加越界检查(issue#3036@Github)
* 【core  】      CsvReader修改策略,添加可选是否关闭Reader重载,默认不关闭Reader(issue#I6UAX1@Gitee)
* 【core  】      isNotEmpty修改规则,避开IDEA错误提示(pr#974@Gitee)

### 🐞Bug修复
* 【core  】      CollUtil.split优化切割列表参数判断,避免OOM(pr#3026@Github)
* 【core  】      修复FileUtil.move传入相同目录或子目录丢失源目录的问题(pr#3032@Github)
* 【core  】      修复SafeConcurrentHashMap.computeIfAbsent可能存在的结果为null的情况(issue#I6RVMY@Gitee)
* 【json  】      修复Pair反序列化报错问题(issue#I6SZYB@Gitee)
* 【core  】      修复使用AnnotationUtil.getAnnotationAlias获取注解时可能会出现空指针的问题(pr#975@Gitee)
* 【json  】      修复没有属性的对象转json字符串抛异常问题(issue#3051@Github)

-------------------------------------------------------------------------------------------------------------
# 5.8.16 (2023-03-26)

### 🐣新特性
* 【core  】      改进Calculator.conversion,兼容乘法符号省略写法(issue#2964@Github)
* 【core  】      改进XmlUtil.xmlToBean,支持xml转bean时父节点忽略大小写
* 【core  】      优化ArrayUtil的空判断(pr#2969@Github)
* 【extra 】      优化SpringUtil在非Spring环境下的异常(issue#2835@Github)
* 【core  】      StrUtil增加commonPrefix和commonSuffix方法(pr#3007@Github)
* 【core  】      NumberUtil增加重载parseXXX方法, 解析失败返回默认值(pr#3007@Github)
* 【core  】      FileUtil增加readLines重载,支持filter(pr#3006@Github)
* 【json  】      当用户选择ignoreError时,错误对象转JSON也忽略

### 🐞Bug修复
* 【crypto】      修复NoSuchMethodError未捕获问题(issue#2966@Github)
* 【poi   】      修复SXSSFWorkbook调用setComment时错位的问题(issue#I6MBS5@Gitee)
* 【core  】      修复BeanUtil.hasGetter没有跳过getClass方法的问题(issue#I6MBS5@Gitee)
* 【core  】      修复FileMagicNumber长度判断问题导致的越界异常(issue#I6MACI@Gitee)
* 【core  】      修复DateUtil针对ISO8601时间格式部分场景下的解析存在问题(issue#2981@Github)
* 【core  】      修复JSONUtil.toBean可能的空指针问题(issue#2987@Github)
* 【core  】      修复CalendarUtil.isSameMonth没有判断公元前导致不一致的问题(issue#3011@Github)
* 【core  】      修复WatchUtil createModify maxDepth传递后没有使用问题(issue#3005@Github)
* 【core  】      修复NullComparator反转无效问题(pr#964@Gitee)
* 【setting】     修复props.toBean 数组字段未赋值问题(issue#3008@Github)

-------------------------------------------------------------------------------------------------------------
# 5.8.15 (2023-03-09)

### 🐣新特性
* 【http  】      新增followRedirectsCookie配置,支持开启自动重定向携带cookie(pr#2961@Github)

### 🐞Bug修复
* 【all   】      修复Automatic-Module-Name错误问题(issue#2952@Github)
* 【core  】      修复NumberWithFormat导致转换Long异常问题(issue#I6L2LO@Gitee)

-------------------------------------------------------------------------------------------------------------
# 5.8.14 (2023-03-05)

### 🐣新特性
* 【core  】      增加PathMover(issue#I666HB@Github)

### 🐞Bug修复
* 【core  】      修复FileUtil.moveContent会删除源目录的问题(issue#I666HB@Github)
* 【http  】      修复HttpBase.body导致的空指针问题

-------------------------------------------------------------------------------------------------------------

# 5.8.13 (2023-03-03)

### 🐣新特性
* 【core  】      PhoneUtil.isTel400800支持400-XXX-XXXX格式(issue#2929@Github)
* 【core  】      build(pom): 添加 Automatic-Module-Name属性(pr#2926@Github)
* 【core  】      根据JDK-8080225修改了部分新建文件输入流和文件输出流的创建方式(pr#2930@Github)
* 【http  】      HttpRequest#body增加支持Resource重载(issue#2901@Github)
* 【core  】      JavaSourceCompiler#compile增加自定义options重载(issue#I6IVZK@Gitee)

### 🐞Bug修复
* 【db    】      修复识别JDBC驱动时重复问题(pr#940@Gitee)
* 【core  】      修复法定年龄计算的BUG(pr#935@Gitee)
* 【core  】      修复FileUtil.rename报NoSuchFileException问题(pr#2894@Github)
* 【core  】      修复StrUtil.split切分长度为0时的bug(pr#944@Gitee)
* 【core  】      修复ReUtil.delAll方法当 content 仅为空格时的问题(issue#I6GIMT@Gitee)
* 【core  】      修复ReUtil.delAll方法当 content 仅为空格时的问题(issue#I6GIMT@Gitee)
* 【core  】      修复文件内容跟随在调用stop后,文件依旧被占用问题(issue#I6GFD2@Gitee)
* 【core  】      修复ReflectUtil.invokeRaw方法中参数类型转换动作未生效的问题(pr#2912@Github)
* 【core  】      修复isXXX转换时的匹配问题(issue#I6H0XF@Gitee)
* 【core  】      修复MutableObj.equals空指针问题
* 【core  】      修复JavaSourceFileObject在编译错误时抛出IOException异常而非CompilerException问题(pr#2942@Github)
* 【jwt   】      修复JWT自定义时间格式后的时间戳转换问题(issue#I6IS5B@Gitee)

-------------------------------------------------------------------------------------------------------------

# 5.8.12 (2023-02-09)

### 🐣新特性
* 【http  】      HttpGlobalConfig.allowPatch()调用时忽略错误(issue#2832@Github)
* 【core  】      重构根据file magic number判断文件类型(pr#2834@Github)
* 【core  】      增加WGS84 坐标与墨卡托投影互转(pr#2811@Github)
* 【extra 】      ServletUtil遵循rfc 3986优化(issue#I6ALAO@Gitee)
* 【http  】      HttpUtil.decodeParams增加isFormUrlEncoded重载(pr#918@Gitee)
* 【db    】      AbstractDb添加返回类型为PageResult的page重载方法(pr#916@Gitee)
* 【core  】      DesensitizedUtil增加对IPv4和IPv6支持(issue#I6ABCS@Gitee)
* 【core  】      针对CollUtil.subtract coll1 为只读集合的补偿(pr#2865@Github)
* 【core  】      DateUtil.date方法统一修改规则,传入null返回null(pr#2877@Github)
* 【core  】      DateUtil.parseUTC统一规范,舍弃3位毫秒数后的数字(pr#2889@Github)

### 🐞Bug修复
* 【core  】      修复HexUtil.isHexNumber()对"-"的判断问题(issue#2857@Github)
* 【core  】      修复FileTypeUtil判断wav后缀的录音文件类型不能匹配问题(pr#2834@Github)
* 【core  】      修复FileUtil的rename在newName与原文件夹名称一样时,文件夹会被删除问题(issue#2845@Github)
* 【core  】      修复IoUtil.readBytes使用SocketInputStream读取不完整问题(issue#I6AT49@Gitee)
* 【core  】      修复ClassScanner自定义classload无效问题(issue#I68TV2@Gitee)
* 【core  】      【重要】删除XmlUtil.readObjectFromXml方法,避免漏洞(issue#2855@Github)
* 【core  】      修复Ipv4Util.list()方法的bug(pr#929@Gitee)
* 【poi   】      修复“sax方式读取excel2003版本,会调用两次doAfterAllAnalysed方法”问题。(pr#919@Gitee)

-------------------------------------------------------------------------------------------------------------

# 5.8.11 (2022-12-27)

### 🐣新特性
* 【core  】      CharUtil.isBlankChar增加\u180e(pr#2738@Github)
* 【core  】      SyncFinisher线程同步结束器添加立即结束方法(pr#879@Gitee)
* 【core  】      HtmlUtil中escape方法,增加不断开空格(nbsp)转译,防止xss攻击(pr#2755@Github)
* 【extra 】      修正sftp.cd方法 方法注释和实际效果不符(issue#2758@Github)
* 【core  】      修改PhoneUtil容易歧义的注释(issue#I63GWK@Gitee)
* 【crypto】      KeyUtil中的读取KeyStore文件的方法增加全局Provider(issue#I6796G@Gitee)
* 【extra 】      CompressUtil 新增 stripComponents 参数(pr#904@Gitee)
* 【extra 】      ServletUtil和JakartaServletUtil新增获取所有响应头的方法(pr#2828@Github)
* 【core  】      BooleanUtil增加toString重载(pr#2816@Github)

### 🐞Bug修复
* 【json  】      修复普通byte数组转JSONArray时的异常(pr#875@Gitee)
* 【core  】      修复ArrayUtil.insert()不支持原始类型数组的问题(pr#874@Gitee)
* 【core  】      修复HexUtil.isHexNumber()判断逻辑超出long的精度问题(issue#I62H7K@Gitee)
* 【core  】      修复BiMap中未重写computeIfAbsent和putIfAbsent导致双向查找出问题(issue#I62X8O@Gitee)
* 【json  】      修复JSON解析栈溢出部分问题(issue#2746@Github)
* 【json  】      修复getMultistageReverseProxyIp未去除空格问题(issue#I64P9J@Gitee)
* 【db    】      修复NamedSql中in没有判断大小写问题(issue#2792@Github)
* 【core  】      修复ZIP bomb漏洞(issue#2797@Github)
* 【core  】      修复JSONXMLSerializer将Json转为XML时,遇到嵌套需要递归情况时会丢失contentKeys问题(pr#903@Gitee)
* 【db    】      修复使用mariadb通过jdbcurl创建SimpleDataSource报NullPointException(pr#900@Gitee)
* 【core  】      修复UrlBuilder中参数中包括"://"判断错误问题(pr#898@Gitee)
* 【core  】      修复IndexedComparator导致的数据错乱问题(ExcelWriter使用部分别名导致字段丢失)(issue#I66Z6B@Gitee)
* 【crypto】      修复sm2构造方法NullPointerException(pr#2820@Github)
* 【core  】      修复ConverterRegistry中无效加载导致的问题(issue#2812@Github)
* 【core  】      修复CoordinateUtil坐标转换参数错误(pr#895@Gitee)

-------------------------------------------------------------------------------------------------------------

# 5.8.10 (2022-11-17)

### 🐣新特性
* 【http  】      HttpResponse增加getFileNameFromDisposition方法(pr#2676@Github)
* 【core  】      FileUtil.copy,当来源为文件时,返回文件而非目录(issue#I5YCVL@Gitee)
* 【db    】      DialectFactory增加identifyDriver重载(issue#I5YWI6@Gitee)
* 【core  】      去除ClassloaderUtil的Cache(issue#I5YWI6@Gitee)
* 【core  】      ClassScanner 增加忽略加载错误类的扫描方法(pr#855@Gitee)
* 【core  】      DateUtil和LocalDateTimeUtil添加区间退化为点,点与区间,点与点之间关系判断。(pr#2725@Github)
* 【http  】      UserAgentUtil增加对钉钉PC端的支持(issue#I60UOP@Gitee)
* 【extra 】      兼容ZipArchiveInputStream多参数情况(issue#2736@Github)

### 🐞Bug修复
* 【db    】      修复分页时order by截断问题(issue#I5X6FM@Gitee)
* 【core  】      修复Partition计算size除数为0报错问题(pr#2677@Github)
* 【core  】      由于对于ASCII的编码解码有缺陷,且这种BCD实现并不规范,因此BCD标记为弃用(issue#I5XEC6@Gitee)
* 【core  】      修复IoUtil.copyByNIO方法写出时没有flush的问题
* 【core  】      修复TreeBuilder中使用HashMap导致默认乱序问题(issue#I5Z8C5@Gitee)
* 【core  】      修复StrUtil.subWithLength负数问题(issue#I5YN49@Gitee)
* 【core  】      修复DefaultTrustManager空指针问题(issue#2716@Github)
* 【core  】      修复时间轮添加任务线程安全问题(pr#2712@Github)
* 【core  】      修复 BeanUtil#copyProperties 源对象与目标对象都是 Map 时设置忽略属性无效问题(pr#2698@Github)
* 【core  】      修复ChineseDate传入农历日期非闰月时获取公历错误问题(issue#I5YB1A@Gitee)
* 【core  】      修复key为弱引用 value为强引用 会导致key无法被回收 弱引用失效问题(pr#2723@Github)
* 【core  】      修复BeanUtil.copyProperties 包含EnumSet ,类型转换异常问题(pr#2684@Github)
* 【extra 】      修复Ftp.uploadFileOrDirectory上传目录错误调用错误问题(issue#I5R2DE@Gitee)
* 【extra 】      修复字节数组转float 返回类型却是double的bug(pr#867@Gitee)

-------------------------------------------------------------------------------------------------------------

# 5.8.9 (2022-10-22)

### 🐣新特性
* 【core   】     DateUtil增加isLastDayOfMonth、getLastDayOfMonth方法(pr#824@Gitee)
* 【core   】     AnnotationUtil类支持Lambda获取某注解属性值(pr#827@Gitee)
* 【core   】     CharUtil.isBlank添加Hangul Filler字符(issue#I5UGSQ@Gitee)
* 【poi    】     优化合并单元格读取(issue#I5UJZ1@Gitee)
* 【extra  】     增加QLExpress支持(issue#2653@Github)
* 【core   】     UrlBuilder增加getPortWithDefault方法(pr#835@Gitee)
* 【core   】     FuncKeyMap的子类,传入可被序列化的keyFunc(pr#838@Gitee)
* 【extra  】     SpringUtil支持SpringBoot3自动配置(pr#839@Gitee)
* 【core   】     CollectorUtil添加支持对值集合进行映射的分组方法(pr#844@Gitee)
* 【core  】      FileTypeUtil增加ppt识别(issue#2663@Github)

### 🐞Bug修复
* 【poi    】     修复ExcelReader读取只有标题行报错问题(issue#I5U1JA@Gitee)
* 【http   】     修复Http重定向时相对路径导致的问题(issue#I5TPSY@Gitee)
* 【http   】     修复Http重定全局设置无效问题(pr#2639@Github)
* 【core   】     修复ReUtil.replaceAll替换变量错误问题(pr#2639@Github)
* 【core   】     修复FileNameUtil.mainName二级扩展名获取错误问题(issue#2642@Github)
* 【cache  】     修复LRUCache移除事件监听失效问题(issue#2647@Github)
* 【core   】     修复MapToMap中ignoreNullValue无效问题(issue#2647@Github)
* 【core   】     修复ReflectUtil.invokeRaw方法转换失败抛出异常问题(pr#837@Gitee)
* 【core   】     修复TableMap没有default方法导致的问题(issue#I5WMST@Gitee)

-------------------------------------------------------------------------------------------------------------

# 5.8.8 (2022-09-26)

### 🐣新特性
* 【core   】     StreamUtil.of方法新增对 Iterator 支持;StreamUtil.of(Iterable) 方法优化(pr#807@Gitee)
* 【core   】     增加.wgt格式的MimeType(pr#2617@Github)
* 【core   】     EnumUtil.getBy增加带默认值重载(issue#I5RZU6@Gitee)
* 【core   】     ModifierUtil和ReflectUtil增加removeFinalModify(pr#810@Gitee)
* 【core   】     AbsCollValueMap添加removeValue和removeValues方法,用于list value值移除(pr#813@Gitee)
* 【extra  】     hutool-extra ftp 支持上传文件或目录(pr#821@Gitee)
* 【core   】     CharsetDetector增加默认识别的长度(issue#2547@Github)

### 🐞Bug修复
* 【core   】     修复FileNameUtil.cleanInvalid无法去除换行符问题(issue#I5RMZV@Gitee)
* 【core   】     修复murmur3_32实现错误(pr#2616@Github)
* 【core   】     修复PunyCode处理域名的问题(pr#2620@Github)
* 【core   】     修复ObjectUtil.defaultIfNull去掉误加的deprecated(issue#I5SIZT@Gitee)
* 【core   】     修复ReflectUtil 反射方法中桥接判断问题(issue#2625@Github)
* 【poi    】     修复ExcelWriter导出List<Map>引起的个数混乱问题(issue#2627@Github)
* 【poi    】     修复ExcelReader读取时间变成12小时形式问题(issue#I5Q1TW@Gitee)
* 【db     】     修复DB工具分页查询的时候oracle数据库会把ROWNUM_也带出来问题(issue#2618@Github)
* 【crypto 】     修复部分环境下使用 Bouncy Castle可能的JCE cannot authenticate the provider BC问题(issue#2631@Github)

-------------------------------------------------------------------------------------------------------------

# 5.8.7 (2022-09-15)

### 🐣新特性
* 【core   】     BooleanUtil的andOfWrap和orOfWrap()忽略null(issue#2599@Github)
* 【jwt    】     优化JWT自动识别header中的算法,并可自定义header中key的顺序(issue#I5QRUO@Gitee)
* 【core   】     IdcardUtil增加convert18To15方法(issue#I5QYCP@Gitee)
* 【core   】     新增AnsiColors(改自Spring Boot)、AnsiColorWrapper,优化QrCodeUtil(pr#778@Gitee)
* 【core   】     TemplateUtil的实现类增加getRawEngine方法(issues#2530@Github)
* 【core   】     ImgUtil中颜色相关方法剥离到ColorUtil中
* 【core   】     增加SafeConcurrentHashMap

### 🐞Bug修复
* 【core   】     修复ObjectUtil.defaultIfXXX中NPE问题(pr#2603@Github)
* 【db     】     修复Hive2驱动无法识别问题(issue#2606@Github)
* 【core   】     修复computeIfAbsent问题(issue#I5PTN3@Gitee)
* 【extra  】     修复Ftp中路径问题(issue#I5R2DE@Gitee)
* 【core   】     修复ConcurrentHashMap.computeIfAbsent缺陷导致的问题
* 【core   】     修复DateUtil.parseUTC时对-的处理问题(issue#2612@Github)
* 【core   】     修复Convert.chineseMoneyToNumber角分丢失问题(issue#2611@Github)

-------------------------------------------------------------------------------------------------------------

# 5.8.6 (2022-09-05)

### ❌不兼容特性
* 【json   】     由于设计缺陷,导致JSONObject#write方法中Filter中key的泛型不得已变动为Object,以解决无法递归的bug(issue#I5OMSC@Gitee)

### 🐣新特性
* 【core   】     CollUtil新增addIfAbsent方法(pr#750@Gitee)
* 【core   】     DateUtil.parseUTC支持只有时分的格式(issue#I5M6DP@Gitee)
* 【core   】     NumberUtil.parseInt忽略科学计数法(issue#I5M55F@Gitee)
* 【core   】     IterUtil.getFirst优化(pr#753@Gitee)
* 【core   】     增加Tree add 类型校验(pr#2542@Github)
* 【core   】     增加PunyCode处理完整域名(pr#2543@Github)
* 【core   】     增加替换字符串中第一个指定字符串和最后一个指定字符串方法(pr#2533@Github)
* 【jwt    】     JWT补充部分算法(pr#2546@Github)
* 【core   】     NumberUtil.roundStr() 修改为使用toPlainString(pr#775@Gitee)
* 【extra  】     QrCodeUtil新增SVG格式、Ascii Art字符画格式(pr#763@Gitee)
* 【jwt    】     JWTUtil的parseToken增加空值异常抛出(issue#I5OCQB@Gitee)
* 【extra  】     resource.loader等过期参数替换(issue#2571@Github)
* 【core   】     添加ObjectUtil的别名工具类ObjUtil
* 【core   】     扩展LocalDateTimeUtil.isIn方法使用场景(pr#2589@Github)
* 【core   】     MapUtil增加根据entry分组(pr#2591@Github)
* 【core   】     优化 getProcessorCount 潜在的获取不到的问题(pr#792@Gitee)
* 【core   】     ImgUtil增加sliceByRowsAndCols重载方法支持自定义图片格式(pr#793@Gitee)
* 
### 🐞Bug修复
* 【http   】     修复https下可能的Patch、Get请求失效问题(issue#I3Z3DH@Gitee)
* 【core   】     修复RandomUtil#randomString 入参length为负数时报错问题(issue#2515@Github)
* 【core   】     修复SecureUtil传入null的key抛出异常问题(pr#2521@Github)
* 【core   】     修复UrlBuilder的toURI方法将url重复编码(issue#2503@Github)
* 【core   】     修复CollUtil.lastIndexOf序号错误问题
* 【core   】     修复zip被识别成jar和apk被识别成jar或zip的问题(pr#2548@Github)
* 【core   】     修复UrlBuilder.addPath 方法传入非有效路径字符串时,会出现空指针异常的问题(issue#I5O4ML@Gitee)
* 【core   】     修复FilterIter当参数filter为空时存在问题(issue#I5OG7U@Gitee)
* 【poi    】     修复Excel读取提示信息错误(issue#I5OSFC@Gitee)
* 【json   】     解决JSONObject#write无法递归的bug(issue#I5OMSC@Gitee)
* 【json   】     修复DayOfWeek转json异常问题(issue#2572@Github)
* 【extra  】     Ftp方法isDir和exist修复及改进(pr#2574@Github)
* 【json   】     修复JSON反序列化时,引用字段类型的自定义JsonDeserializer无效(issue#2555@Github)

-------------------------------------------------------------------------------------------------------------

# 5.8.5 (2022-07-29)

### ❌不兼容特性
* 【core   】     合成注解相关功能重构,增加@Link及其子注解(pr#702@Gitee)

### 🐣新特性
* 【core   】     NumberUtil新增isIn方法(pr#669@Gitee)
* 【core   】     修复注解工具类getAnnotations的NPE问题,注解扫描器添新功能(pr#671@Gitee)
* 【core   】     合成注解SyntheticAnnotation提取为接口,并为实现类添加注解选择器和属性处理器(pr#678@Gitee)
* 【core   】     增加BeanValueProvider(issue#I5FBHV@Gitee)
* 【core   】     Convert工具类中,新增中文大写数字金额转换为数字工具方法(pr#674@Gitee)
* 【core   】     新增CollectorUtil.reduceListMap()(pr#676@Gitee)
* 【core   】     CollStreamUtil为空返回空的集合变为可编辑(pr#681@Gitee)
* 【core   】     增加StrUtil.containsAll(pr#2437@Github)
* 【core   】     ForestMap添加getNodeValue方法(pr#699@Gitee)
* 【http   】     优化HttpUtil.isHttp判断,避免NPE(pr#698@Gitee)
* 【core   】     修复Dict#containsKey方法没区分大小写问题(pr#697@Gitee)
* 【core   】     增加比较两个LocalDateTime是否为同一天(pr#693@Gitee)
* 【core   】     增加TemporalAccessorUtil.isIn、LocalDateTimeUtil.isIn(issue#I5HBL0@Gitee)
* 【core   】     ReUtil增加getAllGroups重载(pr#2455@Github)
* 【core   】     PageUtil#totalPage增加totalCount为long类型的重载方法(pr#2442@Github)
* 【crypto 】     PemUtil.readPemPrivateKey支持pkcs#1格式,增加OpensslKeyUtil(pr#2456@Github)
* 【core   】     添加了通用的注解扫描器 `GenericAnnotationScanner`,并在 `AnnotationScanner` 接口中统一提供了提前配置好的扫描器静态实例(pr#715@Github)
* 【json   】     JSONConfig增加允许重复key配置,解决不规整json序列化的问题(pr#720@Github)
* 【core   】     完善了codec包下一些方法的入参空校验(pr#719@Gitee)
* 【extra  】     完善QrCodeUtil对于DATA_MATRIX生成的形状随机不可指定的功能(pr#722@Gitee)
* 【core   】     修改NetUtil.ipv6ToBigInteger,原方法标记为过期(pr#2485@Github)
* 【core   】     ZipUtil新增zip文件解压大小限制,防止zip炸弹(pr#726@Gitee)
* 【core   】     CompressUtil增加压缩和解压tgz(.tar.gz)文件(issue#I5J33E@Gitee)
* 
### 🐞Bug修复
* 【core   】     修复CollUtil里面关于可变参数传null造成的crash问题(pr#2428@Github)
* 【socket 】     修复异常socket没有关闭问题(pr#690@Gitee)
* 【core   】     修复当时间戳为Integer时时间转换问题(pr#2449@Github)
* 【core   】     修复bmp文件判断问题(issue#I5H93G@Gitee)
* 【core   】     修复CombinationAnnotationElement造成递归循环(issue#I5FQGW@Gitee)
* 【core   】     修复Dict缺少putIfAbsent、computeIfAbsent问题(issue#I5FQGW@Gitee)
* 【core   】     修复Console.log应该把异常信息输出位置错误问题(pr#716@Gitee)
* 【core   】     修复UrlBuilder无法配置末尾追加“/”问题(issue#2459@Github)
* 【core   】     修复SystemPropsUtil.getBoolean方法应该只有值为true时才返回true,其他情况都应该返回false(pr#717@Gitee)
* 【core   】     修复isBase64判断不准确的问题(pr#727@Gitee)
* 【core   】     修复Convert#toMap默认转成HashMap的问题(pr#729@Gitee)

-------------------------------------------------------------------------------------------------------------

# 5.8.4 (2022-06-27)

### 🐣新特性
* 【extra  】     Sftp增加构造重载,支持超时(pr#653@Gitee)
* 【core   】     BeanUtil增加isCommonFieldsEqual(pr#653@Gitee)
* 【json   】     修改byte[]统一转换为数组形式(issue#2377@Github)
* 【http   】     HttpResponse增加body方法,支持自定义返回内容(pr#655@Gitee)
* 【core   】     修改ObjectUtil.isNull逻辑(issue#I5COJF@Gitee)
* 【core   】     BlockPolicy增加线程池关闭后的逻辑(pr#660@Gitee)
* 【core   】     Ipv4Util增加ipv4ToLong重载(pr#661@Gitee)
* 【core   】     LocalDateTimeUtil.parse改为blank检查(issue#I5CZJ9@Gitee)
* 【core   】     BeanPath在空元素时默认加入map,修改根据下标类型赋值List or map(issue#2362@Github)
* 【core   】     localAddressList 添加重构方法(pr#665@Gitee)
* 【cron   】     从配置文件加载任务时,自定义ID避免重复从配置文件加载(issue#I5E7BM@Gitee)
* 【core   】     新增注解扫描器和合成注解(pr#654@Gitee)
* 
### 🐞Bug修复
* 【extra  】     修复createExtractor中抛出异常后流未关闭问题(pr#2384@Github)
* 【core   】     修复CsvData.getHeader没有判空导致空指针问题(issue#I5CK7Q@Gitee)
* 【core   】     修复单字母转换为数字的问题(issue#I5C4K1@Gitee)
* 【core   】     修复IterUtil.filter无效问题
* 【core   】     修复NumberUtil传入null,返回了true(issue#I5DTSL@Gitee)
* 【core   】     修复NumberUtil.isDouble问题(pr#2400@Github)
* 【core   】     修复ZipUtil使用append替换文件时,父目录存在报错问题(issue#I5DRU0@Gitee)

-------------------------------------------------------------------------------------------------------------

# 5.8.3 (2022-06-10)

### 🐣新特性
* 【extra  】     mail增加writeTimeout参数支持(issue#2355@Github)
* 【core   】     FileTypeUtil增加pptx扩展名支持(issue#I5A0GO@Gitee)
* 【core   】     IterUtil.get增加判空(issue#I5B12A@Gitee)
* 【core   】     FileTypeUtil增加webp类型判断(issue#I5BGTF@Gitee)
### 🐞Bug修复
* 【core   】     修复NumberUtil.isXXX空判断错误(issue#2356@Github)
* 【core   】     修复Convert.toSBC空指针问题(issue#I5APKK@Gitee)
* 【json   】     修复Bean中存在bytes,无法转换问题(issue#2365@Github)
* 【core   】     ArrayUtil.setOrAppend()传入空数组时,抛出异常(issue#I5APJE@Gitee)
* 【extra  】     JschSessionPool修复空指针检查问题(issue#I5BK4D@Gitee)
* 【core   】     修复使用ValueProvider中setFieldMapping无效问题(issue#I5B4R7@Gitee)
* 【json   】     修复byte[]作为JSONArray构造问题(issue#2369@Github)

-------------------------------------------------------------------------------------------------------------

# 5.8.2 (2022-05-27)

### 🐣新特性
* 【core   】     BeanUtil拷贝对象增加空检查(issue#I58CJ3@Gitee)
* 【db     】     Column#size改为long
* 【core   】     ClassUtil增加isInterface等方法(pr#623@Gitee)
* 【socket 】     增加ChannelUtil

### 🐞Bug修复
* 【extra  】     修复SshjSftp初始化未能代入端口配置问题(issue#2333@Github)
* 【core   】     修复Convert.numberToSimple转换问题(issue#2334@Github)
* 【core   】     修复TemporalAccessorConverter导致的转换问题(issue#2341@Github)
* 【core   】     修复NumberUtil除法空指针问题(issue#I58XKE@Gitee)
* 【core   】     修复CAR_VIN正则(pr#624@Gitee)
* 【db     】     修复count查询别名问题(issue#I590YB@Gitee)
* 【json   】     修复json中byte[]无法转换问题(issue#I59LW4@Gitee)
* 【core   】     修复NumberUtil.isXXX未判空问题(issue#2350@Github)
* 【core   】     修复Singleton中ConcurrentHashMap在JDK8下的bug引起的可能的死循环问题(issue#2349@Github)

-------------------------------------------------------------------------------------------------------------

# 5.8.1 (2022-05-16)

### 🐣新特性
* 【core   】     BooleanUtil增加toBooleanObject方法(issue#I56AG3@Gitee)
* 【core   】     CharSequenceUtil增加startWithAnyIgnoreCase方法(issue#2312@Github)
* 【system 】     JavaInfo增加版本(issue#2310@Github)
* 【core   】     新增CastUtil(pr#2313@Github)
* 【core   】     ByteUtil新增bytesToShort重载(issue#I57FA7@Gitee)
* 【core   】     ReflectUtil.invoke方法抛出运行时异常增加InvocationTargetRuntimeException(issue#I57GI2@Gitee)
* 【core   】     NumberUtil.parseNumber支持16进制(issue#2328@Github)

### 🐞Bug修复
* 【core   】     MapUtil.map对null友好,且修复了测试用例中分组问题(pr#614@Gitee)
* 【core   】     修复BeanUtil.beanToMap中properties为null的空指针问题(issue#2303@Github)
* 【db     】     DialectName中修正为POSTGRESQL(issue#2308@Github)
* 【core   】     修复BeanPath无法识别引号内的内容问题(issue#I56DE0@Gitee)
* 【core   】     修复Map.entry方法返回可变不可变相反问题
* 【jwt    】     修复jwt的过期容忍时间问题(issue#2329@Gitee)

-------------------------------------------------------------------------------------------------------------

# 5.8.0 (2022-05-06)

### ❌不兼容特性
* 【extra  】     升级jakarta.validation-api到3.x,包名变更导致不能向下兼容
* 【core   】     BeanUtil删除了beanToMap(Object)方法,因为有可变参数的方法,这个删除可能导致直接升级找不到方法,重新编译项目即可。

### 🐣新特性
* 【core   】     Singleton增加部分方法(pr#609@Gitee)
* 【core   】     BeanUtil增加beanToMap重载(pr#2292@Github)
* 【core   】     Assert增加对应的equals及notEquals方法(pr#612@Gitee)
* 【core   】     Assert增加对应的equals及notEquals方法(pr#612@Gitee)
* 【core   】     DigestUtil增加sha512方法(issue#2298@Github)

### 🐞Bug修复
* 【db     】     修复RedisDS无法设置maxWaitMillis问题(issue#I54TZ9@Gitee)

-------------------------------------------------------------------------------------------------------------

# 5.8.0.M4 (2022-04-27)

### ❌不兼容特性
* 【json   】     【可能兼容问题】JSONArray删除部分构造
* 【json   】     【可能兼容问题】JSONTokener使用InputStream作为源时,由系统编码变更为UTF-8

### 🐣新特性
* 【core   】     BeanUtil增加toBean重载(pr#598@Gitee)
* 【json   】     新增JSONParser
* 【json   】     JSON新增在解析时的过滤方法(issue#I52O85@Gitee)
* 【core   】     添加ArrayUtil.distinct、CollUtil.distinct重载(issue#2256@Github)
* 【core   】     添加TransMap、FuncMap、ReferenceConcurrentMap、WeakConcurrentMap
* 【json   】     添加ObjectMapper
* 【core   】     CHINESE_NAME正则条件放宽(pr#599@Gitee)
* 【extra  】     增加JakartaServletUtil(issue#2271@Github)
* 【poi    】     ExcelWriter支持重复别名的数据写出(issue#I53APY@Gitee)
* 【core   】     增加Hashids(issue#I53APY@Gitee)
* 【core   】     ReflectUtil.newInstanceIfPossible添加枚举、数组等类型的默认实现
* 【core   】     CombinationAnnotationElement增加过滤(pr#605@Gitee)
* 【all    】     精简CHANGELOG
* 【core   】     新增AnsiEncoder
* 【log    】     新增彩色日式输出风格ConsoleColorLog(pr#607@Gitee)

### 🐞Bug修复
* 【core   】     修复StrUtil.firstNonX非static问题(issue#2257@Github)
* 【core   】     修复SimpleCache线程安全问题
* 【core   】     修复ClassLoaderUtil中可能的关联ClassLoader错位问题
* 【extra  】     修复Sftp错误内容解析大小写问题(issue#I53GPI@Gitee)
* 【core   】     修复当文件内容为空时,会报异常问题(pr#602@Gitee)

-------------------------------------------------------------------------------------------------------------

# 5.8.0.M3 (2022-04-14)

### ❌不兼容特性
* 【core   】     StreamProgress#progress方法参数变更为2个(pr#594@Gitee)
* 【core   】     SimpleCache的raw key使用Mutable
* 【core   】     ArrayUtil.join删除已经弃用的无用原始类型重载
* 【core   】     删除Holder类,ReUtil.extractMultiAndDelPre方法参数改为Mutable

### 🐣新特性
* 【core   】     CopyOptions支持以Lambda方式设置忽略属性列表(pr#590@Gitee)
* 【core   】     增加中文姓名正则及其校验(pr#592@Gitee)
* 【core   】     Snowflake支持sequence使用随机数(issue#I51EJY@Gitee)
* 【core   】     JarClassLoader增加构造(pr#593@Gitee)
* 【core   】     增加Pid,以便获取单例pid
* 【core   】     Img增加全覆盖水印pressTextFull(pr#595@Gitee)
* 【core   】     ByteUtil.numberToBytes增加Byte判断(issue#2252@Github)
* 【core   】     CopyOptions添加converter,可以自定义非全局类型转换
* 【core   】     添加了设置从绝对路径加载数据库配置文件的功能(pr#2253@Github)

### 🐞Bug修复
* 【core   】     修复UserAgentUtil识别Linux出错(issue#I50YGY@Gitee)
* 【poi    】     修复ExcelWriter.getDisposition方法生成错误(issue#2239@Github)
* 【core   】     修复UrlBuilder重复编码的问题(issue#2243@Github)
* 【http   】     修复HttpRequest中urlQuery,处理get请求参数的时候会导致空指针异常(pr#2248@Github)
* 【core   】     修复SimpleCache在get时未使用读锁可能导致的问题
* 【aop    】     修复JdkInterceptor before 方法拦截 return false 仍然执行了 after 的拦截问题(issue#I5237G@Gitee)

-------------------------------------------------------------------------------------------------------------

# 5.8.0.M2 (2022-04-02)

### ❌不兼容特性
* 【extra  】     【可能兼容问题】BeanCopierCache的key结构变更
* 【http   】     【可能兼容问题】HttpInterceptor增加泛型标识,HttpRequest中配置汇总于HttpConfig
* 【core   】     【可能兼容问题】UrlQuery.addQuery参数2从String变更为Object
* 【core   】     【可能兼容问题】WorkbookUtil.createBook实现改为WorkbookFactory.create

### 🐣新特性
* 【core   】     MapUtil增加entry、ofEntries方法
* 【core   】     ZipWriter增加add方法重载
* 【core   】     IterUtil增加filtered,增加FilterIter(issue#2228)
* 【core   】     增加NodeListIter、ResettableIter
* 【crypto 】     HmacAlgorithm增加SM4CMAC(issue#2206@Github)
* 【http   】     增加HttpConfig,响应支持拦截(issue#2217@Github)
* 【core   】     增加BlockPolicy,ThreadUtil增加newFixedExecutor方法(pr#2231@Github)
* 【crypto 】     BCMacEngine、Mac、CBCBlockCipherMacEngine、SM4MacEngine(issue#2206@Github)

### 🐞Bug修复
* 【core   】     IdcardUtil#getCityCodeByIdCard位数问题(issue#2224@Github)
* 【core   】     修复urlWithParamIfGet函数逻辑问题(issue#I50IUD@Gitee)
* 【core   】     修复IoUtil.readBytes限制长度读取问题(issue#2230@Github)
* 【http   】     修复HttpRequest中编码对URL无效的问题(issue#I50NHQ@Gitee)
* 【poi    】     修复读取excel抛NPE错误(pr#2234@Github)

-------------------------------------------------------------------------------------------------------------

# 5.8.0.M1 (2022-03-28)

### ❌不兼容特性
* 【db     】     【不向下兼容  】增加MongoDB4.x支持返回MongoClient变更(pr#568@Gitee)
* 【json   】     【可能兼容问题】修改JSONObject结构,继承自MapWrapper
* 【core   】     【可能兼容问题】BeanCopier重构,新建XXXCopier,删除XXXValueProvider
* 【core   】     【可能兼容问题】URLEncoder废弃,URLEncoderUtil使用RFC3986
* 【core   】     【可能兼容问题】Base32分离编码和解码,以便减少数据加载,支持Hex模式
* 【core   】     【可能兼容问题】Base58分离编码和解码
* 【core   】     【可能兼容问题】Base62分离编码和解码,增加inverted模式支持
* 【core   】     【兼容问题   】PunyCode参数由String改为Charsequence
* 【cron   】     【可能兼容问题】SimpleValueParser改名为AbsValueParser,改为abstract
* 【poi    】     【可能兼容问题】ExcelUtil.getBigWriter返回值改为BigExcelWriter
* 【core   】     【可能兼容问题】Opt.ofEmptyAble参数由List改为Collection子类(pr#580@Gitee)
* 【json   】     【可能兼容问题】JSON转Bean时,使用JSON本身的相关设置,而非默认(issue#2212@Github)
* 【json   】     【可能兼容问题】JSONConfig中isOrder废弃,默认全部有序

### 🐣新特性
* 【http   】     HttpRequest.form采用TableMap方式(issue#I4W427@Gitee)
* 【core   】     AnnotationUtil增加getAnnotationAlias方法(pr#554@Gitee)
* 【core   】     FileUtil.extName增加对tar.gz特殊处理(issue#I4W5FS@Gitee)
* 【crypto 】     增加XXTEA实现(issue#I4WH2X@Gitee)
* 【core   】     增加Table实现(issue#2179@Github)
* 【core   】     增加UniqueKeySet(issue#I4WUWR@Gitee)
* 【core   】     阿拉伯数字转换成中文对发票票面金额转换的扩展(pr#570@Gitee)
* 【core   】     ArrayUtil增加replace方法(pr#570@Gitee)
* 【core   】     CsvReadConfig增加自定义标题行行号(issue#2180@Github)
* 【core   】     FileAppender优化初始List大小(pr#2197@Github)
* 【core   】     Base32增加pad支持(pr#2195@Github)
* 【core   】     Dict增加setFields方法(pr#578@Gitee)
* 【db     】     新加db.meta的索引相关接口(pr#563@Gitee)
* 【db     】     Oracle中Column#typeName后的长度去掉(pr#563@Gitee)
* 【poi    】     优化ExcelReader,采用只读模式(pr#2204@Gitee)
* 【poi    】     优化ExcelBase,将alias放入
* 【poi    】     优化ExcelBase,将alias放入
* 【core   】     改进StrUtil#startWith、endWith性能
* 【cron   】     增加CronPatternParser、MatcherTable
* 【http   】     GlobalHeaders增加系统属性allowUnsafeServerCertChange、allowUnsafeRenegotiation
* 【http   】     UserAgentUtil 解析,增加MiUI/XiaoMi浏览器判断逻辑(pr#581@Gitee)
* 【core   】     FileAppender添加锁构造(pr#2211@Github)
* 【poi    】     ExcelReader增加构造(pr#2213@Github)
* 【core   】     MapUtil提供change函数,EnumUtil提供getBy函数,通过lambda进行枚举字段映射(pr#583@Gitee)
* 【core   】     CompareUtil增加comparingIndexed(pr#585@Gitee)
* 【db     】     DruidDataSource构建时支持自定义参数(issue#I4ZKCW@Gitee)
* 【poi    】     ExcelWriter增加addImg重载(issue#2218@Github)
* 【bloomFilter】 增加FuncFilter
* 【http   】     增加GlobalInterceptor(issue#2217)

### 🐞Bug修复
* 【core   】     修复ObjectUtil.hasNull传入null返回true的问题(pr#555@Gitee)
* 【core   】     修复NumberConverter对数字转换的问题(issue#I4WPF4@Gitee)
* 【core   】     修复ReflectUtil.getMethods获取接口方法问题(issue#I4WUWR@Gitee)
* 【core   】     修复NamingCase中大写转换问题(pr#572@Gitee)
* 【http   】     修复GET重定向时,携带参数问题(issue#2189@Github)
* 【core   】     修复FileUtil、FileCopier相对路径获取父路径错误问题(pr#2188@Github)
* 【core   】     修复CopyOptions中fieldNameEditor无效问题(issue#2202@Github)
* 【json   】     修复JSON对Map.Entry的解析问题
* 【core   】     修复MapConverter中map与map转换兼容问题
* 【poi    】     解决sax读取时,POI-5.2.x兼容性问题
* 【core   】     修复判断两段时间区间交集问题(pr#2210@Github)
* 【http   】     修复标签误删问题(issue#I4Z7BV@Gitee)
* 【core   】     修复Win下文件名带*问题(pr#584@Gitee)
* 【core   】     FileUtil.getMimeType增加rar、7z支持(issue#I4ZBN0@Gitee)
* 【json   】     JSON修复transient设置无效问题(issue#2212@Github)
* 【core   】     修复IterUtil.getElementType获取结果为null的问题(issue#2222@Github)
* 【core   】     修复农历转公历在闰月时错误(issue#I4ZSGJ@Gitee)

# 5.7.x 或更早版本
* [https://gitee.com/chinabugotech/hutool/blob/v5-master/CHANGELOG_5.0-5.7.md](https://gitee.com/chinabugotech/hutool/blob/v5-master/CHANGELOG_5.0-5.7.md)

================================================
FILE: CHANGELOG_5.0-5.7.md
================================================

# 🚀Changelog

# 5.7.22 (2022-03-01)

### 🐣新特性
* 【poi    】     ExcelUtil.readBySax增加对POI-5.2.0的兼容性(issue#I4TJF4@Gitee)
* 【extra  】     Ftp增加构造(issue#I4TKXP@Gitee)
* 【core   】     GenericBuilder支持Map构建(pr#540@Github)
* 【json   】     新增TemporalAccessorSerializer
* 【core   】     使多个xxxBuilder实现Builder接口,扩展CheckedUtil(pr#545@Gitee)
* 【core   】     CheckedUtil删除第二个参数为RuntimeException的方法
* 【core   】     FileUtil增加getTotalLines方法
* 【db     】     MetaUtil增加getTableMeta重载(issue#2157@Github)
* 【http   】     增加HttpGlobalConfig.setDecodeUrl(issue#I4U8YQ@Gitee)
* 【core   】     增加Base58(pr#2162@Github)
* 【core   】     增加AntPathMatcher(issue#I4T7K5@Gitee)
* 【core   】     StrJoiner修改toString策略,调用不再修改Appendable
* 【core   】     StrJoiner增加length和merge方法
* 【core   】     CRC16增加getHexValue方法(issue#I4VO3U@Gitee)

### 🐞Bug修复
* 【cache  】     修复ReentrantCache.toString方法线程不安全问题(issue#2140@Github)
* 【core   】     修复SystemPropsUtil.getInt返回long问题(pr#546@Gitee)
* 【crypto 】     修复SM2.getD前导0问题(pr#2149@Github)
* 【core   】     修复ChineseDate在1970年之前农历差一天问题(issue#I4UTPK@Gitee)
* 【core   】     修复CoordinateUtil精准问题及转换bug(pr#551@Gitee)
* 【json   】     修复JSONObject解析XML后没有返回的bug(issue#2160@Github)
* 【extra  】     修复GanymedUtil错误信息读取位置问题(issue#I4VDZ2@Gitee)

-------------------------------------------------------------------------------------------------------------
# 5.7.21 (2022-02-14)

### 🐣新特性
* 【extra  】     增加jetbrick模板支持
* 【extra  】     EmojiUtil增加方法(pr#519@Gitee)
* 【core   】     DateUtil 添加两个日期是否同一周方法(pr#516@Gitee)
* 【db     】     新增条件组,用于处理复杂的where条件(pr#514@Gitee)
* 【core   】     新增LocalDateTimeUtil.weekOfYear(issue#I4RWXC@Gitee)
* 【core   】     Month增加toJdkMonth、getValueBaseOne
* 【core   】     CsvWriter修改规则,去除末尾多余换行符(issue#I4RSQY@Gitee)
* 【core   】     DateUtil增加rangeFunc和rangeConsume(issue#I4RSQY@Gitee)
* 【core   】     DateTime增加setUseJdkToStringStyle方法
* 【core   】     CharSequenceUtil增加replace重载(issue#2122@Github)
* 【core   】     IntMap和LongMap使用位运算快速求解取余运算(pr#2123@Github)
* 【core   】     新增通用builder类:GenericBuilder(pr#526@Gitee)
* 【core   】     新增copySafely方法与mkdirsSafely方法(pr#527@Gitee)
* 【core   】     新增MetroHash(pr#532@Gitee)
* 【core   】     SpringUtil增加publishEvent重载(pr#2139@Github)
* 【core   】     DateUtil增加rangeContains、rangeNotContains(pr#537@Gitee)
* 【core   】     Resource增加isModified默认方法
* 【core   】     增加VfsResource
* 【json   】     JSONConfig增加setKeyComparator、setNatureKeyComparator方法,支持自定义排序(issue#I4RBZ4@Gitee)

### 🐞Bug修复
* 【core   】     修复ChineseDate农历获取正月出现数组越界BUG(issue#2112@Github)
* 【extra  】     修复EmojiUtil.toHtmlHex()方法(pr#519@Gitee)
* 【system 】     修复CpuInfo.getUsed()方法(issue#2116@Github)
* 【dfa    】     修复密集匹配和贪婪匹配冲突问题(issue#2126@Github)
* 【db     】     修复c3p0丢失信息问题(issue#I4T7XZ@Gitee)
* 【http   】     修复Action中HttpExchange没有关闭问题
* 【http   】     修复Action中HttpExchange没有关闭问题

-------------------------------------------------------------------------------------------------------------
# 5.7.20 (2022-01-20)

### 🐣新特性
* 【core   】     增加对null值友好的groupingBy操作的Collector实现,可指定map类型(pr#498@Gitee)
* 【core   】     增加KetamaHash(issue#2084@Github)
* 【crypto 】     增加SignUtil
* 【json   】     JSONGetter增加getBeanList方法
* 【core   】     ObjectUtil 添加三个defaultIfXxxx方法,用于节省CPU及内存损耗(pr#2094@Github)
* 【db     】     增加单条数据原生upsert语义支持(pr#501@Gitee)
* 【core   】     在CollectorUtil提交Collectors.toMap的对null友好实现,避免NPE(pr#502@Gitee)
* 【http   】     增加HttpGlobalConfig.setIgnoreEOFError(issue#2092@Github)
* 【core   】     RandomUtil.randomStringWithoutStr排除字符串兼容大写字母(pr#503@Gitee)
* 【core   】     LocalDateTime增加isOverlap方法(pr#512@Gitee)
* 【core   】     Ipv4Util.getBeginIpLong、getEndIpLong改为public(pr#508@Gitee)
* 
### 🐞Bug修复
* 【core   】     修复setter重载导致匹配错误(issue#2082@Github)
* 【core   】     修复RegexPool汉字匹配范围小问题(pr#2081@Github)
* 【core   】     修复OS中的拼写错误(pr#500@Gitee)
* 【core   】     修复CustomKeyMap的merge失效问题(issue#2086@Github)
* 【core   】     修复FileUtil.appendLines换行问题(issue#I4QCEZ@Gitee)
* 【core   】     修复java.time.Month解析问题(issue#2090@Github)
* 【core   】     修复PathUtil.moveContent移动覆盖导致的问题(issue#I4QV0L@Gitee)
* 【core   】     修复Opt.ofTry中并发环境下线程安全问题(pr#504@Gitee)
* 【core   】     修复PatternFinder中end边界判断问题(issue#2099@Github)
* 【core   】     修复格式化为中文日期时,0被处理为空串(pr#507@Gitee)
* 【core   】     修复UrlPath转义冒号问题(issue#I4RA42@Gitee)

-------------------------------------------------------------------------------------------------------------
# 5.7.19 (2022-01-07)

### 🐣新特性
* 【db     】     优化Condition参数拆分(pr#2046@Github)
* 【core   】     优化ArrayUtil.isAllEmpty性能(pr#2045@Github)
* 【core   】     CharSequenceUtil.replace方法支持增补字符(pr#2041@Github)
* 【extra  】     增加SshjSftp(pr#493@Gitee)
* 【core   】     增加CheckedUtil(pr#491@Gitee)
* 【extra  】     增加Sftp.isDir中的抛异常判断条件(issues#I4P9ED@Gitee)

### 🐞Bug修复
* 【http   】     HttpUtil重定向次数失效问题(issue#I4O28Q@Gitee)
* 【core   】     修复UrlPath空白path多/问题(issue#I49KAL@Gitee)
* 【core   】     修复ServletUtil写出文件时未添加双引号导致逗号等特殊符号引起的问题(issue#I4P1BF@Gitee)
* 【core   】     NumberUtil增加equals重载解决long传入判断问题(pr#2064@Github)
* 【core   】     修复CsvParser行号有误问题(pr#2065@Github)
* 【http   】     修复HttpRequest.of无法自动添加http前缀问题(issue#I4PEYL@Gitee)
* 【core   】     修复 `CharSequenceUtil.brief(str, maxLength)` 方法字符串越界问题,以及 `maxLength` 部分值时结果与预期不符的问题(pr#2068@Github)
* 【core   】     修复NamingCase中转换下划线字母+数字转换问题(issue#2070@Github)
* 【core   】     修复split空判断不一致问题(pr#496@Gitee)
* 【crypto 】     修复SM2.getDHex()前导0丢失,然后导致获取密钥错误(pr#2073@Github)
* 【core   】     修复关于Calculator.conversion()方法EmptyStackException的bug(pr#2076@Github)
* 【core   】     修复StrUtil.subBetweenAll循环bug(issue#I4PT3M@Gitee)

-------------------------------------------------------------------------------------------------------------
# 5.7.18 (2021-12-25)

### 🐣新特性
* 【core   】     新增CollStreamUtil.groupKeyValue(pr#479@Gitee)
* 【core   】     新增DatePattern.createFormatter(pr#483@Gitee)
* 【core   】     增加IdUtil.getSnowflakeNextId(pr#485@Gitee)
* 【log    】     log4j2的编译依赖改为api,core为test依赖(pr#2019@Github)
* 【core   】     Img.scale缩小默认使用平滑模式,增加scale方法重载可选模式(issue#I4MY6X@Gitee)
* 【core   】     excel添加写入图片的方法(pr#486@Gitee)
* 【core   】     增加CollStreamUtil.groupBy(pr#484@Gitee)
* 【core   】     增加CollUtil.setValueByMap(pr#482@Gitee)
* 【core   】     LocalDateTimeUtil增加endOfDay重载(issue#2025@Github)
* 【core   】     IoCopier增加setFlushEveryBuffer方法(issue#2022@Github)
* 
### 🐞Bug修复
* 【core   】     LineReadWatcher#onModify文件清空判断问题(issue#2013@Github)
* 【core   】     修复4位bytes转换float问题(issue#I4M0E4@Gitee)
* 【core   】     修复CharSequenceUtil.replace问题(issue#I4M16G@Gitee)
* 【json   】     修复JSONObject 初始化大小值未被使用问题(issue#2016@Github)
* 【core   】     修复StrUtil.startWith都为null返回错误问题(issue#I4MV7Q@Gitee)
* 【core   】     修复PasswdStrength检测问题(issue#I4N48X@Gitee)
* 【core   】     修复UserAgentUtil解析EdgA无法识别问题(issue#I4MCBP@Gitee)
* 【extra  】     修复Archiver路径前带/问题(issue#I4NS0F@Gitee)
* 【extra  】     修复getMainColor方法中参数rgbFilters无效问题(pr#2034@Github)
* 【core   】     修复ChineseDate无法区分闰月问题(issue#I4NQQW@Gitee)
* 【core   】     修复BeanDesc大小写误判问题(issue#2009@Github)

-------------------------------------------------------------------------------------------------------------
# 5.7.17 (2021-12-09)

### 🐣新特性
* 【core   】     增加AsyncUtil(pr#457@Gitee)
* 【http   】     增加HttpResource(issue#1943@Github)
* 【http   】     增加BytesBody、FormUrlEncodedBody
* 【cron   】     TaskTable.remove增加返回值(issue#I4HX3B@Gitee)
* 【core   】     Tree增加filter、filterNew、cloneTree、hasChild方法(issue#I4HFC6@Gitee)
* 【poi    】     增加ColumnSheetReader及ExcelReader.readColumn,支持读取某一列
* 【core   】     IdCardUtil.isValidCard不再自动trim(issue#I4I04O@Gitee)
* 【core   】     改进TextFinder,支持限制结束位置及反向查找模式
* 【core   】     Opt增加部分方法(pr#459@Gitee)
* 【core   】     增加DefaultCloneable(pr#459@Gitee)
* 【core   】     CollStreamUtil增加是否并行的重载(pr#467@Gitee)
* 【core   】     ResourceClassLoader增加缓存(pr#1959@Github)
* 【crypto 】     增加CipherWrapper,增加setRandom(issue#1958@Github)
* 【core   】     Opt增加ofTry方法(pr#1956@Github)
* 【core   】     DateUtil.toIntSecond标记为弃用(issue#I4JHPR@Gitee)
* 【db     】     Db.executeBatch标记一个重载为弃用(issue#I4JIPH@Gitee)
* 【core   】     增加CharSequenceUtil.subPreGbk重载(issue#I4JO2E@Gitee)
* 【core   】     ReflectUtil.getMethod排除桥接方法(pr#1965@Github)
* 【http   】     completeFileNameFromHeader在使用path为路径时,自动解码(issue#I4K0FS@Gitee)
* 【core   】     CopyOptions增加override配置(issue#I4JQ1N@Gitee)
* 【poi    】     SheetRidReader可以获取所有sheet名(issue#I4JA3M@Gitee)
* 【core   】     AsyncUtil.waitAny增加返回值(pr#473@Gitee)
* 【core   】     Calculator.compare改为private(issue#1982@Github)
* 【core   】     NumberUtil增加isOdd、isEven方法(pr#474@Gitee)
* 【http   】     增加HttpGlobalConfig.setBoundary,删除MultipartBody.BOUNDARY和getContentType(issue#I4KSLY@Gitee)
* 【core   】     DateTime增加setMinimalDaysInFirstWeek(issue#1988@Github)
* 【db     】     Db增加query重载,可支持自定义PreparedStatement,从而支持游标(issue#I4JXWN@Gitee)
* 【cache  】     CacheObj增加getExpiredTime等方法(issue#I4LE80@Gitee)
* 【extra  】     Ftp增加backToPwd方法(issue#2004@Github)
* 【core   】     CollStreamUtil修改集合中null处理问题(pr#478@Gitee)
* 
### 🐞Bug修复
* 【core   】     修复FileResource构造fileName参数无效问题(issue#1942@Github)
* 【cache  】     修复WeakCache键值强关联导致的无法回收问题(issue#1953@Github)
* 【core   】     修复ZipUtil相对路径父路径获取null问题(issue#1961@Github)
* 【http   】     修复HttpUtil.normalizeParams未判空导致的问题(issue#1975@Github)
* 【poi    】     修复读取日期类型的自定义样式单元格时间结果为1899年问题(pr#1977@Github)
* 【poi    】     修复SoapClient参数未使用问题
* 【core   】     修复HashUtil.cityHash128参数未使用问题
* 【core   】     修复DateUtil.formatChineseDate显示问题(issue#I4KK5F@Gitee)
* 【poi    】     修复CellUtil.setCellValueStyle空导致值无法写入问题(issue#1995@Github)
* 【poi    】     修复CellUtil.setComment参数设置错误问题
* 【core   】     修复QueryBuilder解析路径导致的错误(issue#1989@Github)
* 【core   】     修复DateTime.between中DateUnit无效问题
* 【poi    】     修复StyleUtil.getFormat非static问题(issue#I4LGNP@Gitee)
* 【crypto 】     修复SM2.getD返回bytes包含符号位的问题(issue#2001@Github)

-------------------------------------------------------------------------------------------------------------

# 5.7.16 (2021-11-07)

### 🐣新特性
* 【core   】     增加DateTime.toLocalDateTime
* 【core   】     CharSequenceUtil增加normalize方法(pr#444@Gitee)
* 【core   】     MailAccount增加setEncodefilename()方法,可选是否编码附件的文件名(issue#I4F160@Gitee)
* 【core   】     MailAccount中charset增加null时的默认规则
* 【core   】     NumberUtil.compare修正注释说明(issue#I4FAJ1@Gitee)
* 【core   】     增加RFC3986类
* 【extra  】     Sftp增加put和upload重载(issue#I4FGDH@Gitee)
* 【core   】     TemporalUtil增加toChronoUnit、toTimeUnit方法(issue#I4FGDH@Gitee)
* 【core   】     StopWatch增加prettyPrint重载(issue#1910@Github)
* 【core   】     修改RegexPool中Ipv4正则
* 【json   】     Filter改为MutablePair,以便编辑键值对(issue#1921@Github)
* 【core   】     Opt增加peeks方法(pr#445@Gitee)
* 【extra  】     MailAccount中user默认值改为邮箱全称(issue#I4FYVY@Gitee)
* 【core   】     增加CoordinateUtil(pr#446@Gitee)
* 【core   】     DateUtil增加rangeToList重载(pr#1925@Github)
* 【core   】     CollUtil增加safeContains方法(pr#1926@Github)
* 【core   】     ActualTypeMapperPool增加getStrKeyMap方法(pr#447@Gitee)
* 【core   】     TreeUtil增加walk方法(pr#1932@Gitee)
* 【crypto 】     SmUtil增加sm3WithSalt(pr#454@Gitee)
* 【http   】     增加HttpInterceptor(issue#I4H1ZV@Gitee)
* 【core   】     Opt增加flattedMap(issue#I4H1ZV@Gitee)

### 🐞Bug修复
* 【core   】     修复UrlBuilder.addPath歧义问题(issue#1912@Github)
* 【core   】     修复StrBuilder中总长度计算问题(issue#I4F9L7@Gitee)
* 【core   】     修复CharSequenceUtil.wrapIfMissing预定义长度计算问题(issue#I4FDZ2@Gitee)
* 【poi    】     修复合并单元格为日期时,导出单元格数据为数字问题(issue#1911@Github)
* 【core   】     修复CompilerUtil.getFileManager参数没有使用的问题(issue#I4FIO6@Gitee)
* 【core   】     修复NetUtil.isInRange的cidr判断问题(pr#1917@Github)
* 【core   】     修复RegexPool中对URL正则匹配问题(issue#I4GRKD@Gitee)
* 【core   】     修复UrlQuery对于application/x-www-form-urlencoded问题(issue#1931@Github)

-------------------------------------------------------------------------------------------------------------

# 5.7.15 (2021-10-21)

### 🐣新特性
* 【db     】     Db.quietSetAutoCommit增加判空(issue#I4D75B@Gitee)
* 【core   】     增加RingIndexUtil(pr#438@Gitee)
* 【core   】     Assert增加checkBetween重载(pr#436@Gitee)
* 【core   】     ReUtil增加命名分组重载(pr#439@Gitee)
* 【json   】     toString和writer增加Filter(issue#I4DQNQ@Gitee)
* 【core   】     ContentType增加build重载(pr#1898@Github)
* 【bom    】     支持scope=import方式引入(issue#1561@Github)
* 【core   】     新增Hash接口,HashXXX继承此接口
* 【core   】     ZipUtil增加append方法(pr#441@Gitee)
* 【core   】     CollUtil增加重载(issue#I4E9FS@Gitee)
* 【core   】     CopyOptions新增setFieldValueEditor(issue#I4E08T@Gitee)
* 【core   】     增加SystemPropsUtil(issue#1918@Gitee)
* 【core   】     增加`hutool.date.lenient`系统属性(issue#1918@Gitee)

### 🐞Bug修复
* 【core   】     修复CollUtil.isEqualList两个null返回错误问题(issue#1885@Github)
* 【poi    】     修复ExcelWriter多余调试信息导致的问题(issue#1884@Github)
* 【poi    】     修复TemporalAccessorUtil.toInstant使用DateTimeFormatter导致问题(issue#1891@Github)
* 【poi    】     修复sheet.getRow(y)为null导致的问题(issue#1893@Github)
* 【cache  】     修复LRUCache线程安全问题(issue#1895@Github)
* 【crypto 】     修复KeyUtil异常信息参数丢失问题(issue#1902@Github)
* 【core   】     修复StrUtil.split和splittoArray不一致问题(issue#I4ELU5@Github)
* 【core   】     修复SymmetricCrypto未关闭CipherOutputStream导致的问题(issue#I4EMST@Gitee)
* 【core   】     修复QueryBuilder对/转义问题(issue#1904@Github)

-------------------------------------------------------------------------------------------------------------

# 5.7.14 (2021-10-09)

### 🐣新特性
* 【extra  】     修复HttpCookie设置cookies的方法,不符合RFC6265规范问题(issue#I4B70D@Gitee)
* 【http   】     优化Browser版本正则判断
* 【setting】     增加YamlUtil
* 【extra  】     SenvenZExtractor改名为SevenZExtractor,增加getFirst、get方法
* 【core   】     DateConverter修改返回java.util.Date而非DateTime(issue#I4BOAP@Gitee)
* 【core   】     增加IterableIter、ComputeIter
* 【core   】     CsvConfig增加disableComment方法(issue#1842@Github)
* 【core   】     DateTime构造和DateUtil.parse可选是否宽松模式(issue#1849@Github)
* 【core   】     TreeBuilder增加部分根节点set方法(issue#1848@Github)
* 【core   】     优化Base64.isBase64方法:减少一次多余的判断(pr#1860@Github)
* 【cache  】     优化FIFOCache未设置过期策略时,无需遍历判断过期对象(pr#425@Gitee)
* 【core   】     增加Opt类(pr#426@Gitee)
* 【core   】     Week增加of重载,支持DayOfWek(pr#1872@Github)
* 【poi    】     优化read,避免多次创建CopyOptions(issue#1875@Github)
* 【core   】     优化CsvReader,实现可控遍历(pr#1873@Github)
* 【core   】     优化Base64.isBase64判断(pr#1879@Github)
* 【core   】     新增StrFormatter.formatWith(pr#430@Gitee)

### 🐞Bug修复
* 【http   】     修复HttpCookie设置cookies的方法,不符合RFC6265规范问题(pr#418@Gitee)
* 【http   】     修复Extractor中filter无效问题
* 【json   】     修复JSONGetter.getJSONArray判断null的问题(issue#I4C15H@Gitee)
* 【db     】     修复Condition没占位符的情况下sql没引号问题(issue#1846@Github)
* 【cache  】     修复FIFOCache中remove回调无效问题(pr#1856@Github)
* 【json   】     修复JSONArray.set中,index为0报错问题(issue#1858@Github)
* 【core   】     修复FileUtil.checkSlip中getCanonicalPath异常引起的问题(issue#1858@Github)

-------------------------------------------------------------------------------------------------------------

# 5.7.13 (2021-09-17)

### 🐣新特性
* 【core   】     CsvReadConfig增加trimField选项(issue#I49M0C@Gitee)
* 【http   】     HttpBase增加clearHeaders方法(issue#I49P23@Gitee)
* 【core   】     CsvWriter的write和writeBeans参数改为Iterable(issue#I49O4S@Gitee)
* 【core   】     BitStatusUtil添加来源声明(issue#1824@Github)
* 【core   】     UrlQuery.build增加重载,支持可选是否转义(issue#I4AIX1@Gitee)
* 【core   】     ListUtil增加swapTo和swapElement方法(pr#416@Gitee)
* 【poi    】     ExcelWriter支持Hyperlink(issue#I49QAL@Gitee)
* 
### 🐞Bug修复
* 【core   】     修复FuncKey函数无效问题
* 【core   】     修复ImgUtil.copyImage读取网络URL后宽高报错问题(issue#1821@Github)
* 【core   】     修复StrJoiner.append配置丢失问题(issue#I49K1L@Gitee)
* 【core   】     修复EscapeUtil特殊字符的hex长度不足导致的问题(issue#I49JU8@Gitee)
* 【core   】     修复UrlBuilder对Fragment部分编码问题(issue#I49KAL@Gitee)
* 【core   】     修复Enum转换的bug(issue#I49VZB@Gitee)
* 【json   】     修复JSONUtil.parse对于MapWrapper识别问题
* 【core   】     修复IdcardUtil.isValidCard判断问题(issue#I4AJ8S@Gitee)

-------------------------------------------------------------------------------------------------------------

# 5.7.12 (2021-09-09)

### 🐣新特性
* 【system 】     OshiUtil增加getCurrentProcess方法
* 【extra  】     SpringUtil增加getApplicationName、publishEvent方法(issue#I485NZ@Gitee)
* 【core   】     BeanUtil.getProperty增加判空(issue#I488HA@Gitee)
* 【core   】     OptionalBean弃用(pr#1182@Github)
* 【setting】     Setting、Props持有URL改为持有Resource(pr#1182@Github)
* 【json   】     JSONUtil.toJsonStr增加重载,支持JSONConfig(issue#I48H5L@Gitee)
* 【crypto 】     SymmetricCrypto增加setMode方法,update采用累加模式(pr#1642@Github)
* 【core   】     ZipReader支持Filter
* 【all    】     Sftp、Ftp、HttpDownloader增加download重载,支持避免传输文件损坏(pr#407@Gitee)
* 【crypto 】     AES修改构造的IvParameterSpec为AlgorithmParameterSpec(issue#1814@Gitee)
* 【crypto 】     增加FPE、ZUC(issue#1814@Gitee)

### 🐞Bug修复
* 【core   】     修复ListUtil.split方法越界问题(issue#I48Q0P@Gitee)
* 【core   】     修复QrCode的isTryHarder、isPureBarcode设置无效问题(issue#1815@Github)
* 【core   】     修复DatePattern.CHINESE_DATE_FORMATTER错误问题(issue#I48ZE3@Gitee)
* 【core   】     修复ListUtil.split错误问题
* 【core   】     修复NumberUtil.parseNumber长数字越界问题(issue#1818@Github)

-------------------------------------------------------------------------------------------------------------

# 5.7.11 (2021-08-31)

### 🐣新特性
* 【crypto 】     修改SymmetricCrypto初始化逻辑
* 【core   】     FileTypeUtil增加对wps编辑的docx的识别(issue#I47JGH@Gitee)
* 【core   】     Money修改构造,0表示读取所有分(issue#1796@Github)
* 【json   】     增加JSONXMLParser和JSONXMLSerializer
* 【json   】     XML支持自定义内容标签(issue#I47TV8@Gitee)
### 🐞Bug修复
* 【cron   】     **重要**修复Scheduler启动默认线程池为null的bug(issue#I47PZW@Gitee)

-------------------------------------------------------------------------------------------------------------

# 5.7.10 (2021-08-26)

### 🐣新特性
* 【core   】     增加NamingCase类
* 【core   】     ListUtil增加page方法重载(pr#1761@Github)
* 【crypto 】     增加ASN1Util
* 【core   】     CsvConfig改为泛型形式
* 【core   】     增加Partition
* 【http   】     SoapClient.sendForResponse改为public(issue#I466NN@Gitee)
* 【core   】     XmlUtil增加append重载(issue#I466Q0@Gitee)
* 【poi    】     增加EscapeStrCellSetter(issue#I466ZZ@Gitee)
* 【poi    】     ExcelBase增加renameSheet、cloneSheet(issue#I466ZZ@Gitee)
* 【core   】     ListUtil增加splitAvg方法(pr#397@Gitee)
* 【poi    】     Excel07SaxReader支持数字类型sheet名称、支持sheetName:名称前缀(issue#I46OMA@Gitee)
* 【extra  】     Mail增加build方法(issue#I46LGE@Gitee)
* 【core   】     XmlUtil增加beanToXml重载,支持忽略null
* 【core   】     添加NullComparator、FuncComparator(issue#I471X7@Gitee)
* 【core   】     LambdaUtil添加getFieldName(issue#I4750U@Gitee)
* 【cron   】     Scheduler增加setThreadExecutor(issue#I47A6N@Gitee)
* 【core   】     CharsetDetector增加detect重载,支持自定义缓存大小(issue#I478E5@Gitee)
* 【core   】     增加PartitionIter(pr#402@Gitee)
* 【all    】     增加异常爬栈开关(pr#403@Gitee)
* 【core   】     优化Combination中C(n,n)的逻辑(pr#1792@Github)
* 【core   】     Csv读写支持别名(issue#1791@Github)

### 🐞Bug修复
* 【core   】     修复MapUtil.sort比较器不一致返回原map的问题(issue#I46AQJ@Gitee)
* 【core   】     修复JSONSupport默认循环引用导致的问题(issue#1779@Github)
* 【poi    】     修复ExcelUtil.readBySax资源没有释放问题(issue#1789@Github)

-------------------------------------------------------------------------------------------------------------

# 5.7.9 (2021-08-16)

### 🐣新特性
* 【extra  】    FileUtil增加moveContent方法(issue#I45H30@Gitee)
* 【extra  】    JschPool.getSession获取时检查是否连接状态(issue#I45N5I@Gitee)
* 
### 🐞Bug修复
* 【extra  】    修复TinyPinyinEngine空构造造成可能的误判问题
* 【http   】    修复在gzip模式下Content-Length服务端设置异常导致的问题(issue#1766@Github)
* 【db     】    修复PooledDataSource关闭逻辑错误问题

-------------------------------------------------------------------------------------------------------------

# 5.7.8 (2021-08-11)

### 🐣新特性
* 【core   】     MapProxy支持return this的setter方法(pr#392@Gitee)
* 【core   】     BeeDSFactory移除sqlite事务修复代码,新版本BeeCP已修复
* 【core   】     增加compress包,扩充Zip操作灵活性
* 【json   】     增加JSONBeanParser
* 【poi    】     增加CellSetter,可以自定义单元格值写出
* 【poi    】     CsvReader增加readFromStr(pr#1755@Github)
* 【socket 】     SocketUtil增加connection方法
* 【extra  】     JschUtil增加bindPort重载方法(issue#I44UTH@Github)
* 【core   】     DefaultTrustManager改为继承X509ExtendedTrustManager
* 【core   】     增加IoCopier

### 🐞Bug修复
* 【core   】     改进NumberChineseFormatter算法,补充完整单元测试,解决零问题
* 【core   】     修复Img变换操作图片格式问题(issue#I44JRB@Gitee)

-------------------------------------------------------------------------------------------------------------

# 5.7.7 (2021-08-02)

### 🐣新特性
* 【core   】     增加LookupFactory和MethodHandleUtil(issue#I42TVY@Gitee)
* 【core   】     改进RegexPool.TEL支持无-号码(pr#387@Gitee)
* 【core   】     PhoneUtil中新增获取固话号码中区号,以及固话号码中号码的方法(pr#387@Gitee)
* 【json   】     JSONGetter增加getLocalDateTime方法(pr#387@Gitee)
* 【core   】     增加JNDIUtil(issue#1727@Github)
* 【core   】     NetUtil增加getDnsInfo方法(issue#1727@Github)
* 【core   】     SpringUtil增加unregisterBean方法(pr#388@Gitee)
* 【core   】     优化TextSimilarity公共子串算法(issue#I42A6V@Gitee)
* 【core   】     优化DateUtil.parse对UTC附带时区字符串解析(issue#I437AP@Gitee)

### 🐞Bug修复
* 【jwt    】     修复JWTUtil中几个方法非static的问题(issue#1735@Github)
* 【core   】     修复SpringUtil无法处理autowired问题(pr#388@Gitee)
* 【core   】     修复AbsCollValueMap中常量拼写错误(pr#1736@Github)
* 【core   】     修复FileUtil.del在文件只读情况下无法删除的问题(pr#389@Gitee)
* 【core   】     修复FileUtil.move在不同分区下失败的问题(pr#390@Gitee)
* 【core   】     修复FileUtil.copy强制覆盖参数无效问题
* 【core   】     修复NumberChineseFormatter转换金额多零问题(issue#1739@Github)

-------------------------------------------------------------------------------------------------------------

# 5.7.6 (2021-07-28)

### 🐣新特性
* 【core   】     增加FieldsComparator(pr#374@Gitee)
* 【core   】     FileUtil.del采用Files.delete实现
* 【core   】     改进Base64.isBase64方法增加等号判断(issue#1710@Github)
* 【core   】     Sftp增加syncUpload方法(pr#375@Gitee)
* 【core   】     改进NetUtil.getLocalHost逻辑(issue#1717@Github)
* 【core   】     UseragentUtil增加QQ、alipay、taobao、uc等浏览器识别支持(issue#1719@Github)
* 【http   】     HttpRequest.form方法判断集合增强(pr#381@Gitee)
* 【core   】     NumberUtil增加calculate方法
* 【core   】     优化TextSimilarity.longestCommonSubstring性能(issue#I42A6V@Gitee)
* 【core   】     MultipartRequestInputStream改为使用long以支持大文件(issue#I428AN@Gitee)
* 【core   】     RobotUtil增加getDelay、getRobot方法(pr#1725@Github)
* 【json   】     JSON输出支持ignoreNull(issue#1728@Github)
* 【core   】     DateUtil和LocalDateTimeUtil增加isWeekend方法(issue#I42N5A@Gitee)

### 🐞Bug修复
* 【core   】     修复RobotUtil双击右键问题(pr#1721@Github)
* 【core   】     修复FileTypeUtil判断wps修改过的xlsx误判为jar的问题(pr#380@Gitee)
* 【core   】     修复Sftp.isDir异常bug(pr#378@Gitee)
* 【core   】     修复BeanUtil.copyProperties集合元素复制成功,读取失败的问题(issue#I41WKP@Gitee)
* 【core   】     修复NumberChineseFormatter.chineseToNumber十位数错误(issue#1726@github)
* 【poi    】     修复BeanSheetReader.read中字段对象为空导致的报错(issue#1729@Github)
* 【core   】     修复DateConverter转换java.sql.Date问题(issue#1729@Github)
* 【extra  】     修复CompressUtil中部分方法非static的问题(pr#385@Gitee)
* 【core   】     修复ByteUtil转换端序错误问题(pr#384@Gitee)
* 【core   】     修复UserAgentUtil判断浏览器顺序问题(issue#I42LYW@Gitee)

-------------------------------------------------------------------------------------------------------------

# 5.7.5 (2021-07-19)

### 🐣新特性
* 【core   】     DateUtil增加ceiling重载,可选是否归零毫秒
* 【core   】     IterUtil增加firstMatch方法
* 【core   】     增加NanoId
* 【core   】     MapBuilder增加put方法(pr#367@Gitee)
* 【core   】     StrUtil.insert支持负数index
* 【core   】     Calculator类支持取模运算(issue#I40DUW@Gitee)
* 【core   】     增加Base64.isBase64方法(issue#1710@Github)
* 【core   】     ManifestUtil新增方法getManifest(Class<?> cls)(pr#370@Gitee)
* 【extra  】     AbstractFtp增加isDir方法(issue#1716@Github)
* 【core   】     修改FileUtil异常信息内容(pr#1713@Github)

### 🐞Bug修复
* 【core   】     修复FileUtil.normalize处理上级路径的问题(issue#I3YPEH@Gitee)
* 【core   】     修复ClassScanner扫描空包遗漏问题
* 【core   】     修复FastDatePrinter歧义问题(pr#366@Gitee)
* 【core   】     修复DateUtil.format格式化Instant报错问题(issue#I40CY2@Gitee)
* 【core   】     修复StrUtil.toUnderlineCase大写问题(issue#I40CGS@Gitee)
* 【jwt    】     修复JWT.validate报错问题(issue#I40MR2@Gitee)
* 【core   】     修复StrUtil.brief越界问题

-------------------------------------------------------------------------------------------------------------

# 5.7.4 (2021-07-10)

### 🐣新特性
* 【crypto 】     SmUtil.sm4统一返回类型(issue#I3YKD4@Gitee)
* 【core   】     修改MapUtil.get传入null返回默认值而非null(issue#I3YKBC@Gitee)
* 【core   】     HexUtil增加hexToLong、hexToInt(issue#I3YQEV@Gitee)
* 【core   】     CsvWriter增加writer.write(csvData)的方法重载(pr#353@Gitee)
* 【core   】     新增AbsCollValueMap(issue#I3YXF0@Gitee)
* 【crypto 】     HOTP缓存改为8位,新增方法(pr#356@Gitee)
* 【setting】     Props增加toProperties方法(issue#1701@Github)
* 【http   】     UserAgent增加getOsVersion方法(issue#I3YZUQ@Gitee)
* 【jwt    】     JWT增加validate方法(issue#I3YDM4@Gitee)
* 【core   】     CscReader支持指定读取开始行号和结束行号(issue#I3ZMZL@Gitee)

### 🐞Bug修复
* 【core   】     修复RadixUtil.decode非static问题(issue#I3YPEH@Gitee)
* 【core   】     修复EqualsBuilder数组判断问题(pr#1694@Github)
* 【setting】     修复Props中Charset对象无法序列化的问题(pr#1694@Github)
* 【db     】     修复PageResult首页判断逻辑问题(issue#1699@Github)
* 【core   】     修复IdcardUtil可能数组越界问题(pr#1702@Github)
* 【core   】     修复FastByteArrayOutputStream索引越界问题(issue#I402ZP@Github)

-------------------------------------------------------------------------------------------------------------

# 5.7.3 (2021-06-29)

### 🐣新特性
* 【core   】     增加Convert.toSet方法(issue#I3XFG2@Gitee)
* 【core   】     CsvWriter增加writeBeans方法(pr#345@Gitee)
* 【core   】     新增JAXBUtil(pr#346@Gitee)
* 【poi    】     ExcelWriter新增setColumnStyleIfHasData和setRowStyleIfHasData(pr#347@Gitee)
* 【json   】     用户自定义日期时间格式时,解析也读取此格式
* 【core   】     增加可自定义日期格式GlobalCustomFormat
* 【jwt    】     JWT修改默认有序,并规定payload日期格式为秒数
* 【json   】     增加JSONWriter
* 【core   】     IdUtil增加getWorkerId和getDataCenterId(issueI3Y5NI@Gitee)
* 【core   】     JWTValidator增加leeway重载
* 【core   】     增加RegexPool(issue#I3W9ZF@Gitee)

### 🐞Bug修复
* 【json   】     修复XML转义字符的问题(issue#I3XH09@Gitee)
* 【core   】     修复FormatCache中循环引用异常(pr#1673@Github)
* 【core   】     修复IdcardUtil.getIdcardInfo.getProvinceCode获取为汉字的问题(issue#I3XP4Q@Gitee)
* 【core   】     修复CollUtil.subtract使用非标准Set等空指针问题(issue#I3XN1Z@Gitee)
* 【core   】     修复SqlFormatter部分SQL空指针问题(issue#I3XS44@Gitee)
* 【core   】     修复DateRange计算问题(issue#I3Y1US@Gitee)
* 【core   】     修复BeanCopier中setFieldNameEditor失效问题(pr#349@Gitee)
* 【core   】     修复ArrayUtil.indexOfSub查找bug(issue#1683@Github)
* 【core   】     修复Node的权重比较空指针问题(issue#1681@Github)
* 【core   】     修复UrlQuery传入无参数路径解析问题(issue#1688@Github)

-------------------------------------------------------------------------------------------------------------

# 5.7.2 (2021-06-20)

### 🐣新特性
* 【core   】     增加UserPassAuthenticator
* 【db     】     获取分组数据源时,移除公共属性项
* 【core   】     增加StrJoiner
* 【core   】     增加TreeBuilder
* 【core   】     IterUtil增加getFirstNonNull方法
* 【core   】     NumberUtil判空改为isBlank(issue#1664@Github)
* 【jwt    】     增加JWTValidator、RegisteredPayload
* 【db     】     增加Phoenix方言(issue#1656@Github)

### 🐞Bug修复
* 【db     】     修复Oracle下别名错误造成的SQL语法啊错误(issue#I3VTQW@Gitee)
* 【core   】     修复ConcurrencyTester重复使用时开始测试未清空之前任务的问题(issue#I3VSDO@Gitee)
* 【poi    】     修复使用BigWriter写出,ExcelWriter修改单元格值失败的问题(issue#I3VSDO@Gitee)
* 【jwt    】     修复Hmac算法下生成签名是hex的问题(issue#I3W6IP@Gitee)
* 【core   】     修复TreeUtil.build中deep失效问题(issue#1661@Github)
* 【json   】     修复XmlUtil.xmlToBean判断问题(issue#1663@Github)

-------------------------------------------------------------------------------------------------------------

# 5.7.1 (2021-06-16)

### 🐣新特性
* 【db     】     NamedSql支持in操作(issue#1652@Github)
* 【all    】     JWT模块加入到all和bom包中(issue#1654@Github)
* 【core   】     CollUtil删除所有Map相关操作
* 【all    】     **重要!** 删除过期方法
* 【core   】     增加IterChian类

### 🐞Bug修复

-------------------------------------------------------------------------------------------------------------

# 5.7.0 (2021-06-15)

### 🐣新特性
* 【jwt    】     添加JWT模块,实现了JWT的创建、解析和验证
* 【crypto 】     SymmetricCrypto增加update方法(pr#1642@Github)
* 【crypto 】     MacEngine增加接口update,doFinal,reset等接口
* 【core   】     StrSpliter更名为StrSplitter
* 【core   】     NumberUtil的decimalFormat增加数字检查
* 【http   】     HttpBase的httpVersion方法设置为无效(issue#1644@Github)
* 【extra  】     Sftp增加download重载(issue#I3VBSL@Gitee)
* 【cache  】     修改FIFOCache初始大小(issue#1647@Github)

### 🐞Bug修复
* 【db     】     修复count方法丢失参数问题(issue#I3VBSL@Gitee)
* 【db     】     修复SpringUtil工具在`@PostConstruct` 注解标注的方法下失效问题(pr#341@Gitee)
* 【json   】     修复JSONUtil.parse方法未判断有序问题(issue#I3VHVY@Gitee)
* 【json   】     修复JSONArray.put越界无法加入问题(issue#I3VMLU@Gitee)

-------------------------------------------------------------------------------------------------------------

# 5.6.7 (2021-06-08)

### 🐣新特性
* 【core   】     CharSequenceUtil增加join重载(issue#I3TFJ5@Gitee)
* 【http   】     HttpRequest增加form方法重载(pr#337@Gitee)
* 【http   】     ImgUtil增加getMainColor方法(pr#338@Gitee)
* 【core   】     改进TreeUtil.buid算法性能(pr#1594@Github)
* 【core   】     CsvConfig的setXXX返回this(issue#I3UIQF@Gitee)
* 【all    】     增加jmh基准测试
* 【core   】     增加StreamUtil和CollectorUtil
* 【poi    】     增加content-type(pr#1639@Github)

### 🐞Bug修复
* 【core   】     修复FileUtil.normalize去掉末尾空格问题(issue#1603@Github)
* 【core   】     修复CharsetDetector流关闭问题(issue#1603@Github)
* 【core   】     修复RuntimeUtil.exec引号内空格被切分的问题(issue#I3UAYB@Gitee)

-------------------------------------------------------------------------------------------------------------

# 5.6.6 (2021-05-26)

### 🐣新特性
* 【cron   】     增加时间轮简单实现
* 【core   】     BeanUtil.copyToList增加重载(pr#321@Gitee)
* 【core   】     SyncFinisher增加stop方法(issue#1578@Github)
* 【cache  】     CacheObj默认方法改为protected(issue#I3RIEI@Gitee)
* 【core   】     FileUtil.isEmpty不存在时返回true(issue#1582@Github)
* 【core   】     PhoneUtil增加中国澳门和中国台湾手机号校检方法(pr#331@Gitee)
* 【db     】     分页查询,自定义sql查询,添加参数(pr#332@Gitee)
* 【core   】     IdCardUtil.isValidCard增加非空判断
* 【json   】     JSONObject构造增加SortedMap判断(pr#333@Gitee)
* 【core   】     Tuple增加部分方法(pr#333@Gitee)
* 【log    】     增加LogTube支持
* 【core   】     增加BitStatusUtil(pr#1600@Github)

### 🐞Bug修复
* 【core   】     修复XmlUtil中omitXmlDeclaration参数无效问题(issue#1581@Github)
* 【core   】     修复NumberUtil.decimalFormat参数传错的问题(issue#I3SDS3@Gitee)
* 【json   】     修复JSONArray.put方法不能覆盖值的问题
* 【poi    】     修复sax方式读取xls无法根据sheet名称获取数据(issue#I3S4NH@Gitee)
* 【core   】     修复路径中多个~都被替换的问题(pr#1599@Github)
* 【core   】     修复CRC16构造非public问题(issue#1601@Github)

-------------------------------------------------------------------------------------------------------------
# 5.6.5 (2021-05-08)

### 🐣新特性
* 【http   】     HttpUtil增加closeCookie方法
* 【core   】     NumberUtil增加方法decimalFormat重载(issue#I3OSA2@Gitee)
* 【extra  】     Ftp的remoteVerificationEnabled改为false(issue#I3OSA2@Gitee)
* 【core   】     MaskBit增加掩码反向转换的方法getMaskBit()(pr#1563@Github)
* 【core   】     ReUtil等增加indexOf、delLast等方法(pr#1555@Github)
* 【poi    】     ExcelWriter增加writeSecHeadRow,增加合并单元格边框颜色样式(pr#318@Gitee)

### 🐞Bug修复
* 【core   】     修复createScheduledExecutor单位不是毫秒的问题(issue#I3OYIW@Gitee)
* 【core   】     修复Tailer无stop问题(issue#I3PQLQ@Gitee)
* 【core   】     修复空白excel读取报错问题(issue#1552@Github)
* 【extra  】     修复Sftp.mkDirs报错问题(issue#1536@Github)
* 【core   】     修复Bcrypt不支持$2y$盐前缀问题(pr#1560@Github)
* 【system 】     修复isWindows8拼写问题(pr#1557@Github)
* 【db     】     修复MongoDS默认分组参数失效问题(issue#1548@Github)
* 【core   】     修复UrlPath编码的字符问题导致的URL编码异常(issue#1537@Github)

-------------------------------------------------------------------------------------------------------------

# 5.6.4 (2021-04-25)

### 🐣新特性
* 【core   】     DatePattern补充DateTimeFormatter(pr#308@Gitee)
* 【core   】     DateUtil.compare增加支持给定格式比较(pr#310@Gitee)
* 【core   】     BeanUtil增加edit方法(issue#I3J6BG@Gitee)
* 【db     】     Column中加入columnDef字段默认值(issue#I3J6BG@Gitee)
* 【core   】     BeanUtil增加copyToList方法(issue#1526@Github)
* 【extra  】     MailAccount增加customProperty可以用户自定义属性(pr#317@Gitee)
* 【system 】     SystemUtil.getUserInfo()中所有平台路径统一末尾加/(issue#I3NM39@Gitee)
* 【http   】     新增HttpDownloader,默认开启自动跳转(issue#I3NM39@Gitee)

### 🐞Bug修复
* 【db     】     修复SQL分页时未使用别名导致的错误,同时count时取消order by子句(issue#I3IJ8X@Gitee)
* 【extra  】     修复Sftp.reconnectIfTimeout方法判断错误(issue#1524@Github)
* 【core   】     修复NumberChineseFormatter转数字问题(issue#I3IS3S@Gitee)

-------------------------------------------------------------------------------------------------------------

# 5.6.3 (2021-04-10)

### 🐣新特性
* 【core   】     修改数字转换的实现,增加按照指定端序转换(pr#1492@Github)
* 【core   】     修改拆分byte数组时最后一组长度的规则(pr#1494@Github)
* 【core   】     新增根据日期获取节气(pr#1496@Github)
* 【core   】     mapToBean()添加对布尔值is前缀的识别(pr#294@Gitee)
* 【core   】     农历十月十一月改为寒月和冬月(pr#301@Gitee)
* 【core   】     增加港澳台电话正则(pr#301@Gitee)
* 【core   】     增加银行卡号脱敏(pr#301@Gitee)
* 【cache  】     使用LongAddr代替AtomicLong(pr#301@Gitee)
* 【cache  】     EnumUtil使用LinkedHashMap(pr#304@Gitee)
* 【crypto 】     SymmetricCrypto支持大量数据加密解密(pr#1497@Gitee)
* 【http   】     SoapClient增加针对不同协议的头信息(pr#305@Gitee)
* 【http   】     HttpRequest支持307、308状态码识别(issue#1504@Github)
* 【core   】     CharUtil.isBlankChar增加\u0000判断(pr#1505@Github)
* 【extra  】     添加Houbb Pinyin支持(pr#1506@Github)
* 【core   】     添加LambdaUtil(pr#295@Gitee)
* 【core   】     添加StrPool和CharPool
* 【extra  】     CglibUtil增加toBean和fillBean方法
* 【db     】     增加DriverNamePool

### 🐞Bug修复
* 【core   】     修复Validator.isUrl()传空返回true(issue#I3ETTY@Gitee)
* 【db     】     修复数据库driver根据url的判断识别错误问题(issue#I3EWBI@Gitee)
* 【json   】     修复JSONStrFormatter换行多余空行问题(issue#I3FA8B@Gitee)
* 【core   】     修复UrlPath中的+被转义为空格%20的问题(issue#1501@Github)
* 【core   】     修复DateUtil.parse方法对UTC时间毫秒少于3位不识别问题(issue#1503@Github)

-------------------------------------------------------------------------------------------------------------

# 5.6.2 (2021-03-28)

### 🐣新特性
* 【core   】     Validator增加车架号(车辆识别码)验证、驾驶证(驾驶证档案编号)的正则校验(pr#280@Gitee)
* 【core   】     CopyOptions增加propertiesFilter(pr#281@Gitee)
* 【extra  】     增加Wit模板引擎支持
* 【core   】     增加DesensitizedUtil(pr#282@Gitee)
* 【core   】     增加DateTime字符串构造(issue#I3CQZG@Gitee)
* 【core   】     修改ArrayUtil代码风格(pr#287@Gitee)
* 【json   】     JSONConfig增加setStripTrailingZeros配置(issue#I3DJI8@Gitee)
* 【db     】     升级兼容BeeCP3.x

### 🐞Bug修复
* 【core   】     修复FileTypeUtil中OFD格式判断问题(pr#1489@Github)
* 【core   】     修复CamelCaseLinkedMap和CaseInsensitiveLinkedMap的Linked失效问题(pr#1490@Github)
* 【core   】     修复UrlPath中=被转义的问题

-------------------------------------------------------------------------------------------------------------

# 5.6.1 (2021-03-18)

### 🐣新特性
* 【crypto 】     SecureUtil去除final修饰符(issue#1474@Github)
* 【core   】     IoUtil增加lineIter方法
* 【core   】     新增函数式懒加载加载器(pr#275@Gitee)
* 【http   】     UserAgentUtil增加miniProgram判断(issue#1475@Github)
* 【db     】     增加Ignite数据库驱动识别
* 【core   】     DateUtil.parse支持带毫秒的UTC时间
* 【core   】     IdcardUtil.Idcard增加toString(pr#1487@Github)
* 【core   】     ChineseDate增加getGregorianXXX方法(issue#1481@Github)

### 🐞Bug修复
* 【core   】     修复IoUtil.readBytes的FileInputStream中isClose参数失效问题(issue#I3B7UD@Gitee)
* 【core   】     修复DataUnit中KB不大写的问题
* 【json   】     修复JSONUtil.getByPath类型错误问题(issue#I3BSDF@Gitee)
* 【core   】     修复BeanUtil.toBean提供null未返回null的问题(issue#I3BQPV@Gitee)
* 【core   】     修复ModifierUtil#modifiersToInt中逻辑判断问题(issue#1486@Github)

-------------------------------------------------------------------------------------------------------------

# 5.6.0 (2021-03-12)

### 🐣新特性
* 【poi    】     重要:不再兼容POI-3.x,增加兼容POI-5.x(issue#I35J6B@Gitee)
* 【core   】     FileTypeUtil使用长匹配优先(pr#1457@Github)
* 【core   】     IterUtil和CollUtil增加isEqualList方法(issue#I3A3PY@Gitee)
* 【crypto 】     增加PBKDF2(issue#1416@Github)
* 【core   】     增加FuncKeyMap(issue#1402@Github)
* 【core   】     增加StrMatcher(issue#1379@Github)
* 【core   】     NumberUtil增加factorial针对BigInterger方法(issue#1379@Github)
* 【core   】     TreeNode增加equals方法(issue#1467@Github)
* 【core   】     增加汉字转阿拉伯数字Convert.chineseToNumber(pr#1469@Github)
* 【json   】     JSONUtil增加getByPath方法支持默认值(issue#1470@Github)
* 【crypto 】     SecureUtil增加hmacSha256方法(pr#1473@Github)
* 【core   】     FileTypeUtil判断流增加文件名辅助判断(pr#1471@Github)

### 🐞Bug修复
* 【socket 】     修复Client创建失败资源未释放问题。
* 【core   】     修复DataSizeUtil中EB单位错误问题(issue#I39O7I@Gitee)
* 【core   】     修复BeanDesc.isMatchSetter的ignoreCase未使用问题(issue#I3AXIJ@Gitee)
* 【core   】     修复CRC16Checksum中(issue#I3AXIJ@Gitee)
* 【core   】     修复UrlQuery中对空key解析丢失问题(issue#I3B3J6@Gitee)

-------------------------------------------------------------------------------------------------------------

# 5.5.9 (2021-02-26)

### 🐣新特性
* 【crypto 】     PemUtil.readPemKey支持EC(pr#1366@Github)
* 【extra  】     Ftp等cd方法增加同步(issue#1397@Github)
* 【core   】     StrUtil增加endWithAnyIgnoreCase(issue#I37I0B@Gitee)
* 【crypto 】     Sm2增加getD和getQ方法(issue#I37Z4C@Gitee)
* 【cache  】     AbstractCache增加keySet方法(issue#I37Z4C@Gitee)
* 【core   】     NumberWordFormatter增加formatSimple方法(pr#1436@Github)
* 【crypto 】     增加读取openSSL生成的sm2私钥
* 【crypto 】     增加众多方法,SM2兼容各类密钥格式(issue#I37Z75@Gitee)

### 🐞Bug修复
* 【json   】     JSONUtil.isJson方法改变trim策略,解决特殊空白符导致判断失败问题
* 【json   】     修复SQLEXception导致的栈溢出(issue#1399@Github)
* 【extra  】     修复Ftp中异常参数没有传入问题(issue#1397@Github)
* 【crypto 】     修复Sm2使用D构造空指针问题(issue#I37Z4C@Gitee)
* 【poi    】     修复ExcelPicUtil中图表报错问题(issue#I38857@Gitee)
* 【core   】     修复ListUtil.page方法返回空列表无法编辑问题(issue#1415@Github)
* 【core   】     修复ListUtil.sub中step不通结果不一致问题(issue#1409@Github)
* 【db     】     修复Condition转换参数值时未转换数字异常(issue#I38LTM@Gitee)

-------------------------------------------------------------------------------------------------------------

# 5.5.8 (2021-01-30)

### 🐣新特性
* 【extra  】     增加自动装配SpringUtil类(pr#1366@Github)
* 【extra  】     ArrayUtil增加map方法重载
* 【crypto 】     AsymmetricAlgorithm增加RSA_ECB("RSA/ECB/NoPadding")(issue#1368@Github)
* 【core   】     补充StrUtil.padXXX注释(issue#I2E1S7@Gitee)
* 【core   】     修改上传文件检查逻辑
* 【core   】     修正LocalDateTimeUtil.offset方法注释问题(issue#I2EEXC@Gitee)
* 【extra  】     VelocityEngine的getRowEngine改为getRawEngine(issue#I2EGRG@Gitee)
* 【cache  】     缓存降低锁的粒度,提高并发能力(pr#1385@Github)
* 【core   】     SimpleCache缓存降低锁的粒度,提高并发能力(pr#1385@Github)
* 【core   】     增加RadixUtil(pr#260@Gitee)
* 【core   】     BeanUtil.getFieldValue支持获取字段集合(pr#254@Gitee)
* 【core   】     DateConvert转换失败默认抛出异常(issue#I2M5GN@Gitee)
* 【http   】     HttpServerRequest增加getParam方法
* 【http   】     RootAction增加可选name参数,返回指定文件名称
* 【db     】     支持人大金仓8的驱动识别
* 【db     】     ThreadUtil增加createScheduledExecutor和schedule方法(issue#I2NUTC@Gitee)
* 【core   】     ImgUtil增加getImage方法(issue#I2DU1Z@Gitee)
* 【core   】     DateUtil.beginOfHour(pr#269@Gitee)
* 【core   】     MapUtil增加sortByValue(pr#259@Gitee)
* 【core   】     TypeUtil修正hasTypeVeriable为hasTypeVariable
* 【core   】     RandomUtil.getRandom改为new SecureRandom,避免阻塞

### 🐞Bug修复
* 【core   】     修复FileUtil.move以及PathUtil.copy等无法自动创建父目录的问题(issue#I2CKTI@Gitee)
* 【core   】     修复Console.input读取不全问题(pr#263@Gitee)
* 【core   】     修复URLUtil.encodeAll未检查空指针问题(issue#I2CNPS@Gitee)
* 【core   】     修复UrlBuilder.of的query中含有?丢失问题(issue#I2CNPS@Gitee)
* 【crypto 】     修复BCrypt.checkpw报错问题(issue#1377@Github)
* 【extra  】     修复Fftp中cd失败导致的问题(issue#1371@Github)
* 【poi    】     修复ExcelWriter.merge注释问题(issue#I2DNPG@Gitee)
* 【core   】     修复CsvReader读取注释行错误问题(issue#I2D87I@Gitee)

-------------------------------------------------------------------------------------------------------------

# 5.5.7 (2021-01-07)

### 🐣新特性
* 【core   】     DynaBean.create增加重载方法(pr#245@Gitee)
* 【core   】     IdcardUtil增加重载是否忽略大小写(issue#1348@Github)
* 【poi    】     SheetRidReader增加getRidByIndex方法(issue#1342@Github)
* 【extra  】     MailAccount增加sslProtocols配置项(issue#IZN95@Gitee)
* 【extra  】     MailUtil增加getSession方法
* 【setting】     新增setByGroup和putByGroup,set和put标记为过期(issue#I2C42H@Gitee)
* 【crypto 】     修改SymmetricAlgorithm注释(issue#1360@Github)
* 【all    】     pom中将META-INF/maven下全部exclude(pr#1355@Github)
* 【http   】     SimpleServer中增加addFilter等方法,并使用全局线程池
* 【core   】     CollUtil.forEach 增加null 判断(pr#250@Gitee)
* 【extra  】     FtpConfig增加serverLanguageCode和systemKey配置,Ftp.download增加重载(pr#248@Gitee)

### 🐞Bug修复
* 【core   】     修复CsvReader读取双引号未转义问题(issue#I2BMP1@Gitee)
* 【json   】     JSONUtil.parse修复config无效问题(issue#1363@Github)
* 【http   】     修复SimpleServer返回响应内容Content-Length不正确的问题(issue#1358@Github)
* 【http   】     修复Https请求部分环境下报证书验证异常问题(issue#I2C1BZ@Gitee)

-------------------------------------------------------------------------------------------------------------

# 5.5.6 (2020-12-29)

### 🐣新特性
* 【core   】     手机号工具类 座机正则表达式统一管理(pr#243@Gitee)
* 【extra  】     Mail增加setDebugOutput方法(issue#1335@Gitee)

### 🐞Bug修复
* 【core   】     修复ZipUtil.unzip从流解压关闭问题(issue#I2B0S1@Gitee)
* 【poi    】     修复Excel07Writer写出表格错乱问题(issue#I2B57B@Gitee)
* 【poi    】     修复SheetRidReader读取字段错误问题(issue#1342@Github)
* 【core   】     修复FileUtil.getMimeType不支持css和js(issue#1341@Github)

-------------------------------------------------------------------------------------------------------------

# 5.5.5 (2020-12-27)

### 🐣新特性
* 【core   】     URLUtil.normalize新增重载(pr#233@Gitee)
* 【core   】     PathUtil增加isSub和toAbsNormal方法
* 【db     】     RedisDS实现序列化接口(pr#1323@Github)
* 【poi    】     StyleUtil增加getFormat方法(pr#235@Gitee)
* 【poi    】     增加ExcelDateUtil更多日期格式支持(issue#1316@Github)
* 【core   】     NumberUtil.toBigDecimal支持各类数字格式,如1,234.56等(issue#1334@Github)
* 【core   】     NumberUtil增加parseXXX方法(issue#1334@Github)
* 【poi    】     Excel07SaxReader支持通过sheetName读取(issue#I2AOSE@Gitee)

### 🐞Bug修复
* 【core   】     FileUtil.isSub相对路径判断问题(pr#1315@Github)
* 【core   】     TreeUtil增加空判定(issue#I2ACCW@Gitee)
* 【db     】     解决Hive获取表名失败问题(issue#I2AGLU@Gitee)
* 【core   】     修复DateUtil.parse未使用严格模式导致结果不正常的问题(issue#1332@Github)
* 【core   】     修复RuntimeUtil.getUsableMemory非static问题(issue#I2AQ2M@Gitee)
* 【core   】     修复ArrayUtil.equals方法严格判断问题(issue#I2AO8B@Gitee)
* 【poi    】     修复SheetRidReader在获取rid时读取错误问题(issue#I2AOQW@Gitee)
* 【core   】     修复强依赖了POI的问题(issue#1336@Github)

-------------------------------------------------------------------------------------------------------------

# 5.5.4 (2020-12-16)

### 🐣新特性
### 🐞Bug修复
* 【core   】     修复IoUtil.readBytes的问题

-------------------------------------------------------------------------------------------------------------

# 5.5.3 (2020-12-11)

### 🐣新特性
* 【core   】     IdcardUtil增加行政区划83(issue#1277@Github)
* 【core   】     multipart中int改为long,解决大文件上传越界问题(issue#I27WZ3@Gitee)
* 【core   】     ListUtil.page增加检查(pr#224@Gitee)
* 【db     】     Db增加使用sql的page方法(issue#247@Gitee)
* 【cache  】     CacheObj的isExpired()逻辑修改(issue#1295@Github)
* 【json   】     JSONStrFormater改为JSONStrFormatter
* 【dfa    】     增加FoundWord(pr#1290@Github)
* 【core   】     增加Segment(pr#1290@Github)
* 【core   】     增加CharSequenceUtil
* 【poi    】     Excel07SaxReader拆分出SheetDataSaxHandler
* 【core   】     CollUtil.addAll增加判空(pr#228@Gitee)
* 【core   】     修正DateUtil.betweenXXX注释错误(issue#I28XGW@Gitee)
* 【core   】     增加NioUtil
* 【core   】     增加GanymedUtil
* 【poi    】     增加OFD支持,OfdWriter
* 【poi    】     修复NumberUtil属性拼写错误(pr#1311@Github)
* 【core   】     MapUtil增加getQuietly方法(issue#I29IWO@Gitee)

### 🐞Bug修复
* 【cache  】     修复Cache中get重复misCount计数问题(issue#1281@Github)
* 【poi    】     修复sax读取自定义格式单元格无法识别日期类型的问题(issue#1283@Github)
* 【core   】     修复CollUtil.get越界问题(issue#1292@Github)
* 【core   】     修复TemporalAccessorUtil无法格式化LocalDate带时间问题(issue#1289@Github)
* 【json   】     修复自定义日期格式的LocalDateTime没有包装引号问题(issue#1289@Github)
* 【cache  】     get中unlock改为unlockRead(issue#1294@Github)
* 【db     】     修复表名包含点导致的问题(issue#1300@Github)
* 【poi    】     修复xdr:row标签导致的问题(issue#1297@Github)
* 【core   】     修复FileUtil.loopFiles使用FileFilter无效问题(issue#I28V48@Gitee)
* 【extra  】     修复JschUtil.execByShell返回空的问题(issue#1067@Github)
* 【poi    】     修复特殊的excel使用sax读取时未读到值的问题(issue#1303@Github)
* 【http   】     修复HttpUtil类条件判断错误(pr#232@Gitee)

-------------------------------------------------------------------------------------------------------------

# 5.5.2 (2020-12-01)

### 🐣新特性
* 【crypto 】     KeyUtil增加重载,AES构造增加重载(issue#I25NNZ@Gitee)
* 【json   】     JSONUtil增加toList重载(issue#1228@Github)
* 【core   】     新增CollStreamUtil(issue#1228@Github)
* 【extra  】     新增Rhino表达式执行引擎(pr#1229@Github)
* 【crypto 】     增加判空(issue#1230@Github)
* 【core   】     xml.setXmlStandalone(true)格式优化(pr#1234@Github)
* 【core   】     AnnotationUtil增加setValue方法(pr#1250@Github)
* 【core   】     ZipUtil增加get方法(issue#I27CUF@Gitee)
* 【cache  】     对CacheObj等变量使用volatile关键字
* 【core   】     Base64增加encodeWithoutPadding方法(issue#I26J16@Gitee)
* 【core   】     ExceptionUtil增加message消息包装为运行时异常的方法(pr#1253@Gitee)
* 【core   】     DatePattern增加年月格式化常量(pr#220@Gitee)
* 【core   】     ArrayUtil增加shuffle方法(pr#1255@Github)
* 【core   】     ArrayUtil部分方法分离至PrimitiveArrayUtil
* 【crypto 】     opt改为otp包(issue#1257@Github)
* 【cache  】     增加CacheListener(issue#1257@Github)
* 【core   】     TimeInterval支持分组(issue#1238@Github)
* 【core   】     增加compile包(pr#1243@Github)
* 【core   】     增加ResourceClassLoader、CharSequenceResource、FileObjectResource
* 【core   】     修改IoUtil.read(Reader)逻辑默认关闭Reader
* 【core   】     ZipUtil增加Zip方法(pr#222@Gitee)
* 【all    】     增加Hutool.getAllUtils和printAllUtils方法
* 【core   】     增加PunyCode(issue#1268@Gitee)
* 【core   】     ArrayUtil增加isSorted方法(pr#1271@Github)
* 【captcha】     增加GifCaptcha(pr#1273@Github)
* 【core   】     增加SSLUtil、SSLContextBuilder

### 🐞Bug修复
* 【cron   】     修复CronTimer可能死循环的问题(issue#1224@Github)
* 【core   】     修复Calculator.conversion单个数字越界问题(issue#1222@Github)
* 【poi    】     修复ExcelUtil.getSaxReader使用非MarkSupport流报错问题(issue#1225@Github)
* 【core   】     修复HexUtil.format问题(issue#I268XT@Gitee)
* 【core   】     修复ZipUtil判断压缩文件是否位于压缩目录内的逻辑有误的问题(issue#1251@Github)
* 【json   】     修复JSONObject.accumulate问题
* 【poi    】     修复部分xlsx文件sax方式解析空指针问题(issue#1265@Github)
* 【core   】     修复PatternPool中邮编的正则(issue#1274@Github)

-------------------------------------------------------------------------------------------------------------

# 5.5.1 (2020-11-16)

### 🐣新特性
* 【core   】     增加CopyVisitor和DelVisitor

### 🐞Bug修复
* 【core   】     修复在Linux下FileUtil.move失败问题(issue#I254Y3@Gitee)
* 【http   】     修复UrlUtil和UrlBuilder中多个/被替换问题(issue#I25MZL@Gitee)

-------------------------------------------------------------------------------------------------------------

# 5.5.0 (2020-11-14)

### 大版本特性
* 【extra  】     增加jakarta.validation-api封装:ValidationUtil(pr#207@Gitee)
* 【extra  】     增加表达式引擎封装:ExpressionUtil(pr#1203@Github)
* 【extra  】     新增基于Apache-FtpServer封装:SimpleFtpServer
* 【extra  】     新增基于Commons-Compress封装:CompressUtil

### 🐣新特性
* 【core   】     NumberUtil.parseInt等支持123,2.00这类数字(issue#I23ORQ@Gitee)
* 【core   】     增加ArrayUtil.isSub、indexOfSub、lastIndexOfSub方法(issue#I23O1K@Gitee)
* 【core   】     反射调用支持传递参数的值为null(pr#1205@Github)
* 【core   】     HexUtil增加format方法(issue#I245NF@Gitee)
* 【poi    】     ExcelWriter增加setCurrentRowToEnd方法(issue#I24A2R@Gitee)
* 【core   】     ExcelWriter增加setCurrentRowToEnd方法(issue#I24A2R@Gitee)
* 【core   】     增加enum转数字支持(issue#I24QZY@Gitee)
* 【core   】     NumberUtil.toBigDecimal空白符转换为0(issue#I24MRP@Gitee)
* 【core   】     CollUtil和IterUtil增加size方法(pr#208@Gitee)
* 【poi    】     ExcelReader的read方法读取空单元格增加CellEditor处理(issue#1213@Github)

### 🐞Bug修复
* 【core   】     修复DateUtil.current使用System.nanoTime的问题(issue#1198@Github)
* 【core   】     修复Excel03SaxReader判断日期出错问题(issue#I23M9H@Gitee)
* 【core   】     修复ClassUtil.getTypeArgument方法在判断泛型时导致的问题(issue#1207@Github)
* 【core   】     修复Ipv4Util分隔符问题(issue#I24A9I@Gitee)
* 【core   】     修复Ipv4Util.longToIp的问题
* 【poi    】     修复Excel07SaxReader读取公式的错误的问题(issue#I23VFL@Gitee)
* 【http   】     修复HttpUtil.isHttp判断问题(pr#1208@Github)
* 【http   】     修复Snowflake时间回拨导致ID重复的bug(issue#1206@Github)
* 【core   】     修复StrUtil.lastIndexOf查找位于首位的字符串找不到的bug(issue#I24RSV@Gitee)
* 【poi    】     修复BigExcelWriter的autoSizeColumnAll问题(pr#1221@Github)
* 【core   】     修复StrUtil.subBetweenAll不支持相同字符的问题(pr#1217@Github)

-------------------------------------------------------------------------------------------------------------

# 5.4.7 (2020-10-31)

### 🐣新特性
* 【core   】     增加OptionalBean(pr#1182@Github)
* 【core   】     Ganzhi增加方法(issue#1186@Github)
* 【core   】     CollUtil增加forEach重载(issue#I22NA4@Gitee)
* 【core   】     CollUtil.map忽略空值改规则为原数组中的元素和处理后的元素都会忽略空值(issue#I22N08@Gitee)
* 【http   】     增加SoapClient增加addSOAPHeader重载
* 【http   】     ArrayUtil增加containsAll方法
* 【core   】     增加CharsetDetector
* 【cron   】     增加CronTask,监听支持获取id(issue#I23315@Gitee)

### 🐞Bug修复
* 【core   】     修复BeanUtil.beanToMap方法中editor返回null没有去掉的问题
* 【core   】     修复ImgUtil.toBufferedImage颜色模式的问题(issue#1194@Github)
* 【cron   】     修复TimeZone设置无效的问题(issue#I23315@Gitee)

-------------------------------------------------------------------------------------------------------------

# 5.4.6 (2020-10-23)

### 🐣新特性
* 【http   】     HttpRequest增加basicProxyAuth方法(issue#I1YQGM@Gitee)
* 【core   】     NumberUtil.toStr修改逻辑,去掉BigDecimal的科学计数表示(pr#196@Gitee)
* 【core   】     ListUtil.page第一页页码使用PageUtil(pr#198@Gitee)
* 【http   】     增加微信、企业微信ua识别(pr#1179@Github)
* 【core   】     ObjectUtil增加defaultIfXXX(pr#199@Gitee)
* 【json   】     JSONObject构建时不支持的对象类型抛出异常

### 🐞Bug修复
* 【core   】     修复ChineseDate没有忽略时分秒导致计算错误问题(issue#I1YW12@Gitee)
* 【core   】     修复FileUtil中,copyFile方法断言判断参数传递错误(issue#I1Z2NY@Gitee)
* 【core   】     修复BeanDesc读取父类属性覆盖子类属性导致的问题(pr#1175@Github)
* 【aop    】     修复SimpleAspect一个重载导致的问题,去掉重载的after方法(issue#I1YUG9@Gitee)
* 【poi    】     修复03 sax读取日期问题(issue#I1Z83N@Gitee)
* 【core   】     修复FileUtil.size软链导致的问题(pr#200@Gitee)
* 【core   】     修复JSONObject构造时传入JSONArray结果出错问题(issue#I22FDS@Gitee)

-------------------------------------------------------------------------------------------------------------

# 5.4.5 (2020-10-18)

### 🐣新特性
* 【core   】     ConsoleTable代码优化(pr#190@Gitee)
* 【http   】     HttpRequest增加setProxy重载(pr#190@Gitee)
* 【core   】     XmlUtil.cleanComment(pr#191@Gitee)
* 【core   】     ArrayUtil.unWrap增加默认值(pr#1149@Github)
* 【core   】     ArrayUtil.indexOf修改double的equals判断(pr#1147@Github)
* 【core   】     优化StrUtil中部分参数校验以及逻辑处理(pr#1144@Github)
* 【core   】     简化CreditCode逻辑去除无用Character.toUpperCase(pr#1145@Github)
* 【core   】     NumberUtil增加generateRandomNumber重载,可自定义seed(issue#I1XTUT@Gitee)
* 【core   】     DataSizeUtil支持小数(pr#1158@Github)
* 【core   】     完善注释(pr#193@Gitee)
* 【core   】     优化Combination.countAll(pr#1159@Github)
* 【core   】     优化针对list的split方法(pr#194@Gitee)
* 【poi    】     ExcelWriter增加setRowStyle方法
* 【core   】     Assert增加函数接口(pr#1166@Github)
* 【core   】     新增AtomicIntegerArray、AtomicLongArray转换
* 【extra  】     PinyinUtil新增Bopomofo4j支持
* 【core   】     新增TemporalUtil工具类,新增时间相关方法

### 🐞Bug修复
* 【core   】     解决农历判断节日未判断大小月导致的问题(issue#I1XHSF@Gitee)
* 【core   】     解决ListUtil计算总量可能的int溢出问题(pr#1150@Github)
* 【json   】     解决JSON中转换为double小数精度丢失问题(pr#192@Gitee)
* 【core   】     修复CaseInsensitiveMap的remove等方法并没有忽略大小写的问题(pr#1163@Gitee)
* 【poi    】     修复合并单元格值读取错误的问题
* 【poi    】     修复NamedSql解析形如col::numeric出错问题(issue#I1YHBX@Gitee)
* 【core   】     修复计算相差天数导致的问题

-------------------------------------------------------------------------------------------------------------

# 5.4.4 (2020-09-28)

### 🐣新特性
* 【core   】     ServiceLoaderUtil改为使用contextClassLoader(pr#183@Gitee)
* 【core   】     NetUtil增加getLocalHostName(pr#1103@Github)
* 【extra  】     FTP增加stat方法(issue#I1W346@Gitee)
* 【core   】     Convert.toNumber支持类似12.2F这种形式字符串转换(issue#I1VYLJ@Gitee)
* 【core   】     使用静态变量替换999等(issue#I1W8IB@Gitee)
* 【core   】     URLUtil自动trim(issue#I1W803@Gitee)
* 【crypto 】     RC4增加ecrypt(pr#1108@Github)
* 【core   】     CharUtil and StrUtil增加@(pr#1106@Github)
* 【extra  】     优化EMOJ查询逻辑(pr#1112@Github)
* 【extra  】     优化CollUtil交并集结果集合设置初始化大小,避免扩容成本(pr#1110@Github)
* 【core   】     优化PageUtil彩虹算法(issue#1110@Github)
* 【core   】     IoUtil增加readUtf8方法
* 【core   】     优化全局邮箱账户初始化逻辑(pr#1114@Github)
* 【http   】     SoapClient增加addSOAPHeader方法
* 【http   】     完善StrUtil的注释(pr#186@Gitee)
* 【aop    】     去除调试日志(issue#1116@Github)
* 【core   】     增加&apos;反转义(pr#1121@Github)
* 【poi    】     增加SheetReader和XXXRowHandler(issue#I1WHJP@Gitee)
* 【dfa    】     增加过滤符号(pr#1122@Github)
* 【dfa    】     SensitiveUtil增加setCharFilter方法(pr#1123@Github)
* 【all    】     优化常量大小写规范(pr#188@Gitee)
* 【core   】     优化NumberUtil中针对BigDecimal的一些处理逻辑(pr#1127@Github)
* 【core   】     NumberUtil.factorial注释明确(pr#1126@Github)
* 【core   】     NumberUtil增加isPowerOfTwo方法(pr#1132@Github)
* 【core   】     优化BooleanUtil的校验逻辑(pr#1137@Github)
* 【poi    】     改进sax方式读取逻辑,支持sheetId(issue#1141@Github)
* 【core   】     XmlUtil增加readBySax方法

### 🐞Bug修复
* 【crypto 】     修复SM2验签后无法解密问题(issue#I1W0VP@Gitee)
* 【core   】     修复新建默认TreeSet没有默认比较器导致的问题(issue#1101@Github)
* 【core   】     修复Linux下使用Windows路径分隔符导致的解压错误(issue#I1MW0E@Gitee)
* 【core   】     修复Word07Writer写出map问题(issue#I1W49R@Gitee)
* 【script 】     修复函数库脚本执行问题
* 【core   】     修复RGB随机颜色的上限值不对且API重复(pr#1136@Gihub)

-------------------------------------------------------------------------------------------------------------

# 5.4.3 (2020-09-16)

### 🐣新特性
* 【core   】     使用静态的of方法来new对象(pr#177@Gitee)
* 【setting】     Setting增加store无参方法(issue#1072@Github)
* 【setting】     StatementUtil增加null缓存(pr#1076@Github)
* 【core   】     扩充Console功能,支持可变参数(issue#1077@Github)
* 【crypto 】     增加ECKeyUtil(issue#I1UOF5@Gitee)
* 【core   】     增加TransXXX(issue#I1TU1Y@Gitee)
* 【core   】     增加Generator
* 【db     】     Column增加是否主键、保留位数等字段
* 【cache  】     Cache接口增加get重载(issue#1080@Github)
* 【core   】     增加Interner和InternUtil(issue#I1TU1Y@Gitee)
* 【core   】     增加Calculator(issue#1090@Github)
* 【core   】     IdcardUtil增加getIdcardInfo方法(issue#1092@Github)
* 【core   】     改进ObjectUtil.equal,支持BigDecimal判断
* 【core   】     ArrayConverter增加可选是否忽略错误(issue#I1VNYQ@Gitee)
* 【db     】     增加ConditionBuilder
* 【setting】     Setting和Props增加create方法
* 【log    】     增加TinyLog2支持(issue#1094@Github)

### 🐞Bug修复
* 【core   】     修复Dict.of错误(issue#I1UUO5@Gitee)
* 【core   】     修复UrlBuilder地址参数问题(issue#I1UWCA@Gitee)
* 【core   】     修复StrUtil.toSymbolCase转换问题(issue#1075@Github)
* 【log    】     修复打印null对象显示{msg}异常问题(issue#1084@Github)
* 【extra  】     修复ServletUtil.getReader中未关闭的问题
* 【extra  】     修复QrCodeUtil在新版本zxing报错问题(issue#1088@Github)
* 【core   】     修复LocalDateTimeUtil.parse无法解析yyyyMMddHHmmssSSS的bug(issue#1082@Github)
* 【core   】     修复VersionComparator.equals递归调用问题(issue#1093@Github)

-------------------------------------------------------------------------------------------------------------

# 5.4.2 (2020-09-09)

### 🐣新特性
* 【core  】     lock放在try外边(pr#1050@Github)
* 【core  】     MailUtil增加错误信息(issue#I1TAKJ@Gitee)
* 【core  】     JschUtil添加远程转发功能(pr#171@Gitee)
* 【db    】     AbstractDb增加executeBatch重载(issue#1053@Github)
* 【extra 】     新增方便引入SpringUtil的注解@EnableSpringUtil(pr#172@Gitee)
* 【poi   】     RowUtil增加插入和删除行(pr#1060@Github)
* 【extra 】     SpringUtil增加注册bean(pr#174@Gitee)
* 【core  】     修改NetUtil.getMacAddress避免空指针(issue#1057@Github)
* 【core  】     增加EnumItem接口,枚举扩展转换,增加SPI自定义转换(pr#173@Github)
* 【core  】     TypeUtil增加getActualType,增加ActualTypeMapperPool类(issue#I1TBWH@Gitee)
* 【extra 】     QRConfig中添加qrVersion属性(pr#1068@Github)
* 【core  】     ArrayUtil增加equals方法
* 【core  】     BeanDesc增加方法
* 【core  】     增加@PropIgnore注解(issue#I1U846@Gitee)

### 🐞Bug修复
* 【core  】     重新整理农历节假日,解决一个pr过来的玩笑导致的问题
* 【poi   】     修复ExcelFileUtil.isXls判断问题(pr#1055@Github)
* 【poi   】     修复CglibUtil.copyList参数错误导致的问题
* 【http  】     修复GET请求附带body导致变POST的问题
* 【core  】     修复double相等判断问题(pr#175@Gitee)
* 【core  】     修复DateSizeUtil.format越界问题(issue#1069@Github)
* 【core  】     修复ChineseDate.getChineseMonth问题(issue#I1UG72@Gitee)

-------------------------------------------------------------------------------------------------------------

# 5.4.1 (2020-08-29)

### 🐣新特性
* 【core  】     StrUtil增加firstNonXXX方法(issue#1020@Github)
* 【core  】     BeanCopier修改规则,可选bean拷贝空字段报错问题(pr#160@Gitee)
* 【http  】     HttpUtil增加downloadFileFromUrl(pr#1023@Github)
* 【core  】     增加toEpochMilli方法
* 【core  】     Validator修改isCitizenId校验(pr#1032@Github)
* 【core  】     增加PathUtil和FileNameUtil,分离FileUtil中部分方法
* 【core  】     改造IndexedComparator,增加InstanceComparator
* 【extra 】     增加CglibUtil
* 【core  】     增加Ipv4Util(pr#161@Gitee)
* 【core  】     增加CalendarUtil和DateUtil增加isSameMonth方法(pr#161@Gitee)
* 【core  】     Dict增加of方法(issue#1035@Github)
* 【core  】     StrUtil.wrapAll方法不明确修改改为wrapAllWithPair(issue#1042@Github)
* 【core  】     EnumUtil.getEnumAt负数返回null(pr#167@Gitee)
* 【core  】     ChineseDate增加天干地支和转换为公历方法(pr#169@Gitee)
* 【core  】     Img增加stroke描边方法(issue#1033@Github)

### 🐞Bug修复#
* 【poi   】     修复ExcelBase.isXlsx方法判断问题(issue#I1S502@Gitee)
* 【poi   】     修复Excel03SaxReader日期方法判断问题(pr#1026@Github)
* 【core  】     修复StrUtil.indexOf空指针问题(issue#1038@Github)
* 【extra 】     修复VelocityEngine编码问题和路径前缀问题(issue#I1T0IG@Gitee)

-------------------------------------------------------------------------------------------------------------

# 5.4.0 (2020-08-06)

### 🐣新特性
* 【socket】     对NioServer和NioClient改造(pr#992@Github)
* 【core  】     StrUtil增加filter方法(pr#149@Gitee)
* 【core  】     DateUtil增加beginOfWeek重载
* 【core  】     将有歧义的BeanUtil.mapToBean方法置为过期(使用toBean方法)
* 【core  】     添加WatchAction(对Watcher的抽象)
* 【core  】     修改UUID正则,更加严谨(issue#I1Q1IW@Gitee)
* 【core  】     ArrayUtil增加isAllNull方法(issue#1004@Github)
* 【core  】     CollUtil增加contains方法(pr#152@Gitee)
* 【core  】     ArrayUtil增加isAllNotNull方法(pr#1008@Github)
* 【poi   】     closeAfterRead参数无效,方法设为过期(issue#1007@Github)
* 【core  】     CollUtil中部分方法返回null变更为返回empty
* 【all   】     添加英文README(pr#153@Gitee)
* 【extra 】     SpringUtil增加getBean(TypeReference)(pr#1009@Github)
* 【core  】     Assert增加方法,支持自定义异常处理(pr#154@Gitee)
* 【core  】     BooleanConverter增加数字转换规则(issue#I1R2AB@Gitee)
* 【poi   】     sax方式读取增加一个sheet结束的回调(issue#155@Gitee)
* 【db    】     增加BeeCP连接池支持
* 【core  】     改进Img.pressImage方法,避免变色问题(issue#1001@Github)

### 🐞Bug修复#
* 【core  】     修复原始类型转换时,转换失败没有抛出异常的问题
* 【core  】     修复BeanUtil.mapToBean中bean的class非空构造无法实例化问题
* 【core  】     修复NamedSql多个连续变量出现替换问题
* 【core  】     修复Bean重名字段(大小写区别)获取数据出错的问题(issue#I1QBQ4@Gitee)
* 【http  】     修复SimpleServer响应头无效问题(issue#1006@Github)
* 【core  】     修复ThreadLocalRandom共享seed导致获取随机数一样的问题(pr#151@Gitee)

-------------------------------------------------------------------------------------------------------------

# 5.3.11 (2020-08-01)

### 🐣新特性
* 【captcha】     AbstractCaptcha增加getImageBase64Data方法(pr#985@Github)
* 【core   】     增加PhoneUtil(pr#990@Github)
* 【core   】     改进Img,目标图片类型未定义使用源图片类型(issue#I1PB0B@Gitee)
* 【json   】     JSONConfig增加Transient选项(issue#I1PLHN@Gitee)
* 【core   】     MapUtil增加getXXX的默认值重载(issue#I1PTGI@Gitee)
* 【core   】     CalendarUtil增加parseByPatterns方法(issue#993@Github)

### 🐞Bug修复#

-------------------------------------------------------------------------------------------------------------

## 5.3.10 (2020-07-23)

### 🐣新特性
* 【db   】       增加DbUtil.setReturnGeneratedKeyGlobal(issue#I1NM0K@Gitee)
* 【core 】       增加DataSize和DataSizeUtil(issue#967@Github)
* 【core 】       ImgUtil增加异常,避免空指针(issue#I1NKXG@Gitee)
* 【core 】       增加CRC16算法若干(pr#963@Github)
* 【core 】       LocalDateTimeUtil增加format等方法(pr#140@Gitee)
* 【http 】       UserAgentUtil增加Android原生浏览器识别(pr#975@Github)
* 【crypto 】     增加ECIES算法类(issue#979@Github)
* 【crypto 】     CollUtil增加padLeft和padRight方法(pr#141@Gitee)
* 【core 】       IdCardUtil香港身份证去除首字母校验(issue#I1OOTB@Gitee)

### 🐞Bug修复
* 【core   】     修复ZipUtil中finish位于循环内的问题(issue#961@Github)
* 【core   】     修复CollUtil.page未越界检查的问题(issue#I1O2LR@Gitee)
* 【core   】     修复StrUtil.removeAny的bug(issue#977@Github)

-------------------------------------------------------------------------------------------------------------

## 5.3.9 (2020-07-12)

### 🐣新特性
* 【core   】     DateUtil增加formatChineseDate(pr#932@Github)
* 【core   】     ArrayUtil.isEmpty修改逻辑(pr#948@Github)
* 【core   】     增强StrUtil中空判断后返回数据性能(pr#949@Github)
* 【core   】     deprecate掉millsecond,改为millisecond(issue#I1M9P8@Gitee)
* 【core   】     增加LocalDateTimeUtil(issue#I1KUVC@Gitee)
* 【core   】     Month增加getLastDay方法
* 【core   】     ChineseDate支持到2099年

### 🐞Bug修复
* 【core   】     修复NumberUtil.partValue有余数问题(issue#I1KX66@Gitee)
* 【core   】     修复BeanUtil.isEmpty不能忽略static字段问题(issue#I1KZI6@Gitee)
* 【core   】     修复StrUtil.brief长度问题(pr#930@Github)
* 【socket 】     修复AioSession构造超时无效问题(pr#941@Github)
* 【setting】     修复GroupSet.contains错误(pr#943@Github)
* 【core   】     修复ZipUtil没有调用finish问题(issue#944@Github)
* 【extra  】     修复Ftp中ArrayList长度为负问题(pr#136@Github)
* 【core   】     修复Dict中putAll大小写问题(issue#I1MU5B@Gitee)
* 【core   】     修复POI中sax读取数字判断错误问题(issue#931@Github)
* 【core   】     修复DateUtil.endOfQuarter错误问题(issue#I1NGZ7@Gitee)
* 【core   】     修复URL中有空格转为+问题(issue#I1NGW4@Gitee)
* 【core   】     修复CollUtil.intersectionDistinct空集合结果错误问题
* 【core   】     修复ChineseDate在1996年计算错误问题(issue#I1N96I@Gitee)

-------------------------------------------------------------------------------------------------------------

## 5.3.8 (2020-06-16)

### 🐣新特性
* 【core   】     增加ISO8601日期格式(issue#904@Github)
* 【setting】     Props异常规则修改(issue#907@Github)
* 【setting】     增加GIF支持
* 【core   】     复制创建一个Bean对象, 并忽略某些属性(pr#130@Gitee)
* 【core   】     DateUtil.parse支持更多日期格式(issue#I1KHTB@Gitee)
* 【crypto 】     增加获取密钥空指针的检查(issue#925@Github)
* 【core   】     增加StrUtil.removeAny方法(issue#923@Github)
* 【db     】     增加部分Connection参数支持(issue#924@Github)
* 【core   】     FileUtil增加别名方法(pr#926@Github)
* 【poi    】     ExcelReader中增加read重载,提供每个单元格单独处理的方法(issue#I1JZTL@Gitee)

### 🐞Bug修复
* 【json   】     修复append方法导致的JSONConfig传递失效问题(issue#906@Github)
* 【core   】     修复CollUtil.subtractToList判断错误(pr#915@Github)
* 【poi    】     修复WordWriter写表格问题(pr#914@Github)
* 【core   】     修复IoUtil.readBytes缓存数组长度问题(issue#I1KIUE@Gitee)
* 【core   】     修复BigExcelWriter多次flush导致的问题(issue#920@Github)
* 【extra  】     绕过Pinyin4j最后一个分隔符失效的bug(issue#921@Github)

-------------------------------------------------------------------------------------------------------------

## 5.3.7 (2020-06-03)

### 🐣新特性
* 【core   】     ThreadFactoryBuilder的setUncaughtExceptionHandler返回this(issue#I1J4YJ@Gitee)

### 🐞Bug修复
* 【core   】     修复DateUtil.parse解析2020-5-8 3:12:13错误问题(issue#I1IZA3@Gitee)
* 【core   】     修复Img.pressImg大小无效问题(issue#I1HSWU@Gitee)
* 【core   】     修复CronUtil.stop没有清除任务的问题(issue#I1JACI@Gitee)

-------------------------------------------------------------------------------------------------------------
## 5.3.6 (2020-05-30)

### 🐣新特性
* 【core   】     NumberConverter Long类型增加日期转换(pr#872@Github)
* 【all    】     StrUtil and SymmetricCrypto注释修正(pr#873@Github)
* 【core   】     CsvReader支持返回Bean(issue#869@Github)
* 【core   】     Snowflake循环等待下一个时间时避免长时间循环,加入对时钟倒退的判断(pr#874@Github)
* 【extra  】     新增 QRCode base64 编码形式返回(pr#878@Github)
* 【core   】     ImgUtil增加toBase64DateUri,URLUtil增加getDataUri方法
* 【core   】     IterUtil添加List转Map的工具方法(pr#123@Gitee)
* 【core   】     BeanValueProvider转换失败时,返回原数据,而非null
* 【core   】     支持BeanUtil.toBean(object, Map.class)转换(issue#I1I4HC@Gitee)
* 【core   】     MapUtil和CollUtil增加clear方法(issue#I1I4HC@Gitee)
* 【core   】     增加FontUtil,可定义pressText是否从中间(issue#I1HSWU@Gitee)
* 【http   】     SoapClient支持自定义请求头(issue#I1I0AO@Gitee)
* 【script 】     ScriptUtil增加evalInvocable和invoke方法(issue#I1HHCP@Gitee)
* 【core   】     ImgUtil增加去除背景色的方法(pr#124@Gitee)
* 【system 】     OshiUtil增加获取CPU使用率的方法(pr#124@Gitee)
* 【crypto 】     AsymmetricAlgorithm去除EC(issue#887@Github)
* 【cache  】     超时缓存使用的线程池大小默认为1(issue#890@Github)
* 【poi    】     ExcelSaxReader支持handleCell方法
* 【core   】     Snowflake容忍2秒内的时间回拨(issue#I1IGDX@Gitee)
* 【core   】     StrUtil增加isAllNotEmpty、isAllNotBlank方法(pr#895@Github)
* 【core   】     DateUtil增加dayOfYear方法(pr#895@Github)
* 【core   】     DateUtil增加dayOfYear方法(pr#895@Github)
* 【http   】     HttpUtil增加downloadBytes方法(pr#895@Github)
* 【core   】     isMactchRegex失效标记,增加isMatchRegex(issue#I1IPJG@Gitee)
* 【core   】     优化Validator.isChinese
* 【core   】     ArrayUtil.addAll增加原始类型支持(issue#898@Github)
* 【core   】     DateUtil.parse支持2020-1-1这类日期解析(issue#I1HGWW@Github)

### 🐞Bug修复
* 【core   】     修复SimpleCache死锁问题(issue#I1HOKB@Gitee)
* 【core   】     修复SemaphoreRunnable释放问题(issue#I1HLQQ@Gitee)
* 【poi    】     修复Sax方式读取Excel行号错误问题(issue#882@Github)
* 【poi    】     修复Sax方式读取Excel日期类型数据03和07不一致问题(issue#I1HL1C@Gitee)
* 【poi    】     修复CamelCaseLinkedMap构造错误(issue#I1IZ30@Gitee)

-------------------------------------------------------------------------------------------------------------

## 5.3.5 (2020-05-13)

### 🐣新特性
* 【core   】     增加CollUtil.map方法
* 【extra  】     增加Sftp.lsEntries方法,Ftp和Sftp增加recursiveDownloadFolder(pr#121@Gitee)
* 【system 】     OshiUtil增加getNetworkIFs方法
* 【core   】     CollUtil增加unionDistinct、unionAll方法(pr#122@Gitee)
* 【core   】     增加IoUtil.readObj重载,通过ValidateObjectInputStream由用户自定义安全检查。
* 【http   】     改造HttpRequest中文件上传部分,增加MultipartBody类

### 🐞Bug修复
* 【core   】     修复IoUtil.readObj中反序列化安全检查导致的一些问题,去掉安全检查。
* 【http   】     修复SimpleServer文件访问404问题(issue#I1GZI3@Gitee)
* 【core   】     修复BeanCopier中循环引用逻辑问题(issue#I1H2VN@Gitee)

-------------------------------------------------------------------------------------------------------------

## 5.3.4 (2020-05-10)

### 🐣新特性
* 【core   】     增加URLUtil.getContentLength方法(issue#I1GB1Z@Gitee)
* 【extra  】     增加PinyinUtil(issue#I1GMIV@Gitee)

### 🐞Bug修复
* 【extra  】     修复Ftp设置超时问题(issue#I1GMTQ@Gitee)
* 【core   】     修复TreeUtil根据id查找子节点时的NPE问题(pr#120@Gitee)
* 【core   】     修复BeanUtil.copyProperties中Alias注解无效问题(issue#I1GK3M@Gitee)
* 【core   】     修复CollUtil.containsAll空集合判断问题(issue#I1G9DE@Gitee)
* 【core   】     修复XmlUtil.xmlToBean失败问题(issue#865@Github)

-------------------------------------------------------------------------------------------------------------

## 5.3.3 (2020-05-05)

### 🐣新特性
* 【core   】     ImgUtil.createImage支持背景透明(issue#851@Github)
* 【json   】     更改JSON转字符串时"</"被转义的规则为不转义(issue#852@Github)
* 【cron   】     表达式的所有段支持L关键字(issue#849@Github)
* 【extra  】     增加PinyinUtil,封装TinyPinyin
* 【extra  】     Ftp和Sftp增加FtpConfig,提供超时等更多可选参数
* 【extra  】     SpringUtil增加getActiveProfiles、getBeansOfType、getBeanNamesForType方法(issue#I1FXF3@Gitee)
* 【bloomFilter】 避免布隆过滤器数字溢出(pr#119@Gitee)
* 【core   】     增加IoUtil.writeObj(issue#I1FZIE)
* 【core   】     增加FastStringWriter
* 【core   】     增加NumberUtil.ceilDiv方法(pr#858@Github)
* 【core   】     IdcardUtil增加省份校验(issue#859@Github)
* 【extra  】     TemplateFactory和TokenizerFactory增加单例的get方法

### 🐞Bug修复
* 【core   】     修复URLBuilder中请求参数有`&amp;`导致的问题(issue#850@Github)
* 【core   】     修复URLBuilder中路径以`/`结尾导致的问题(issue#I1G44J@Gitee)
* 【db     】     修复SqlBuilder中orderBy无效问题(issue#856@Github)
* 【core   】     修复StrUtil.subBetweenAll错误问题(issue#861@Github)

-------------------------------------------------------------------------------------------------------------

## 5.3.2 (2020-04-23)

### 🐣新特性
* 【core   】     增加NetUtil.isOpen方法
* 【core   】     增加ThreadUtil.sleep和safeSleep的重载
* 【core   】     Sftp类增加toString方法(issue#I1F2T4@Gitee)
* 【core   】     修改FileUtil.size逻辑,不存在的文件返回0
* 【extra  】     Sftp.ls遇到文件不存在返回空集合,而非抛异常(issue#844@Github)
* 【http   】     改进HttpRequest.toString()格式,添加url

### 🐞Bug修复
* 【db     】     修复PageResult.isLast计算问题
* 【cron   】     修复更改系统时间后CronTimer被阻塞的问题(issue#838@Github)
* 【db     】     修复Page.addOrder无效问题(issue#I1F9MZ@Gitee)
* 【json   】     修复JSONConvert转换日期空指针问题(issue#I1F8M2@Gitee)
* 【core   】     修复XML中带注释Xpath解析导致空指针问题(issue#I1F2WI@Gitee)
* 【core   】     修复FileUtil.rename原文件无扩展名多点的问题(issue#839@Github)
* 【db     】     修复DbUtil.close可能存在的空指针问题(issue#847@Github)

-------------------------------------------------------------------------------------------------------------
## 5.3.1 (2020-04-17)

### 🐣新特性
* 【core   】     ListUtil、MapUtil、CollUtil增加empty方法
* 【poi    】     调整别名策略,clearHeaderAlias和addHeaderAlias同时清除aliasComparator(issue#828@Github)
* 【core   】     修改StrUtil.equals逻辑,改为contentEquals
* 【core   】     增加URLUtil.UrlDecoder
* 【core   】     增加XmlUtil.setNamespaceAware,getByPath支持UniversalNamespaceCache
* 【aop    】     增加Spring-cglib支持,改为SPI实现
* 【json   】     增加JSONUtil.parseXXX增加JSONConfig参数
* 【core   】     RandomUtil.randomNumber改为返回char
* 【crypto 】     SM2支持设置Digest和DSAEncoding(issue#829@Github)

### 🐞Bug修复
* 【json   】     修复解析JSON字符串时配置无法传递问题(issue#I1EIDN@Gitee)
* 【core   】     修复ServletUtil.readCookieMap空指针问题(issue#827@Github)
* 【crypto 】     修复SM2中检查密钥导致的问题(issue#I1EC47@Gitee)
* 【core   】     修复TableMap.isEmpty判断问题
* 【http   】     修复编码后的URL传入导致二次编码的问题(issue#I1EIMN@Gitee)

-------------------------------------------------------------------------------------------------------------

## 5.3.0 (2020-04-07)

### 🐣新特性
* 【extra  】     JschUtil增加execByShell方法(issue#I1CYES@Gitee)
* 【core   】     StrUtil增加subBetweenAll方法,Console增加where和lineNumber方法(issue#812@Github)
* 【core   】     TableMap增加getKeys和getValues方法
* 【json   】     JSONObject和JSONArray增加set方法,标识put弃用
* 【http   】     增加SimpleHttpServer
* 【script 】     增加createXXXScript,区别单例
* 【core   】     修改FileUtil.writeFileToStream等方法返回值为long
* 【core   】     CollUtil.split增加空集合判定(issue#814@Github)
* 【core   】     NetUtil增加parseCookies方法
* 【core   】     CollUtil增加toMap方法
* 【core   】     CollUtil和IterUtil废弃一些方法
* 【core   】     添加ValidateObjectInputStream避免对象反序列化漏洞风险
* 【core   】     添加BiMap
* 【all    】     cn.hutool.extra.servlet.multipart包迁移到cn.hutool.core.net下
* 【core   】     XmlUtil.mapToXml方法支持集合解析(issue#820@Github)
* 【json   】     解析Object中对是否为bean单独判断,而不是直接解析
* 【core   】     SimHash锁改为StampedLock
* 【core   】     Singleton改为SimpleCache实现
* 【core   】     增加CalendarUtil,DateUtil相关方法全部迁移到此

### 🐞Bug修复
* 【extra  】     修复SpringUtil使用devtools重启报错问题
* 【http   】     修复HttpUtil.encodeParams针对无参数URL问题(issue#817@Github)
* 【extra  】     修复模板中无效引用的问题
* 【extra  】     修复读取JSON文本配置未应用到子对象的问题(issue#818@Github)
* 【extra  】     修复XmlUtil.createXml中namespace反向问题
* 【core   】     修复WatchMonitor默认无event问题

-------------------------------------------------------------------------------------------------------------

## 5.2.5 (2020-03-26)

### 🐣新特性
* 【core   】     增加逻辑,对于原始类型注入,使用默认值(issue#797@Github)
* 【core   】     增加CityHash算法
* 【core   】     PageUtil支持setFirstPageNo自定义第一页的页码(issue#I1CGNZ@Gitee)
* 【http   】     UserAgentUtil增加Chromium内核的Edge浏览器支持(issue#800@Github)
* 【cache  】     修改FIFOCache中linkedHashMap的初始容量策略(pr#801@Github)
* 【core   】     修改XmlUtil中setNamespaceAware默认为true
* 【core   】     TreeNode增加extra
* 【core   】     CollUtil.newHashSet重载歧义,更换为set方法
* 【core   】     增加ListUtil,增加Hash32、Hash64、Hash128接口
* 【crypto 】     BCUtil增加readPemPrivateKey和readPemPublicKey方法
* 【cache  】     替换读写锁为StampedLock,增加LockUtil

### 🐞Bug修复
* 【core   】     修复NumberWordFormatter拼写错误(issue#799@Github)
* 【poi    】     修复xls文件下拉列表无效问题(issue#I1C79P@Gitee)
* 【poi    】     修复使用Cglib代理问题(issue#806@Github)
* 【core   】     修复DateUtil.weekCount跨年计算问题

-------------------------------------------------------------------------------------------------------------
## 5.2.4

### 🐣新特性
* 【setting】     Setting中增加addSetting和autoLoad重载(pr#104@Gitee)
* 【core   】     增加copyProperties,根据Class创建对象并进行属性拷贝(pr#105@Gitee)
* 【core   】     添加获取class当前文件夹名称方法(pr#106@Gitee)
* 【core   】     BooleanUtil中重载歧义修正,修改了包装参数的方法名(issue#I1BSK8@Gitee)
* 【core   】     XmlUtil增加xmlToBean和beanToXml方法
* 【db     】     设置全局忽略大小写DbUtil.setCaseInsensitiveGlobal(true)(issue#784@Github)
* 【core   】     增加CallerUtil.getCallerMethodName方法
* 【core   】     Tree增加getParent方法,可以获取父节点,抽象Node接口
* 【core   】     增加社会信用代码工具CreditCodeUtil(pr#112@Gitee)
* 【core   】     ChineseDate增加构造重载,增加toStringNormal(issue#792@Github)
* 【core   】     BeanUtil.toBean增加重载(issue#797@Github)

### 🐞Bug修复
* 【core   】     修复TypeUtil无法获取泛型接口的泛型参数问题(issue#I1BRFI@Gitee)
* 【core   】     修复MySQL中0000报错问题
* 【core   】     修复BeanPath从Map取值为空的问题(issue#790@Github)
* 【poi    】     修复添加图片尺寸的单位问题(issue#I1C2ER@Gitee)
* 【setting】     修复getStr中逻辑问题(pr#113@Gitee)
* 【json   】     修复JSONUtil.toXml汉字被编码的问题(pr#795@Gitee)
* 【poi    】     修复导出的Map列表中每个map长度不同导致的对应不一致的问题(issue#793@Gitee)

-------------------------------------------------------------------------------------------------------------
## 5.2.3

### 🐣新特性
* 【http   】     UserAgentUtil增加识别ios和android等(issue#781@Github)
* 【core   】     支持新领车牌(issue#I1BJHE@Gitee)

### 🐞Bug修复
* 【core   】     修复PageUtil第一页语义不明确的问题(issue#782@Github)
* 【extra  】     修复TemplateFactory引入包导致的问题
* 【core   】     修复ServiceLoaderUtil.loadFirstAvailable问题

-------------------------------------------------------------------------------------------------------------
## 5.2.2

### 🐣新特性

### 🐞Bug修复
* 【http   】     修复body方法添加多余头的问题(issue#769@Github)
* 【bloomFilter 】修复默认为int类型,左移超过32位后,高位丢失问题(pr#770@Github)
* 【core   】     修复beginOfWeek和endOfWeek一周开始计算错误问题(issue#I1BDPW@Gitee)
* 【db     】     修复Db.query使用命名方式查询产生的歧义(issue#776@Github)

-------------------------------------------------------------------------------------------------------------

## 5.2.1

### 🐣新特性
* 【core   】     修改FastDateParser策略,与JDK保持一致(issue#I1AXIN@Gitee)
* 【core   】     增加tree(树状结构)(pr#100@Gitee)
* 【core   】     增加randomEleList(pr#764@Github)
### 🐞Bug修复
* 【setting】     修复Props.toBean方法null的问题
* 【core   】     修复DataUtil.parseLocalDateTime无时间部分报错问题(issue#I1B18H@Gitee)
* 【core   】     修复NetUtil.isUsableLocalPort()判断问题(issue#765@Github)
* 【poi    】     修复ExcelWriter写出多个sheet错误的问题(issue#766@Github)
* 【extra  】     修复模板引擎自定义配置失效问题(issue#767@Github)

-------------------------------------------------------------------------------------------------------------

## 5.2.0

### 🐣新特性
* 【core  】     NumberUtil.decimalFormat增加Object对象参数支持
* 【core  】     增加ReflectUtil.getFieldValue支持Alias注解
* 【core  】     Bean字段支持Alias注解(包括转map,转bean等)
* 【core  】     增加ValueListHandler,优化结果集获取方式
* 【http  】     支持patch方法(issue#666@Github)
* 【crypto】     BCUtil支持更加灵活的密钥类型,增加writePemObject方法
* 【core  】     增加ServiceLoaderUtil
* 【core  】     增加EnumUtil.getEnumAt方法
* 【core  】     增强EnumConvert判断能力(issue#I17082@Gitee)
* 【all   】     log、template、tokenizer使用SPI机制代替硬编码
* 【poi   】     Word07Writer增加addPicture
* 【crypto】     RSA算法中,BlockSize长度策略调整(issue#721@Github)
* 【crypto】     删除SM2Engine,使用BC库中的对象替代
* 【crypto】     增加PemUtil工具类
* 【dfa   】     WordTree增加Filter,支持自定义特殊字符过滤器
* 【poi   】     对于POI依赖升级到4.1.2
* 【crypto】     增加国密SM2验签密钥格式支持(issue#686@Github)

### 🐞Bug修复

-------------------------------------------------------------------------------------------------------------

## 5.1.5

### 🐣新特性
* 【poi  】     Excel合并单元格读取同一个值,不再为空
* 【core 】     增加EscapeUtil.escapeAll(issue#758@Github)
* 【core 】     增加formatLocalDateTime和parseLocalDateTime方法(pr#97@Gitee)

### 🐞Bug修复
* 【core 】     修复EscapeUtil.escape转义错误(issue#758@Github)
* 【core 】     修复Convert.toLocalDateTime(Object value, Date defaultValue)返回结果不是LocalDateTime类型的问题(pr#97@Gitee)

-------------------------------------------------------------------------------------------------------------

## 5.1.4

### 🐣新特性
* 【poi  】     增加单元格位置引用(例如A11等方式获取单元格)
* 【extra】     ServletUtil.fillBean支持数据和集合字段(issue#I19ZMK@Gitee)
* 【core 】     修改ThreadUtil.newSingleExecutor默认队列大小(issue#754@Github)
* 【core 】     修改ExecutorBuilder默认队列大小(issue#753@Github)
* 【core 】     FileTypeUtil增加mp4的magic(issue#756@Github)

### 🐞Bug修复
* 【core 】     修复CombinationAnnotationElement数组判断问题(issue#752@Github)
* 【core 】     修复log4j2使用debug行号打印问题(issue#I19NFJ@Github)
* 【poi  】     修复sax读取excel03数组越界问题(issue#750@Github)

-------------------------------------------------------------------------------------------------------------

## 5.1.3

### 🐣新特性
* 【core 】     废弃isMactchRegex,改为isMatchRegex(方法错别字)
* 【core 】     修正hasNull()方法上注释错误(issue#I18TAG@Gitee)
* 【core 】     Snowflake的起始时间可以被指定(pr#95@Gitee)
* 【core 】     增加PropsUtil及getFirstFound方法(issue#I1960O@Gitee)
### 🐞Bug修复
* 【core 】     CharsetUtil在不支持GBK的系统中运行报错问题(issue#731@Github)
* 【core 】     RandomUtil的randomEleSet方法顺序不随机的问题(pr#741@Github)
* 【core 】     修复StopWatch的toString判断问题(issue#I18VIK@Gitee)

-------------------------------------------------------------------------------------------------------------

## 5.1.2

### 🐣新特性
* 【core 】     XmlUtil支持可选是否输出omit xml declaration(pr#732@Github)
* 【core 】     车牌号校验兼容新能源车牌(pr#92@Gitee)
* 【core 】     在NetUtil中新增ping功能(pr#91@Gitee)
* 【core 】     DateUtil.offset不支持ERA,增加异常提示(issue#I18KD5@Gitee)
* 【http 】     改进HttpUtil访问HTTPS接口性能问题,SSL证书使用单例(issue#I18AL1@Gitee)

### 🐞Bug修复
* 【core 】     修复isExpired的bug(issue#733@Gtihub)

-------------------------------------------------------------------------------------------------------------

## 5.1.1

### 🐣新特性
* 【core 】     ClassUtil.isSimpleValueType增加TemporalAccessor支持(issue#I170HK@Gitee)
* 【core 】     增加Convert.toPrimitiveByteArray方法,Convert支持对象序列化和反序列化
* 【core 】     DateUtil增加isExpired(Date startDate, Date endDate, Date checkDate)(issue#687@Github)
* 【core 】     增加Alias注解
* 【core 】     修正NumberChineseFormatter和NumberWordFormatter(类名拼写错误)
* 【all  】     修正equals,避免可能存在的空指针问题(pr#692@Github)
* 【core  】    提供一个自带默认值的Map(pr#87@Gitee)
* 【core  】    修改Dict在非大小写敏感状态下get也不区分大小写(issue#722@Github)
* 【core  】    StrUtil增加contains方法(issue#716@Github)
* 【core  】    QrCodeUtil增加背景透明支持(pr#89@Gitee)
* 【core  】    增加农历ChineseDate(pr#90@Gitee)
* 【core  】    ZipUtil增加zip方法写出到流(issue#I17SCT@Gitee)
* 【db    】    Db.use().query的方法中增加Map参数接口(issue#709@Github)
* 【db    】    getDialect使用数据源作为锁(issue#720@Github)

### 🐞Bug修复
* 【core 】     修复NumberUtil.mul中null的结果错误问题(issue#I17Y4J@Gitee)
* 【core 】     修复当金额大于等于1亿时,转换会多出一个万字的bug(pr#715@Github)
* 【core 】     修复FileUtil.listFileNames位于jar内导致的文件找不到问题
* 【core 】     修复TextSimilarity.similar去除字符导致的问题(issue#I17K2A@Gitee)
* 【core 】     修复unzip文件路径问题(issue#I17VU7@Gitee)

-------------------------------------------------------------------------------------------------------------

## 5.1.0

### 🐣新特性
* 【core 】     新增WatchServer(issue#440@Github)
* 【core 】     ReflectUtil.getFieldValue支持static(issue#662@Github)
* 【core 】     改进Bean判断和注入逻辑:支持public字段注入(issue#I1689L@Gitee)
* 【extra】     新增SpringUtil
* 【http 】     Get请求支持body,移除body(JSON)方法(issue#671@Github)
* 【core 】     ReflectUtil修正getFieldValue逻辑,防止歧义


### 🐞Bug修复
* 【db  】      修复SqlExecutor.callQuery关闭Statement导致的问题(issue#I16981@Gitee)
* 【db  】      修复XmlUtil.xmlToMap中List节点的问题(pr#82@Gitee)
* 【core】      修复ZipUtil中对于/结尾路径处理的问题(issue#I16PKP@Gitee)
* 【core】      修复DateConvert对int不支持导致的问题(issue#677@Github)

-------------------------------------------------------------------------------------------------------------

## 5.0.7

### 🐣新特性
* 【core 】      解决NumberUtil导致的ambiguous问题(issue#630@Github)
* 【core 】      BeanUtil.isEmpty()忽略字段支持,增加isNotEmpty(issue#629@Github)
* 【extra】      邮件发送后获取message-id(issue#I15FKR@Gitee)
* 【core 】      CaseInsensitiveMap/CamelCaseMap增加toString(issue#636@Github)
* 【core 】      XmlUtil多节点改进(issue#I15I0R@Gitee)
* 【core 】      Thread.excAsync修正为execAsync(issue#642@Github)
* 【core 】      FileUtil.getAbsolutePath修正正则(issue#648@Github)
* 【core 】      NetUtil增加getNetworkInterface方法(issue#I15WEL@Gitee)
* 【core 】      增加ReflectUtil.getFieldMap方法(issue#I15WJ7@Gitee)

### 🐞Bug修复
* 【extra】      修复SFTP.upload上传失败的问题(issue#I15O40@Gitee)
* 【db】         修复findLike匹配错误问题
* 【core 】      修复scale方法透明无效问题(issue#I15L5S@Gitee)
* 【extra】      修复exec返回无效(issue#I15L5S@Gitee)
* 【cron】       修复CronPattern注释(pr#646@Github)
* 【json】       修复LocalDateTime等JDK8时间对象不被支持的问题(issue#644@Github)

-------------------------------------------------------------------------------------------------------------

## 5.0.6

### 🐣新特性
* 【setting】    toBean改为泛型,增加class参数重载(pr#80@Gitee)
* 【core】       XmlUtil使用JDK默认的实现,避免第三方实现导致的问题(issue#I14ZS1@Gitee)
* 【poi】        写入单元格数据类型支持jdk8日期格式(pr#628@Github)

### 🐞Bug修复
* 【core】       修复DateUtil.format使用DateTime时区失效问题(issue#I150I7@Gitee)
* 【core】       修复ZipUtil解压目录遗留问题(issue#I14NO3@Gitee)
* 【core】       修复等比缩放给定背景色无效问题(pr#625@Github)
* 【poi 】       修复sax方式读取excel中无样式表导致的空指针问题
* 【core】       修复标准化URL时domain被转义的问题(pr#654@Github)

-------------------------------------------------------------------------------------------------------------

## 5.0.5

### 🐣新特性
* 【core】       增加MapUtil.removeAny(issue#612@Github)
* 【core】       Convert.toList支持[1,2]字符串(issue#I149XN@Gitee)
* 【core】       修正DateUtil.thisWeekOfMonth注释错误(issue#614@Github)
* 【core】       DateUtil增加toLocalDate等方法,DateTime更好的支持时区
* 【core】       BeanUtil.getProperty返回泛型对象(issue#I14PIW@Gitee)
* 【core】       FileTypeUtil使用扩展名辅助判断类型(issue#I14JBH@Gitee)

### 🐞Bug修复
* 【db】         修复MetaUtil.getTableMeta()方法未释放ResultSet的bug(issue#I148GH@Gitee)
* 【core】       修复DateUtil.age闰年导致的问题(issue#I14BVN@Gitee)
* 【extra】      修复ServletUtil.getCookie大小写问题(pr#79@Gitee)
* 【core】       修复IdcardUtil.isValidCard18报错问题(issue#I14LTJ@Gitee)
* 【poi】        修复double值可能存在的精度问题(issue#I14FG1@Gitee)
* 【core】       修复Linux下解压目录不正确的问题(issue#I14NO3@Gitee)

-------------------------------------------------------------------------------------------------------------

## 5.0.4

### 🐣新特性
* 【setting】    增加System.getenv变量替换支持
* 【core】       XmlUtil中mapToStr支持namespace(pr#599@Github)
* 【core】       ZipUtil修改策略:默认关闭输入流(issue#604@Github)
* 【core】       改进CsvReader,支持RowHandler按行处理(issue#608@Github)
* 【core】       增加MapUtil.sortJoin,改进SecureUtil.signParams支持补充字符串(issue#606@Github)
* 【core】       增加Money类(issue#605@Github)

### 🐞Bug修复
* 【core】       解决ConcurrentHashSet不能序列化的问题(issue#600@Github)
* 【core】       解决CsvReader.setErrorOnDifferentFieldCount循环调用问题

-------------------------------------------------------------------------------------------------------------

## 5.0.3

### 🐣新特性
### 🐞Bug修复
* 【extra】      修复遗留的getSession端口判断错误(issue#594@Github)

-------------------------------------------------------------------------------------------------------------

## 5.0.2

### 🐣新特性
* 【core】       强化java.time包的对象转换支持

### 🐞Bug修复
* 【db】         修正字段中含有as导致触发关键字不能包装字段的问题(issue#I13ML7@Gitee)
* 【extra】      修复QrCode中utf-8不支持大写的问题。(issue#I13MT6@Gitee)
* 【http】       修复请求defalte数据解析错误问题。(pr#593@Github)

-------------------------------------------------------------------------------------------------------------

## 5.0.1

### 🐣新特性
* 【json】       JSONUtil.toBean支持JSONArray
### 🐞Bug修复
* 【extra】      修复getSession端口判断错误

-------------------------------------------------------------------------------------------------------------

## 5.0.0

### 🐣新特性
* 【all】        升级JDK最低 支持到8
* 【log】        Log接口添加get的static方法
* 【all】        部分接口添加FunctionalInterface修饰
* 【crypto】     KeyUtil增加readKeyStore重载
* 【extra】      JschUtil增加私钥传入支持(issue#INKDR@Gitee)
* 【core】       DateUtil、DateTime、Convert全面支持jdk8的time包

### 🐞Bug修复
* 【http】       修复Cookie中host失效导致的问题(issue#583@Github)


================================================
FILE: LICENSE
================================================
                     木兰宽松许可证, 第2版

   木兰宽松许可证, 第2版
   2020年1月 http://license.coscl.org.cn/MulanPSL2


   您对“软件”的复制、使用、修改及分发受木兰宽松许可证,第2版(“本许可证”)的如下条款的约束:

   0. 定义

      “软件”是指由“贡献”构成的许可在“本许可证”下的程序和相关文档的集合。

      “贡献”是指由任一“贡献者”许可在“本许可证”下的受版权法保护的作品。

      “贡献者”是指将受版权法保护的作品许可在“本许可证”下的自然人或“法人实体”。

      “法人实体”是指提交贡献的机构及其“关联实体”。

      “关联实体”是指,对“本许可证”下的行为方而言,控制、受控制或与其共同受控制的机构,此处的控制是指有受控方或共同受控方至少50%直接或间接的投票权、资金或其他有价证券。

   1. 授予版权许可

      每个“贡献者”根据“本许可证”授予您永久性的、全球性的、免费的、非独占的、不可撤销的版权许可,您可以复制、使用、修改、分发其“贡献”,不论修改与否。

   2. 授予专利许可

      每个“贡献者”根据“本许可证”授予您永久性的、全球性的、免费的、非独占的、不可撤销的(根据本条规定撤销除外)专利许可,供您制造、委托制造、使用、许诺销售、销售、进口其“贡献”或以其他方式转移其“贡献”。前述专利许可仅限于“贡献者”现在或将来拥有或控制的其“贡献”本身或其“贡献”与许可“贡献”时的“软件”结合而将必然会侵犯的专利权利要求,不包括对“贡献”的修改或包含“贡献”的其他结合。如果您或您的“关联实体”直接或间接地,就“软件”或其中的“贡献”对任何人发起专利侵权诉讼(包括反诉或交叉诉讼)或其他专利维权行动,指控其侵犯专利权,则“本许可证”授予您对“软件”的专利许可自您提起诉讼或发起维权行动之日终止。

   3. 无商标许可

      “本许可证”不提供对“贡献者”的商品名称、商标、服务标志或产品名称的商标许可,但您为满足第4条规定的声明义务而必须使用除外。

   4. 分发限制

      您可以在任何媒介中将“软件”以源程序形式或可执行形式重新分发,不论修改与否,但您必须向接收者提供“本许可证”的副本,并保留“软件”中的版权、商标、专利及免责声明。

   5. 免责声明与责任限制

      “软件”及其中的“贡献”在提供时不带任何明示或默示的担保。在任何情况下,“贡献者”或版权所有者不对任何人因使用“软件”或其中的“贡献”而引发的任何直接或间接损失承担责任,不论因何种原因导致或者基于何种法律理论,即使其曾被建议有此种损失的可能性。

   6. 语言
      “本许可证”以中英文双语表述,中英文版本具有同等法律效力。如果中英文版本存在任何冲突不一致,以中文版为准。

   条款结束

   如何将木兰宽松许可证,第2版,应用到您的软件

   如果您希望将木兰宽松许可证,第2版,应用到您的新软件,为了方便接收者查阅,建议您完成如下三步:

      1, 请您补充如下声明中的空白,包括软件名、软件的首次发表年份以及您作为版权人的名字;

      2, 请您在软件包的一级目录下创建以“LICENSE”为名的文件,将整个许可证文本放入该文件中;

      3, 请将如下声明文本放入每个源文件的头部注释中。

   Copyright (c) [Year] [name of copyright holder]
   [Software Name] is licensed under Mulan PSL v2.
   You can use this software according to the terms and conditions of the Mulan PSL v2.
   You may obtain a copy of Mulan PSL v2 at:
            http://license.coscl.org.cn/MulanPSL2
   THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
   See the Mulan PSL v2 for more details.


                     Mulan Permissive Software License,Version 2

   Mulan Permissive Software License,Version 2 (Mulan PSL v2)
   January 2020 http://license.coscl.org.cn/MulanPSL2

   Your reproduction, use, modification and distribution of the Software shall be subject to Mulan PSL v2 (this License) with the following terms and conditions:

   0. Definition

      Software means the program and related documents which are licensed under this License and comprise all Contribution(s).

      Contribution means the copyrightable work licensed by a particular Contributor under this License.

      Contributor means the Individual or Legal Entity who licenses its copyrightable work under this License.

      Legal Entity means the entity making a Contribution and all its Affiliates.

      Affiliates means entities that control, are controlled by, or are under common control with the acting entity under this License, ‘control’ means direct or indirect ownership of at least fifty percent (50%) of the voting power, capital or other securities of controlled or commonly controlled entity.

   1. Grant of Copyright License

      Subject to the terms and conditions of this License, each Contributor hereby grants to you a perpetual, worldwide, royalty-free, non-exclusive, irrevocable copyright license to reproduce, use, modify, or distribute its Contribution, with modification or not.

   2. Grant of Patent License

      Subject to the terms and conditions of this License, each Contributor hereby grants to you a perpetual, worldwide, royalty-free, non-exclusive, irrevocable (except for revocation under this Section) patent license to make, have made, use, offer for sale, sell, import or otherwise transfer its Contribution, where such patent license is only limited to the patent claims owned or controlled by such Contributor now or in future which will be necessarily infringed by its Contribution alone, or by combination of the Contribution with the Software to which the Contribution was contributed. The patent license shall not apply to any modification of the Contribution, and any other combination which includes the Contribution. If you or your Affiliates directly or indirectly institute patent litigation (including a cross claim or counterclaim in a litigation) or other patent enforcement activities against any individual or entity by alleging that the Software or any Contribution in it infringes patents, then any patent license granted to you under this License for the Software shall terminate as of the date such litigation or activity is filed or taken.

   3. No Trademark License

      No trademark license is granted to use the trade names, trademarks, service marks, or product names of Contributor, except as required to fulfill notice requirements in Section 4.

   4. Distribution Restriction

      You may distribute the Software in any medium with or without modification, whether in source or executable forms, provided that you provide recipients with a copy of this License and retain copyright, patent, trademark and disclaimer statements in the Software.

   5. Disclaimer of Warranty and Limitation of Liability

      THE SOFTWARE AND CONTRIBUTION IN IT ARE PROVIDED WITHOUT WARRANTIES OF ANY KIND, EITHER EXPRESS OR IMPLIED. IN NO EVENT SHALL ANY CONTRIBUTOR OR COPYRIGHT HOLDER BE LIABLE TO YOU FOR ANY DAMAGES, INCLUDING, BUT NOT LIMITED TO ANY DIRECT, OR INDIRECT, SPECIAL OR CONSEQUENTIAL DAMAGES ARISING FROM YOUR USE OR INABILITY TO USE THE SOFTWARE OR THE CONTRIBUTION IN IT, NO MATTER HOW IT’S CAUSED OR BASED ON WHICH LEGAL THEORY, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.

   6. Language

      THIS LICENSE IS WRITTEN IN BOTH CHINESE AND ENGLISH, AND THE CHINESE VERSION AND ENGLISH VERSION SHALL HAVE THE SAME LEGAL EFFECT. IN THE CASE OF DIVERGENCE BETWEEN THE CHINESE AND ENGLISH VERSIONS, THE CHINESE VERSION SHALL PREVAIL.

   END OF THE TERMS AND CONDITIONS

   How to Apply the Mulan Permissive Software License,Version 2 (Mulan PSL v2) to Your Software

      To apply the Mulan PSL v2 to your work, for easy identification by recipients, you are suggested to complete following three steps:

      i Fill in the blanks in following statement, including insert your software name, the year of the first publication of your software, and your name identified as the copyright owner;

      ii Create a file named “LICENSE” which contains the whole context of this License in the first directory of your software package;

      iii Attach the statement to the appropriate annotated syntax at the beginning of each source file.


   Copyright (c) [Year] [name of copyright holder]
   [Software Name] is licensed under Mulan PSL v2.
   You can use this software according to the terms and conditions of the Mulan PSL v2.
   You may obtain a copy of Mulan PSL v2 at:
               http://license.coscl.org.cn/MulanPSL2
   THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
   See the Mulan PSL v2 for more details.

================================================
FILE: README-EN.md
================================================
<p align="center">
    <a href="https://hutool.cn/"><img src="https://cdn.jsdelivr.net/gh/looly/hutool-site/images/logo.jpg" width="45%"></a>
</p>
<p align="center">
    <strong>🍬A set of tools that keep Java sweet.</strong>
</p>
<p align="center">
    👉 <a href="https://hutool.cn">https://hutool.cn/</a> 👈
</p>

<p align="center">
    <a target="_blank" href="https://search.maven.org/artifact/cn.hutool/hutool-all">
        <img src="https://img.shields.io/maven-central/v/cn.hutool/hutool-all.svg?label=Maven%20Central" />
    </a>
    <a target="_blank" href="https://license.coscl.org.cn/MulanPSL2">
        <img src="https://img.shields.io/:license-MulanPSL2-blue.svg" />
    </a>
    <a target="_blank" href="https://www.oracle.com/java/technologies/javase/javase-jdk8-downloads.html">
        <img src="https://img.shields.io/badge/JDK-8+-green.svg" />
    </a>
    <a target="_blank" href="https://app.travis-ci.com/chinabugotech/hutool">
        <img src="https://api.travis-ci.com/chinabugotech/hutool.svg?branch=v5-master" />
    </a>
    <a href="https://www.codacy.com/gh/chinabugotech/hutool/dashboard?utm_source=github.com&amp;utm_medium=referral&amp;utm_content=chinabugotech/hutool&amp;utm_campaign=Badge_Grade">
        <img src="https://app.codacy.com/project/badge/Grade/8a6897d9de7440dd9de8804c28d2871d"/>
    </a>
    <a href="https://codecov.io/gh/chinabugotech/hutool">
        <img src="https://codecov.io/gh/chinabugotech/hutool/branch/v5-master/graph/badge.svg" />
    </a>
    <a target="_blank" href="https://gitter.im/hutool/Lobby?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge">
        <img src="https://badges.gitter.im/hutool/Lobby.svg" />
    </a>
    <a target="_blank" href='https://gitee.com/chinabugotech/hutool/stargazers'>
        <img src='https://gitee.com/chinabugotech/hutool/badge/star.svg?theme=gvp' alt='star'/>
    </a>
    <a target="_blank" href='https://github.com/chinabugotech/hutool'>
        <img src="https://img.shields.io/github/stars/chinabugotech/hutool.svg?style=social" alt="github star"/>
    </a>
    <a target="_blank" href='https://gitcode.com/chinabugotech/hutool'>
        <img src="https://gitcode.com/chinabugotech/hutool/star/badge.svg" alt="gitcode star"/>
    </a>
    <a href="https://deepwiki.com/chinabugotech/hutool">
        <img src="https://deepwiki.com/badge.svg" alt="Ask DeepWiki">
    </a>
</p>

<br/>
<p align="center">
    <a href="https://qm.qq.com/q/YsLhyheHSA">
    <img alt="" src="https://img.shields.io/badge/QQ%E7%BE%A4%E2%91%A7-667030118-orange"/></a>
</p>

-------------------------------------------------------------------------------

[**🌎中文说明**](README.md)

-------------------------------------------------------------------------------

## 📚Introduction
**Hutool** is a small but comprehensive library of Java tools, achieved by encapsulation through static methods, reduce the cost of learning related APIs, increase productivity, and make Java as elegant as a functional programming language,let the Java be "sweet" too.

**Hutool** tools and methods from each user's crafted, it covers all aspects of the underlying code of Java development, it is a powerful tool for large project development to solve small problems, but also the efficiency of small projects;

**Hutool** is a project "util" package friendly alternative, it saves developers on the project of common classes and common tool methods of encapsulation time, so that development focus on business, at the same time can minimize the encapsulation is not perfect to avoid the bugs.

### 🎁Origin of the 'Hutool' name

**Hutool = Hu + tool**,Is the original company project after the stripping of the underlying code of the open source library , "Hu" is the short name of the company , 'tool' that tool .

Hutool,' Hútú '(Chinese Pinyin),On the one hand, it is simple and easy to understand, on the other hand, it means "hard to be confused".(note: confused means 'Hútú (糊涂)' in china )

### 🍺How Hutool is changing the way we code

The goal of  **Hutool**  is to use a simple function instead of a complex piece of code, thus avoiding the problem of "copy and paste" code as much as possible and revolutionizing the way we write code.

To calculate MD5 for example:

- 👴【Before】Open a search engine -> search "Java MD5 encryption" -> open a blog -> copy and paste -> change it to work.
- 👦【Now   】import Hutool -> SecureUtil.md5()

Hutool exists to reduce code search costs and avoid bugs caused by imperfect code on the web.

### Thanks
> this README is PR by [chengxian-yi](https://gitee.com/yichengxian)
-------------------------------------------------------------------------------

## 🛠️Module
A Java-based tool class for files, streams, encryption and decryption, transcoding, regular, thread, XML and other JDK methods for encapsulation,composing various Util tool classes, as well as providing the following modules:

| module             |     description                                                                                                            |
|--------------------|-------------------------------------------------------------------------------------------------------------------------|
| hutool-aop         |     JDK dynamic proxy encapsulation to provide non-IOC faceting support                                                 |
| hutool-bloomFilter |     Bloom filtering to provide some Hash algorithm Bloom filtering                                                      |
| hutool-cache       |     Simple cache                                                                                                        |
| hutool-core        |     Core, including Bean operations, dates, various Utils, etc.                                                         |
| hutool-cron        |     Task scheduling with Cron expressions                                                                               |
| hutool-crypto      |     Provides symmetric, asymmetric and digest algorithm encapsulation                                                   |
| hutool-db          |     Db operations based on ActiveRecord thinking.                                                                       |
| hutool-dfa         |     DFA models, such as multi-keyword lookups                                                                           |
| hutool-extra       |     Extension modules, third-party wrappers (template engine, mail, servlet, QR code, Emoji, FTP, word splitting, etc.) |
| hutool-http        |     Http client                                                                                                         |
| hutool-log         |     Log (facade)                                                                                                        |
| hutool-script      |     Script execution encapsulation, e.g. Javascript                                                                     |
| hutool-setting     |     Stronger Setting Profile tools and Properties tools                                                                 |
| hutool-system      |     System parameter tools (JVM information, etc.)                                                                      |
| hutool-json        |     JSON                                                                                                                |
| hutool-captcha     |     Image Captcha                                                                                                       |
| hutool-poi         |     Tools for working with Excel and Word in POI                                                                        |
| hutool-socket      |     Java-based tool classes for NIO and AIO sockets                                                                     |
| hutool-jwt         |     JSON Web Token (JWT) implement                                                                                      |
| hutool-ai          |     AI implement                                                                                      |

Each module can be introduced individually, or all modules can be introduced by introducing `hutool-all` as required.

-------------------------------------------------------------------------------

## 📝Doc

[📘Chinese documentation](https://doc.hutool.cn/pages/index/)

[📘Chinese back-up documentation](https://plus.hutool.cn/)

[📙API](https://plus.hutool.cn/apidocs/)

[🎬Video](https://www.bilibili.com/video/BV1bQ4y1M7d9?p=2)

-------------------------------------------------------------------------------



## 📦Install

### 🍊Maven
```xml
<dependency>
    <groupId>cn.hutool</groupId>
    <artifactId>hutool-all</artifactId>
    <version>5.8.44</version>
</dependency>
```

### 🍐Gradle
```
implementation 'cn.hutool:hutool-all:5.8.44'
```

## 📥Download

- [Maven Repo](https://repo1.maven.org/maven2/cn/hutool/hutool-all/5.8.44/)

> 🔔️note:
> Hutool 5.x supports JDK8+ and is not tested on Android platforms, and cannot guarantee that all tool classes or tool methods are available.
> If your project uses JDK7, please use Hutool 4.x version.

### 🚽Compile and install

Download the entire project source code

gitee:[https://gitee.com/chinabugotech/hutool](https://gitee.com/chinabugotech/hutool) 

github:[https://github.com/chinabugotech/hutool](https://github.com/chinabugotech/hutool)

```sh
cd ${hutool}
./hutool.sh install
```

-------------------------------------------------------------------------------

## 🏗️Other

### 🎋Branch Description

Hutool's source code is divided into two branches:

| branch | description                                               |
|-----------|---------------------------------------------------------------|
| v5-master | The master branch, the branch used by the release version, is the same as the jar committed to the central repository and does not receive any pr or modifications. |
| v5-dev    | Development branch, which defaults to the next SNAPSHOT version, accepts modifications or pr |

### 🐞Provide feedback or suggestions on bugs

When submitting feedback, please indicate which JDK version, Hutool version, and related dependency library version you are using.

- [Gitee issue](https://gitee.com/chinabugotech/hutool/issues)
- [Github issue](https://github.com/chinabugotech/hutool/issues)
- [Gitcode issue](https://gitcode.com/chinabugotech/hutool/issues)

### 🧬Principles of PR(pull request)

Hutool welcomes anyone to contribute code to Hutool, but the author suffers from OCD and needs to submit a pr (pull request) that meets some specifications in order to care for the patient.:

1. Improve the comments, especially each new method should follow the Java documentation specification to indicate the method description, parameter description, return value description and other information, if necessary, please add unit tests, if you want, you can also add your name.
2. Code indentation according to Eclipse.
3. Newly added methods do not use third-party library methods,Unless the method tool is add to the '**extra module**'.
4. Please pull request to the `v5-dev` branch. Hutool uses a new branch after 5.x: `v5-master` is the master branch, which indicates the version of the central library that has been released, and this branch does not allow pr or modifications.

### 📖 Documentation source code

[Documentation source code](https://gitee.com/loolly_admin/hutool-doc-handy)

-------------------------------------------------------------------------------

## ⭐Star Hutool

[![Stargazers over time](https://starchart.cc/chinabugotech/hutool.svg)](https://starchart.cc/chinabugotech/hutool)


================================================
FILE: README.md
================================================
<p align="center">
    <a href="https://hutool.cn/"><img src="https://cdn.jsdelivr.net/gh/looly/hutool-site/images/logo.jpg" width="45%"></a>
</p>
<p align="center">
    <strong>🍬A set of tools that keep Java sweet.</strong>
</p>
<p align="center">
    👉 <a href="https://hutool.cn">https://hutool.cn/</a> 👈
</p>

<p align="center">
    <a target="_blank" href="https://search.maven.org/artifact/cn.hutool/hutool-all">
        <img src="https://img.shields.io/maven-central/v/cn.hutool/hutool-all.svg?label=Maven%20Central" />
    </a>
    <a target="_blank" href="https://license.coscl.org.cn/MulanPSL2">
        <img src="https://img.shields.io/:license-MulanPSL2-blue.svg" />
    </a>
    <a target="_blank" href="https://www.oracle.com/java/technologies/javase/javase-jdk8-downloads.html">
        <img src="https://img.shields.io/badge/JDK-8+-green.svg" />
    </a>
    <a target="_blank" href="https://app.travis-ci.com/chinabugotech/hutool">
        <img src="https://api.travis-ci.com/chinabugotech/hutool.svg?branch=v5-master" />
    </a>
    <a href="https://www.codacy.com/gh/chinabugotech/hutool/dashboard?utm_source=github.com&amp;utm_medium=referral&amp;utm_content=chinabugotech/hutool&amp;utm_campaign=Badge_Grade">
        <img src="https://app.codacy.com/project/badge/Grade/8a6897d9de7440dd9de8804c28d2871d"/>
    </a>
    <a href="https://codecov.io/gh/chinabugotech/hutool">
        <img src="https://codecov.io/gh/chinabugotech/hutool/branch/v5-master/graph/badge.svg" />
    </a>
    <a target="_blank" href='https://gitee.com/chinabugotech/hutool/stargazers'>
        <img src='https://gitee.com/chinabugotech/hutool/badge/star.svg?theme=gvp' alt='star'/>
    </a>
    <a target="_blank" href='https://github.com/chinabugotech/hutool'>
        <img src="https://img.shields.io/github/stars/chinabugotech/hutool.svg?style=social" alt="github star"/>
    </a>
    <a target="_blank" href='https://gitcode.com/chinabugotech/hutool'>
        <img src="https://gitcode.com/chinabugotech/hutool/star/badge.svg" alt="gitcode star"/>
    </a>
    <a href="https://deepwiki.com/chinabugotech/hutool">
        <img src="https://deepwiki.com/badge.svg" alt="Ask DeepWiki">
    </a>
</p>

<br/>
<p align="center">
    <a href="https://qm.qq.com/q/YsLhyheHSA">
    <img alt="" src="https://img.shields.io/badge/QQ%E7%BE%A4%E2%91%A7-667030118-orange"/></a>
</p>

-------------------------------------------------------------------------------

[**🌎English Documentation**](README-EN.md)

-------------------------------------------------------------------------------

## 📚简介

`Hutool`是一个功能丰富且易用的**Java工具库**,通过诸多实用工具类的使用,旨在帮助开发者快速、便捷地完成各类开发任务。
这些封装的工具涵盖了字符串、数字、集合、编码、日期、文件、IO、加密、数据库JDBC、JSON、HTTP客户端等一系列操作,
可以满足各种不同的开发需求。

### 🎁Hutool名称的由来

Hutool = Hu + tool,是原公司项目底层代码剥离后的开源库,“Hu”是公司名称的表示,tool表示工具。Hutool谐音“糊涂”,一方面简洁易懂,一方面寓意“难得糊涂”。

### 🍺Hutool理念

`Hutool`既是一个工具集,也是一个知识库,我们从不自诩代码原创,大多数工具类都是**搬运**而来,因此:

- 你可以引入使用,也可以**拷贝**和修改使用,而**不必标注任何信息**,只是希望能把bug及时反馈回来。
- 我们努力健全**中文**注释,为源码学习者提供良好地学习环境,争取做到人人都能看得懂。

-------------------------------------------------------------------------------

## 🛠️包含组件
一个Java基础工具类,对文件、流、加密解密、转码、正则、线程、XML等JDK方法进行封装,组成各种Util工具类,同时提供以下组件:

| 模块                 |     介绍                                                                          |
|--------------------|---------------------------------------------------------------------------------- |
| hutool-aop         |     JDK动态代理封装,提供非IOC下的切面支持                                              |
| hutool-bloomFilter |     布隆过滤,提供一些Hash算法的布隆过滤                                                |
| hutool-cache       |     简单缓存实现                                                                     |
| hutool-core        |     核心,包括Bean操作、日期、各种Util等                                               |
| hutool-cron        |     定时任务模块,提供类Crontab表达式的定时任务                                          |
| hutool-crypto      |     加密解密模块,提供对称、非对称和摘要算法封装                                          |
| hutool-db          |     JDBC封装后的数据操作,基于ActiveRecord思想                                         |
| hutool-dfa         |     基于DFA模型的多关键字查找                                                         |
| hutool-extra       |     扩展模块,对第三方封装(模板引擎、邮件、Servlet、二维码、Emoji、FTP、分词等)            |
| hutool-http        |     基于HttpUrlConnection的Http客户端封装                                            |
| hutool-log         |     自动识别日志实现的日志门面                                                         |
| hutool-script      |     脚本执行封装,例如Javascript                                                      |
| hutool-setting     |     功能更强大的Setting配置文件和Properties封装                                        |
| hutool-system      |     系统参数调用封装(JVM信息等)                                                      |
| hutool-json        |     JSON实现                                                                       |
| hutool-captcha     |     图片验证码实现                                                                   |
| hutool-poi         |     针对POI中Excel和Word的封装                                                       |
| hutool-socket      |     基于Java的NIO和AIO的Socket封装                                                   |
| hutool-jwt         |     JSON Web Token (JWT)封装实现                                                    |
| hutool-ai          |     AI大模型封装实现                                                    |

可以根据需求对每个模块单独引入,也可以通过引入`hutool-all`方式引入所有模块。

-------------------------------------------------------------------------------

## 📝文档 

[📘中文文档](https://doc.hutool.cn/pages/index/)

[📘中文备用文档](https://plus.hutool.cn/)

[📙参考API](https://plus.hutool.cn/apidocs/)

[🎬视频介绍](https://www.bilibili.com/video/BV1bQ4y1M7d9?p=2)

-------------------------------------------------------------------------------



## 📦安装

### 🍊Maven
在项目的pom.xml的dependencies中加入以下内容:

```xml
<dependency>
    <groupId>cn.hutool</groupId>
    <artifactId>hutool-all</artifactId>
    <version>5.8.44</version>
</dependency>
```

### 🍐Gradle
```
implementation 'cn.hutool:hutool-all:5.8.44'
```

### 📥下载jar

点击以下链接,下载`hutool-all-X.X.X.jar`即可:

- [Maven中央库](https://repo1.maven.org/maven2/cn/hutool/hutool-all/5.8.44/)

> 🔔️注意
> Hutool 5.x支持JDK8+,对Android平台没有测试,不能保证所有工具类或工具方法可用。
> 如果你的项目使用JDK7,请使用Hutool 4.x版本(不再更新)

### 🚽编译安装

访问Hutool的Gitee主页:[https://gitee.com/chinabugotech/hutool](https://gitee.com/chinabugotech/hutool) 下载整个项目源码(v5-master或v5-dev分支都可)然后进入Hutool项目目录执行:

```sh
./hutool.sh install
```

然后就可以使用Maven引入了。

-------------------------------------------------------------------------------

## 🏗️添砖加瓦

### 🎋分支说明

Hutool的源码分为两个分支,功能如下:

| 分支       | 作用                                                          |
|-----------|---------------------------------------------------------------|
| v5-master | 主分支,release版本使用的分支,与中央库提交的jar一致,不接收任何pr或修改 |
| v5-dev    | 开发分支,默认为下个版本的SNAPSHOT版本,接受修改或pr                 |

### 🐞提供bug反馈或建议

提交问题反馈请说明正在使用的JDK版本呢、Hutool版本和相关依赖库版本。

- [Gitee issue](https://gitee.com/chinabugotech/hutool/issues)
- [Github issue](https://github.com/chinabugotech/hutool/issues)
- [Gitcode issue](https://gitcode.com/chinabugotech/hutool/issues)


### 🧬贡献代码的步骤

1. 在Gitee或者Github/Gitcode上fork项目到自己的repo
2. 把fork过去的项目也就是你的项目clone到你的本地
3. 修改代码(记得一定要修改v5-dev分支)
4. commit后push到自己的库(v5-dev分支)
5. 登录Gitee或Github/Gitcode在你首页可以看到一个 pull request 按钮,点击它,填写一些说明信息,然后提交即可。
6. 等待维护者合并

### 📐PR遵照的原则

Hutool欢迎任何人为Hutool添砖加瓦,贡献代码,不过维护者是一个强迫症患者,为了照顾病人,需要提交的pr(pull request)符合一些规范,规范如下:

1. 注释完备,尤其每个新增的方法应按照Java文档规范标明方法说明、参数说明、返回值说明等信息,必要时请添加单元测试,如果愿意,也可以加上你的大名。
2. Hutool的缩进按照Eclipse(~~不要跟我说IDEA多好用,维护者非常懒,学不会~~,IDEA真香,改了Eclipse快捷键后舒服多了)默认(tab)缩进,所以请遵守(不要和我争执空格与tab的问题,这是一个病人的习惯)。
3. 新加的方法不要使用第三方库的方法,Hutool遵循无依赖原则(除非在extra模块中加方法工具)。
4. 请pull request到`v5-dev`分支。Hutool在5.x版本后使用了新的分支:`v5-master`是主分支,表示已经发布中央库的版本,这个分支不允许pr,也不允许修改。
5. 我们如果关闭了你的issue或pr,请不要诧异,这是我们保持问题处理整洁的一种方式,你依旧可以继续讨论,当有讨论结果时我们会重新打开。

### 📖文档源码地址

[文档源码地址](https://gitee.com/loolly_admin/hutool-doc-handy) 点击前往添砖加瓦

-------------------------------------------------------------------------------

## ⭐Star Hutool

[![Stargazers over time](https://starchart.cc/chinabugotech/hutool.svg)](https://starchart.cc/chinabugotech/hutool)


================================================
FILE: SECURITY.md
================================================
# Security Policy

## Supported Versions(支持的版本)

| Version | Supported          |
| ------- | ------------------ |
| 5.x.x   | :white_check_mark: |
| 4.x.x   | :x:                |
| 3.x.x   | :x:                |

## Reporting a Vulnerability(报告漏洞)

如果你发现有安全问题或漏洞,请发送邮件到`bugo@bugotech.cn`。

To report any found security issues or vulnerabilities, please send a mail to `bugo@bugotech.cn`.

================================================
FILE: bin/check_dependency_updates.sh
================================================
#!/bin/bash

#--------------------------------------
# Check dependency, thanks to t-io
#--------------------------------------

mvn versions:display-dependency-updates


================================================
FILE: bin/cobertura.sh
================================================
#!/bin/bash

exec mvn -T 1 cobertura:cobertura


================================================
FILE: bin/commit.sh
================================================
#!/bin/bash

git add .
git commit -am "$1"

bin/push_dev.sh


================================================
FILE: bin/deploy.sh
================================================
#!/bin/bash

mvn clean deploy -P release


================================================
FILE: bin/fast_install.sh
================================================
#!/bin/bash

exec mvn -T 1C clean source:jar javadoc:javadoc install -Dmaven.test.skip=true -Dmaven.javadoc.skip=true -Dmaven.compile.fork=true


================================================
FILE: bin/install.sh
================================================
#!/bin/bash

exec mvn -T 1C clean source:jar javadoc:javadoc install -Dmaven.test.skip=false -Dmaven.javadoc.skip=false


================================================
FILE: bin/javadoc.sh
================================================
#!/bin/bash

#exec mvn javadoc:javadoc

# 多模块聚合文档,生成在target/site/apidocs
exec mvn javadoc:aggregate

bin_home="$(dirname ${BASH_SOURCE[0]})"

# 拷贝自定义的index.html到聚合文档目录
cp -vf $bin_home/../docs/apidocs/index.html $bin_home/../target/reports/apidocs/


================================================
FILE: bin/logo.sh
================================================
#!/bin/bash

echo '========================================'
echo '    __  __        __                 __ '
echo '   / / / /__  __ / /_ ____   ____   / / '
echo '  / /_/ // / / // __// __ \ / __ \ / /  '
echo ' / __  // /_/ // /_ / /_/ // /_/ // /   '
echo '/_/ /_/ \____/ \__/ \____/ \____//_/    '
echo ''
echo '-----------https://hutool.cn/-----------'
echo '========================================'


================================================
FILE: bin/package.sh
================================================
#!/bin/bash

exec mvn -T 1C clean source:jar javadoc:javadoc package -Dmaven.test.skip=false -Dmaven.javadoc.skip=false


================================================
FILE: bin/push_dev.sh
================================================
#!/bin/bash

echo -e "\033[32mCheckout to v5-dev\033[0m"
git checkout v5-dev

echo -e "\033[32mPush to Github(origin) v5-dev\033[0m"
git push origin v5-dev

echo -e "\033[32mPush to Gitee v5-dev\033[0m"
git push osc v5-dev

echo -e "\033[32mPush to Gitcode v5-dev\033[0m"
git push gitcode v5-dev


================================================
FILE: bin/push_master.sh
================================================
#!/bin/bash

echo -e "\033[32mCheckout to v5-master\033[0m"
git checkout v5-master

echo -e "\033[32mMerge v5-dev branch\033[0m"
git merge v5-dev -m 'Prepare release'

echo -e "\033[32mPush to Github(origin) v5-master\033[0m"
git push origin v5-master

echo -e "\033[32mPush to Gitee v5-master\033[0m"
git push osc v5-master

echo -e "\033[32mPush to Gitcode v5-master\033[0m"
git push gitcode v5-master


================================================
FILE: bin/replaceVersion.sh
================================================
#!/bin/bash

#-----------------------------------------------------------
# 此脚本用于每次升级Hutool时替换相应位置的版本号
#-----------------------------------------------------------

set -o errexit

pwd=$(pwd)

echo "当前路径:${pwd}"

if [ -n "$1" ];then
    new_version="$1"
    old_version=`cat ${pwd}/bin/version.txt`
    echo "$old_version 替换为新版本 $new_version"
else
    # 参数错误,退出
    echo "ERROR: 请指定新版本!"
    exit
fi

if [ ! -n "$old_version" ]; then
    echo "ERROR: 旧版本不存在,请确认bin/version.txt中信息正确"
    exit
fi

# 替换README.md中的版本
sed -i "s/${old_version}/${new_version}/g" $pwd/README.md
sed -i "s/${old_version}/${new_version}/g" $pwd/README-EN.md
# 替换docs/js/version.js中的版本
sed -i "s/${old_version}/${new_version}/g" $pwd/docs/js/version.js

# 保留新版本号
echo "$new_version" > $pwd/bin/version.txt


================================================
FILE: bin/simple_install.sh
================================================
#!/bin/bash

exec mvn -T 1C clean install -Dmaven.test.skip=true -Dmaven.javadoc.skip=true


================================================
FILE: bin/sync.sh
================================================
#!/bin/bash

git checkout v5-dev
git pull osc v5-dev
git pull origin v5-dev
git pull gitcode v5-dev


================================================
FILE: bin/test.sh
================================================
#!/bin/bash

exec mvn test 


================================================
FILE: bin/update_version.sh
================================================
#!/bin/bash

#------------------------------------------------
# 升级Hutool版本,包括:
# 1. 升级pom.xml中的版本号
# 2. 替换README.md和docs中的版本号
#------------------------------------------------

if [ ! -n "$1" ]; then
        echo "ERROR: 新版本不存在,请指定参数1"
        exit
fi

# 替换所有模块pom.xml中的版本
mvn versions:set -DnewVersion=$1

# 不带-SNAPSHOT的版本号,用于替换其它地方
version=${1%-SNAPSHOT}

# 替换其它地方的版本
$(pwd)/bin/replaceVersion.sh "$version"


================================================
FILE: bin/version.txt
================================================
5.8.44


================================================
FILE: docs/.nojekyll
================================================


================================================
FILE: docs/apidocs/index.html
================================================
<!DOCTYPE html>
<html lang="zh">

<head>
	<meta charset="UTF-8">
	<meta name="viewport" content="width=device-width, initial-scale=1.0">
	<title>Document</title>
	<style>
		* {
			padding: 0;
			margin: 0;
			border: 0;
		}

		.left {
			position: absolute;
			width: 20%;
			height: 100%;
		}

		.top {
			height: 10%;
			text-align: center;
		}

		.bottom {
			height: 90%;
		}

		.content {
			position: absolute;
			width: 80%;
			height: 100%;
			margin-left: 20%;
		}

		iframe {
			width: 100%;
			display: block;
		}
	</style>
	<!-- 百度统计 -->
	<script>
		var _hmt = _hmt || [];
		(function () {
			var hm = document.createElement("script");
			hm.src = "https://hm.baidu.com/hm.js?a76bc7a2d60207f04195af1c51cdb9ba";
			var s = document.getElementsByTagName("script")[0];
			s.parentNode.insertBefore(hm, s);
		})();
	</script>
</head>

<body>
<div class="left">
	<div class="top">
		<a href="https://hutool.cn" target="_blank">
			<img src="https://plus.hutool.cn/images/hutool.svg" style="height: 100%; width: 100%;" alt="hutool">
		</a>
	</div>
	<div class="bottom">
		<iframe src="overview-frame.html" name="packageListFrame" target="packageFrame" title="所有程序包"
				style="height: 30%;"></iframe>
		<iframe src="allclasses-frame.html" name="packageFrame" target="classFrame" title="所有类和接口 (除了非静态嵌套类型)"
				style="height: 70%;"></iframe>
	</div>
</div>
<div class="content">
	<iframe src="overview-summary.html" name="classFrame" title="程序包, 类和接口说明" style="height: 100%;"></iframe>
</div>
<script type="text/javascript" charset="UTF-8" src="https://cdn.wwads.cn/js/makemoney.js" async></script>
<!-- wwads -->
<div style="position: fixed; right: 16px; bottom: 45px; z-index: 99999;">
	<div class="wwads-cn wwads-vertical" data-id="126" style="max-width:150px"></div>
</div>
</body>

</html>


================================================
FILE: docs/js/version.js
================================================
var version = '5.8.44'

================================================
FILE: hutool-ai/pom.xml
================================================
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
		 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
		 xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
	<modelVersion>4.0.0</modelVersion>
	<parent>
		<groupId>cn.hutool</groupId>
		<artifactId>hutool-parent</artifactId>
		<version>5.8.44</version>
	</parent>

	<artifactId>hutool-ai</artifactId>
	<name>${project.artifactId}</name>
	<description>Hutool AI大模型封装</description>

	<properties>
		<Automatic-Module-Name>cn.hutool.ai</Automatic-Module-Name>
	</properties>

	<dependencies>
		<dependency>
			<groupId>cn.hutool</groupId>
			<artifactId>hutool-core</artifactId>
			<version>${project.parent.version}</version>
		</dependency>
		<dependency>
			<groupId>cn.hutool</groupId>
			<artifactId>hutool-http</artifactId>
			<version>${project.parent.version}</version>
		</dependency>
		<dependency>
			<groupId>cn.hutool</groupId>
			<artifactId>hutool-log</artifactId>
			<version>${project.parent.version}</version>
			<scope>compile</scope>
		</dependency>
		<dependency>
			<groupId>cn.hutool</groupId>
			<artifactId>hutool-json</artifactId>
			<version>${project.parent.version}</version>
			<scope>compile</scope>
		</dependency>
	</dependencies>

</project>


================================================
FILE: hutool-ai/src/main/java/cn/hutool/ai/AIException.java
================================================
/*
 * Copyright (c) 2025 Hutool Team and hutool.cn
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 * http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package cn.hutool.ai;

import cn.hutool.core.util.StrUtil;

/**
 * 异常处理类
 */
public class AIException extends RuntimeException {
	private static final long serialVersionUID = 1L;

	/**
	 * 构造
	 *
	 * @param e 异常
	 */
	public AIException(final Throwable e) {
		super(e);
	}

	/**
	 * 构造
	 *
	 * @param message 消息
	 */
	public AIException(final String message) {
		super(message);
	}

	/**
	 * 构造
	 *
	 * @param messageTemplate 消息模板
	 * @param params          参数
	 */
	public AIException(String messageTemplate, Object... params) {
		super(StrUtil.format(messageTemplate, params));
	}

	/**
	 * 构造
	 *
	 * @param message 消息
	 * @param cause   被包装的子异常
	 */
	public AIException(final String message, final Throwable cause) {
		super(message, cause);
	}

	/**
	 * 构造
	 *
	 * @param message            消息
	 * @param cause              被包装的子异常
	 * @param enableSuppression  是否启用抑制
	 * @param writableStackTrace 堆栈跟踪是否应该是可写的
	 */
	public AIException(final String message, final Throwable cause, final boolean enableSuppression, final boolean writableStackTrace) {
		super(message, cause, enableSuppression, writableStackTrace);
	}

	/**
	 * 构造
	 *
	 * @param throwable           被包装的子异常
	 * @param messageTemplate 消息模板
	 * @param params          参数
	 */
	public AIException(Throwable throwable, String messageTemplate, Object... params) {
		super(StrUtil.format(messageTemplate, params), throwable);
	}
}


================================================
FILE: hutool-ai/src/main/java/cn/hutool/ai/AIServiceFactory.java
================================================
/*
 * Copyright (c) 2025 Hutool Team and hutool.cn
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 * http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package cn.hutool.ai;

import cn.hutool.ai.core.AIConfig;
import cn.hutool.ai.core.AIService;
import cn.hutool.ai.core.AIServiceProvider;
import cn.hutool.core.util.ServiceLoaderUtil;

import java.util.Map;
import java.util.ServiceLoader;
import java.util.concurrent.ConcurrentHashMap;

/**
 * 创建AIModelService的工厂类
 *
 * @author elichow
 * @since 5.8.38
 */
public class AIServiceFactory {

	private static final Map<String, AIServiceProvider> providers = new ConcurrentHashMap<>();

	// 加载所有 AIModelProvider 实现类
	static {
		final ServiceLoader<AIServiceProvider> loader = ServiceLoaderUtil.load(AIServiceProvider.class);
		for (final AIServiceProvider provider : loader) {
			providers.put(provider.getServiceName().toLowerCase(), provider);
		}
	}

	/**
	 * 获取AI服务
	 *
	 * @param config AIConfig配置
	 * @return AI服务实例
	 * @since 5.8.38
	 */
	public static AIService getAIService(final AIConfig config) {
		return getAIService(config, AIService.class);
	}

	/**
	 * 获取AI服务
	 *
	 * @param config AIConfig配置
	 * @param clazz AI服务类
	 * @return clazz对应的AI服务类实例
	 * @since 5.8.38
	 * @param <T> AI服务类
	 */
	@SuppressWarnings("unchecked")
	public static <T extends AIService> T getAIService(final AIConfig config, final Class<T> clazz) {
		final AIServiceProvider provider = providers.get(config.getModelName().toLowerCase());
		if (provider == null) {
			throw new IllegalArgumentException("Unsupported model: " + config.getModelName());
		}

		final AIService service = provider.create(config);
		if (!clazz.isInstance(service)) {
			throw new AIException("Model service is not of type: " + clazz.getSimpleName());
		}

		return (T) service;
	}
}


================================================
FILE: hutool-ai/src/main/java/cn/hutool/ai/AIUtil.java
================================================
/*
 * Copyright (c) 2025 Hutool Team and hutool.cn
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 * http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package cn.hutool.ai;

import cn.hutool.ai.core.AIConfig;
import cn.hutool.ai.core.AIService;
import cn.hutool.ai.core.Message;
import cn.hutool.ai.model.deepseek.DeepSeekService;
import cn.hutool.ai.model.doubao.DoubaoService;
import cn.hutool.ai.model.gemini.GeminiService;
import cn.hutool.ai.mod
Download .txt
gitextract_lp5z54zp/

├── .editorconfig
├── .gitee/
│   ├── ISSUE_TEMPLATE.zh-CN.md
│   └── PULL_REQUEST_TEMPLATE.zh-CN.md
├── .github/
│   ├── FUNDING.yml
│   ├── ISSUE_TEMPLATE.md
│   ├── PULL_REQUEST_TEMPLATE.md
│   └── codeql-analysis.yml
├── .gitignore
├── .travis.yml
├── CHANGELOG.md
├── CHANGELOG_5.0-5.7.md
├── LICENSE
├── README-EN.md
├── README.md
├── SECURITY.md
├── bin/
│   ├── check_dependency_updates.sh
│   ├── cobertura.sh
│   ├── commit.sh
│   ├── deploy.sh
│   ├── fast_install.sh
│   ├── install.sh
│   ├── javadoc.sh
│   ├── logo.sh
│   ├── package.sh
│   ├── push_dev.sh
│   ├── push_master.sh
│   ├── replaceVersion.sh
│   ├── simple_install.sh
│   ├── sync.sh
│   ├── test.sh
│   ├── update_version.sh
│   └── version.txt
├── docs/
│   ├── .nojekyll
│   ├── apidocs/
│   │   └── index.html
│   └── js/
│       └── version.js
├── hutool-ai/
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   ├── java/
│       │   │   └── cn/
│       │   │       └── hutool/
│       │   │           └── ai/
│       │   │               ├── AIException.java
│       │   │               ├── AIServiceFactory.java
│       │   │               ├── AIUtil.java
│       │   │               ├── ModelName.java
│       │   │               ├── Models.java
│       │   │               ├── core/
│       │   │               │   ├── AIConfig.java
│       │   │               │   ├── AIConfigBuilder.java
│       │   │               │   ├── AIConfigRegistry.java
│       │   │               │   ├── AIService.java
│       │   │               │   ├── AIServiceProvider.java
│       │   │               │   ├── BaseAIService.java
│       │   │               │   ├── BaseConfig.java
│       │   │               │   ├── Message.java
│       │   │               │   └── package-info.java
│       │   │               ├── model/
│       │   │               │   ├── deepseek/
│       │   │               │   │   ├── DeepSeekCommon.java
│       │   │               │   │   ├── DeepSeekConfig.java
│       │   │               │   │   ├── DeepSeekProvider.java
│       │   │               │   │   ├── DeepSeekService.java
│       │   │               │   │   ├── DeepSeekServiceImpl.java
│       │   │               │   │   └── package-info.java
│       │   │               │   ├── doubao/
│       │   │               │   │   ├── DoubaoCommon.java
│       │   │               │   │   ├── DoubaoConfig.java
│       │   │               │   │   ├── DoubaoProvider.java
│       │   │               │   │   ├── DoubaoService.java
│       │   │               │   │   ├── DoubaoServiceImpl.java
│       │   │               │   │   └── package-info.java
│       │   │               │   ├── gemini/
│       │   │               │   │   ├── GeminiCommon.java
│       │   │               │   │   ├── GeminiConfig.java
│       │   │               │   │   ├── GeminiProvider.java
│       │   │               │   │   ├── GeminiService.java
│       │   │               │   │   ├── GeminiServiceImpl.java
│       │   │               │   │   └── package-info.java
│       │   │               │   ├── grok/
│       │   │               │   │   ├── GrokCommon.java
│       │   │               │   │   ├── GrokConfig.java
│       │   │               │   │   ├── GrokProvider.java
│       │   │               │   │   ├── GrokService.java
│       │   │               │   │   ├── GrokServiceImpl.java
│       │   │               │   │   └── package-info.java
│       │   │               │   ├── hutool/
│       │   │               │   │   ├── HutoolCommon.java
│       │   │               │   │   ├── HutoolConfig.java
│       │   │               │   │   ├── HutoolProvider.java
│       │   │               │   │   ├── HutoolService.java
│       │   │               │   │   ├── HutoolServiceImpl.java
│       │   │               │   │   └── package-info.java
│       │   │               │   ├── ollama/
│       │   │               │   │   ├── OllamaCommon.java
│       │   │               │   │   ├── OllamaConfig.java
│       │   │               │   │   ├── OllamaProvider.java
│       │   │               │   │   ├── OllamaService.java
│       │   │               │   │   ├── OllamaServiceImpl.java
│       │   │               │   │   └── package-info.java
│       │   │               │   ├── openai/
│       │   │               │   │   ├── OpenaiCommon.java
│       │   │               │   │   ├── OpenaiConfig.java
│       │   │               │   │   ├── OpenaiProvider.java
│       │   │               │   │   ├── OpenaiService.java
│       │   │               │   │   ├── OpenaiServiceImpl.java
│       │   │               │   │   └── package-info.java
│       │   │               │   └── package-info.java
│       │   │               └── package-info.java
│       │   └── resources/
│       │       └── META-INF/
│       │           └── services/
│       │               ├── cn.hutool.ai.core.AIConfig
│       │               └── cn.hutool.ai.core.AIServiceProvider
│       └── test/
│           └── java/
│               ├── AIServiceFactoryTest.java
│               ├── AIUtilTest.java
│               └── cn/
│                   └── hutool/
│                       └── ai/
│                           └── model/
│                               ├── deepseek/
│                               │   └── DeepSeekServiceTest.java
│                               ├── doubao/
│                               │   └── DoubaoServiceTest.java
│                               ├── gemini/
│                               │   └── GeminiServiceTest.java
│                               ├── grok/
│                               │   └── GrokServiceTest.java
│                               ├── hutool/
│                               │   └── HutoolServiceTest.java
│                               ├── ollama/
│                               │   └── OllamaServiceTest.java
│                               └── openai/
│                                   ├── OpenaiProxyServiceTest.java
│                                   └── OpenaiServiceTest.java
├── hutool-all/
│   ├── pom.xml
│   └── src/
│       └── main/
│           └── java/
│               └── cn/
│                   └── hutool/
│                       ├── Hutool.java
│                       └── package-info.java
├── hutool-aop/
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   ├── java/
│       │   │   └── cn/
│       │   │       └── hutool/
│       │   │           └── aop/
│       │   │               ├── ProxyUtil.java
│       │   │               ├── aspects/
│       │   │               │   ├── Aspect.java
│       │   │               │   ├── SimpleAspect.java
│       │   │               │   ├── TimeIntervalAspect.java
│       │   │               │   └── package-info.java
│       │   │               ├── interceptor/
│       │   │               │   ├── CglibInterceptor.java
│       │   │               │   ├── JdkInterceptor.java
│       │   │               │   ├── SpringCglibInterceptor.java
│       │   │               │   └── package-info.java
│       │   │               ├── package-info.java
│       │   │               └── proxy/
│       │   │                   ├── CglibProxyFactory.java
│       │   │                   ├── JdkProxyFactory.java
│       │   │                   ├── ProxyFactory.java
│       │   │                   ├── SpringCglibProxyFactory.java
│       │   │                   └── package-info.java
│       │   └── resources/
│       │       └── META-INF/
│       │           └── services/
│       │               └── cn.hutool.aop.proxy.ProxyFactory
│       └── test/
│           └── java/
│               └── cn/
│                   └── hutool/
│                       └── aop/
│                           └── test/
│                               ├── AopTest.java
│                               ├── IssueI74EX7Test.java
│                               └── IssueIBF20ZTest.java
├── hutool-bloomFilter/
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   └── java/
│       │       └── cn/
│       │           └── hutool/
│       │               └── bloomfilter/
│       │                   ├── BitMapBloomFilter.java
│       │                   ├── BitSetBloomFilter.java
│       │                   ├── BloomFilter.java
│       │                   ├── BloomFilterUtil.java
│       │                   ├── bitMap/
│       │                   │   ├── BitMap.java
│       │                   │   ├── IntMap.java
│       │                   │   ├── LongMap.java
│       │                   │   └── package-info.java
│       │                   ├── filter/
│       │                   │   ├── AbstractFilter.java
│       │                   │   ├── DefaultFilter.java
│       │                   │   ├── ELFFilter.java
│       │                   │   ├── FNVFilter.java
│       │                   │   ├── FuncFilter.java
│       │                   │   ├── HfFilter.java
│       │                   │   ├── HfIpFilter.java
│       │                   │   ├── JSFilter.java
│       │                   │   ├── PJWFilter.java
│       │                   │   ├── RSFilter.java
│       │                   │   ├── SDBMFilter.java
│       │                   │   ├── TianlFilter.java
│       │                   │   └── package-info.java
│       │                   └── package-info.java
│       └── test/
│           └── java/
│               └── cn/
│                   └── hutool/
│                       └── bloomfilter/
│                           ├── AbstractFilterTest.java
│                           ├── BitMapBloomFilterTest.java
│                           └── BitSetBloomFilterTest.java
├── hutool-bom/
│   └── pom.xml
├── hutool-cache/
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   └── java/
│       │       └── cn/
│       │           └── hutool/
│       │               └── cache/
│       │                   ├── Cache.java
│       │                   ├── CacheListener.java
│       │                   ├── CacheUtil.java
│       │                   ├── GlobalPruneTimer.java
│       │                   ├── file/
│       │                   │   ├── AbstractFileCache.java
│       │                   │   ├── LFUFileCache.java
│       │                   │   ├── LRUFileCache.java
│       │                   │   └── package-info.java
│       │                   ├── impl/
│       │                   │   ├── AbstractCache.java
│       │                   │   ├── CacheObj.java
│       │                   │   ├── CacheObjIterator.java
│       │                   │   ├── CacheValuesIterator.java
│       │                   │   ├── FIFOCache.java
│       │                   │   ├── LFUCache.java
│       │                   │   ├── LRUCache.java
│       │                   │   ├── NoCache.java
│       │                   │   ├── ReentrantCache.java
│       │                   │   ├── StampedCache.java
│       │                   │   ├── TimedCache.java
│       │                   │   ├── WeakCache.java
│       │                   │   └── package-info.java
│       │                   └── package-info.java
│       └── test/
│           └── java/
│               └── cn/
│                   └── hutool/
│                       └── cache/
│                           ├── CacheConcurrentTest.java
│                           ├── CacheTest.java
│                           ├── FileCacheTest.java
│                           ├── Issue3618Test.java
│                           ├── IssueI8MEIXTest.java
│                           ├── LRUCacheTest.java
│                           └── WeakCacheTest.java
├── hutool-captcha/
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   └── java/
│       │       └── cn/
│       │           └── hutool/
│       │               └── captcha/
│       │                   ├── AbstractCaptcha.java
│       │                   ├── CaptchaUtil.java
│       │                   ├── CircleCaptcha.java
│       │                   ├── GifCaptcha.java
│       │                   ├── ICaptcha.java
│       │                   ├── LineCaptcha.java
│       │                   ├── ShearCaptcha.java
│       │                   ├── generator/
│       │                   │   ├── AbstractGenerator.java
│       │                   │   ├── CodeGenerator.java
│       │                   │   ├── MathGenerator.java
│       │                   │   ├── RandomGenerator.java
│       │                   │   └── package-info.java
│       │                   └── package-info.java
│       └── test/
│           └── java/
│               └── cn/
│                   └── hutool/
│                       └── captcha/
│                           ├── CaptchaTest.java
│                           ├── CaptchaUtilTest.java
│                           ├── GeneratorTest.java
│                           ├── GifCaptchaUtilTest.java
│                           └── ShearCaptchaTest.java
├── hutool-core/
│   ├── README.md
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   └── java/
│       │       └── cn/
│       │           └── hutool/
│       │               └── core/
│       │                   ├── annotation/
│       │                   │   ├── AbstractAnnotationSynthesizer.java
│       │                   │   ├── AbstractLinkAnnotationPostProcessor.java
│       │                   │   ├── AbstractWrappedAnnotationAttribute.java
│       │                   │   ├── AggregateAnnotation.java
│       │                   │   ├── Alias.java
│       │                   │   ├── AliasAnnotationPostProcessor.java
│       │                   │   ├── AliasFor.java
│       │                   │   ├── AliasLinkAnnotationPostProcessor.java
│       │                   │   ├── AliasedAnnotationAttribute.java
│       │                   │   ├── AnnotationAttribute.java
│       │                   │   ├── AnnotationAttributeValueProvider.java
│       │                   │   ├── AnnotationProxy.java
│       │                   │   ├── AnnotationSynthesizer.java
│       │                   │   ├── AnnotationUtil.java
│       │                   │   ├── CacheableAnnotationAttribute.java
│       │                   │   ├── CacheableSynthesizedAnnotationAttributeProcessor.java
│       │                   │   ├── CombinationAnnotationElement.java
│       │                   │   ├── ForceAliasFor.java
│       │                   │   ├── ForceAliasedAnnotationAttribute.java
│       │                   │   ├── GenericSynthesizedAggregateAnnotation.java
│       │                   │   ├── GenericSynthesizedAnnotation.java
│       │                   │   ├── Hierarchical.java
│       │                   │   ├── Link.java
│       │                   │   ├── MirrorFor.java
│       │                   │   ├── MirrorLinkAnnotationPostProcessor.java
│       │                   │   ├── MirroredAnnotationAttribute.java
│       │                   │   ├── PropIgnore.java
│       │                   │   ├── RelationType.java
│       │                   │   ├── SynthesizedAggregateAnnotation.java
│       │                   │   ├── SynthesizedAnnotation.java
│       │                   │   ├── SynthesizedAnnotationAttributeProcessor.java
│       │                   │   ├── SynthesizedAnnotationPostProcessor.java
│       │                   │   ├── SynthesizedAnnotationProxy.java
│       │                   │   ├── SynthesizedAnnotationSelector.java
│       │                   │   ├── WrappedAnnotationAttribute.java
│       │                   │   ├── package-info.java
│       │                   │   └── scanner/
│       │                   │       ├── AbstractTypeAnnotationScanner.java
│       │                   │       ├── AnnotationScanner.java
│       │                   │       ├── ElementAnnotationScanner.java
│       │                   │       ├── EmptyAnnotationScanner.java
│       │                   │       ├── FieldAnnotationScanner.java
│       │                   │       ├── GenericAnnotationScanner.java
│       │                   │       ├── MetaAnnotationScanner.java
│       │                   │       ├── MethodAnnotationScanner.java
│       │                   │       ├── TypeAnnotationScanner.java
│       │                   │       └── package-info.java
│       │                   ├── bean/
│       │                   │   ├── BeanDesc.java
│       │                   │   ├── BeanDescCache.java
│       │                   │   ├── BeanException.java
│       │                   │   ├── BeanInfoCache.java
│       │                   │   ├── BeanPath.java
│       │                   │   ├── BeanUtil.java
│       │                   │   ├── DynaBean.java
│       │                   │   ├── NullWrapperBean.java
│       │                   │   ├── PropDesc.java
│       │                   │   ├── RecordUtil.java
│       │                   │   ├── copier/
│       │                   │   │   ├── AbsCopier.java
│       │                   │   │   ├── BeanCopier.java
│       │                   │   │   ├── BeanToBeanCopier.java
│       │                   │   │   ├── BeanToMapCopier.java
│       │                   │   │   ├── CopyOptions.java
│       │                   │   │   ├── IJSONTypeConverter.java
│       │                   │   │   ├── MapToBeanCopier.java
│       │                   │   │   ├── MapToMapCopier.java
│       │                   │   │   ├── ValueProvider.java
│       │                   │   │   ├── ValueProviderToBeanCopier.java
│       │                   │   │   ├── package-info.java
│       │                   │   │   └── provider/
│       │                   │   │       ├── BeanValueProvider.java
│       │                   │   │       ├── DynaBeanValueProvider.java
│       │                   │   │       ├── MapValueProvider.java
│       │                   │   │       └── package-info.java
│       │                   │   └── package-info.java
│       │                   ├── builder/
│       │                   │   ├── Builder.java
│       │                   │   ├── CompareToBuilder.java
│       │                   │   ├── EqualsBuilder.java
│       │                   │   ├── GenericBuilder.java
│       │                   │   ├── HashCodeBuilder.java
│       │                   │   ├── IDKey.java
│       │                   │   └── package-info.java
│       │                   ├── clone/
│       │                   │   ├── CloneRuntimeException.java
│       │                   │   ├── CloneSupport.java
│       │                   │   ├── Cloneable.java
│       │                   │   ├── DefaultCloneable.java
│       │                   │   └── package-info.java
│       │                   ├── codec/
│       │                   │   ├── BCD.java
│       │                   │   ├── Base16Codec.java
│       │                   │   ├── Base32.java
│       │                   │   ├── Base32Codec.java
│       │                   │   ├── Base58.java
│       │                   │   ├── Base58Codec.java
│       │                   │   ├── Base62.java
│       │                   │   ├── Base62Codec.java
│       │                   │   ├── Base64.java
│       │                   │   ├── Base64Decoder.java
│       │                   │   ├── Base64Encoder.java
│       │                   │   ├── Caesar.java
│       │                   │   ├── Decoder.java
│       │                   │   ├── Encoder.java
│       │                   │   ├── Hashids.java
│       │                   │   ├── Morse.java
│       │                   │   ├── PercentCodec.java
│       │                   │   ├── PunyCode.java
│       │                   │   ├── Rot.java
│       │                   │   └── package-info.java
│       │                   ├── collection/
│       │                   │   ├── ArrayIter.java
│       │                   │   ├── AvgPartition.java
│       │                   │   ├── BoundedPriorityQueue.java
│       │                   │   ├── CollStreamUtil.java
│       │                   │   ├── CollUtil.java
│       │                   │   ├── CollectionUtil.java
│       │                   │   ├── ComputeIter.java
│       │                   │   ├── ConcurrentHashSet.java
│       │                   │   ├── CopiedIter.java
│       │                   │   ├── EnumerationIter.java
│       │                   │   ├── FilterIter.java
│       │                   │   ├── IterChain.java
│       │                   │   ├── IterUtil.java
│       │                   │   ├── IterableIter.java
│       │                   │   ├── IteratorEnumeration.java
│       │                   │   ├── LineIter.java
│       │                   │   ├── ListUtil.java
│       │                   │   ├── NodeListIter.java
│       │                   │   ├── Partition.java
│       │                   │   ├── PartitionIter.java
│       │                   │   ├── RandomAccessAvgPartition.java
│       │                   │   ├── RandomAccessPartition.java
│       │                   │   ├── ResettableIter.java
│       │                   │   ├── RingIndexUtil.java
│       │                   │   ├── SpliteratorUtil.java
│       │                   │   ├── TransCollection.java
│       │                   │   ├── TransIter.java
│       │                   │   ├── TransSpliterator.java
│       │                   │   ├── UniqueKeySet.java
│       │                   │   └── package-info.java
│       │                   ├── comparator/
│       │                   │   ├── BaseFieldComparator.java
│       │                   │   ├── ComparableComparator.java
│       │                   │   ├── ComparatorChain.java
│       │                   │   ├── ComparatorException.java
│       │                   │   ├── CompareUtil.java
│       │                   │   ├── FieldComparator.java
│       │                   │   ├── FieldsComparator.java
│       │                   │   ├── FuncComparator.java
│       │                   │   ├── IndexedComparator.java
│       │                   │   ├── InstanceComparator.java
│       │                   │   ├── LengthComparator.java
│       │                   │   ├── NullComparator.java
│       │                   │   ├── PinyinComparator.java
│       │                   │   ├── PropertyComparator.java
│       │                   │   ├── ReverseComparator.java
│       │                   │   ├── VersionComparator.java
│       │                   │   ├── WindowsExplorerStringComparator.java
│       │                   │   └── package-info.java
│       │                   ├── compiler/
│       │                   │   ├── CompilerException.java
│       │                   │   ├── CompilerUtil.java
│       │                   │   ├── DiagnosticUtil.java
│       │                   │   ├── JavaClassFileManager.java
│       │                   │   ├── JavaClassFileObject.java
│       │                   │   ├── JavaFileObjectUtil.java
│       │                   │   ├── JavaSourceCompiler.java
│       │                   │   ├── JavaSourceFileObject.java
│       │                   │   └── package-info.java
│       │                   ├── compress/
│       │                   │   ├── Deflate.java
│       │                   │   ├── Gzip.java
│       │                   │   ├── ZipCopyVisitor.java
│       │                   │   ├── ZipReader.java
│       │                   │   ├── ZipWriter.java
│       │                   │   └── package-info.java
│       │                   ├── convert/
│       │                   │   ├── AbstractConverter.java
│       │                   │   ├── BasicType.java
│       │                   │   ├── CastUtil.java
│       │                   │   ├── Convert.java
│       │                   │   ├── ConvertException.java
│       │                   │   ├── Converter.java
│       │                   │   ├── ConverterRegistry.java
│       │                   │   ├── NumberChineseFormatter.java
│       │                   │   ├── NumberWithFormat.java
│       │                   │   ├── NumberWordFormatter.java
│       │                   │   ├── TypeConverter.java
│       │                   │   ├── impl/
│       │                   │   │   ├── ArrayConverter.java
│       │                   │   │   ├── AtomicBooleanConverter.java
│       │                   │   │   ├── AtomicIntegerArrayConverter.java
│       │                   │   │   ├── AtomicLongArrayConverter.java
│       │                   │   │   ├── AtomicReferenceConverter.java
│       │                   │   │   ├── BeanConverter.java
│       │                   │   │   ├── BooleanConverter.java
│       │                   │   │   ├── CalendarConverter.java
│       │                   │   │   ├── CastConverter.java
│       │                   │   │   ├── CharacterConverter.java
│       │                   │   │   ├── CharsetConverter.java
│       │                   │   │   ├── ClassConverter.java
│       │                   │   │   ├── CollectionConverter.java
│       │                   │   │   ├── CurrencyConverter.java
│       │                   │   │   ├── DateConverter.java
│       │                   │   │   ├── DurationConverter.java
│       │                   │   │   ├── EntryConverter.java
│       │                   │   │   ├── EnumConverter.java
│       │                   │   │   ├── LocaleConverter.java
│       │                   │   │   ├── MapConverter.java
│       │                   │   │   ├── NumberConverter.java
│       │                   │   │   ├── OptConverter.java
│       │                   │   │   ├── OptionalConverter.java
│       │                   │   │   ├── PairConverter.java
│       │                   │   │   ├── PathConverter.java
│       │                   │   │   ├── PeriodConverter.java
│       │                   │   │   ├── PrimitiveConverter.java
│       │                   │   │   ├── RecordConverter.java
│       │                   │   │   ├── ReferenceConverter.java
│       │                   │   │   ├── StackTraceElementConverter.java
│       │                   │   │   ├── StringConverter.java
│       │                   │   │   ├── TemporalAccessorConverter.java
│       │                   │   │   ├── TimeZoneConverter.java
│       │                   │   │   ├── URIConverter.java
│       │                   │   │   ├── URLConverter.java
│       │                   │   │   ├── UUIDConverter.java
│       │                   │   │   └── package-info.java
│       │                   │   └── package-info.java
│       │                   ├── date/
│       │                   │   ├── BetweenFormatter.java
│       │                   │   ├── CalendarUtil.java
│       │                   │   ├── ChineseDate.java
│       │                   │   ├── DateBetween.java
│       │                   │   ├── DateException.java
│       │                   │   ├── DateField.java
│       │                   │   ├── DateModifier.java
│       │                   │   ├── DatePattern.java
│       │                   │   ├── DateRange.java
│       │                   │   ├── DateTime.java
│       │                   │   ├── DateUnit.java
│       │                   │   ├── DateUtil.java
│       │                   │   ├── GroupTimeInterval.java
│       │                   │   ├── LocalDateTimeUtil.java
│       │                   │   ├── Month.java
│       │                   │   ├── Quarter.java
│       │                   │   ├── StopWatch.java
│       │                   │   ├── SystemClock.java
│       │                   │   ├── TemporalAccessorUtil.java
│       │                   │   ├── TemporalUtil.java
│       │                   │   ├── TimeInterval.java
│       │                   │   ├── TimeZoneUtil.java
│       │                   │   ├── Week.java
│       │                   │   ├── YearQuarter.java
│       │                   │   ├── Zodiac.java
│       │                   │   ├── ZoneUtil.java
│       │                   │   ├── chinese/
│       │                   │   │   ├── ChineseMonth.java
│       │                   │   │   ├── GanZhi.java
│       │                   │   │   ├── LunarFestival.java
│       │                   │   │   ├── LunarInfo.java
│       │                   │   │   ├── SolarTerms.java
│       │                   │   │   └── package-info.java
│       │                   │   ├── format/
│       │                   │   │   ├── AbstractDateBasic.java
│       │                   │   │   ├── DateBasic.java
│       │                   │   │   ├── DateParser.java
│       │                   │   │   ├── DatePrinter.java
│       │                   │   │   ├── FastDateFormat.java
│       │                   │   │   ├── FastDateParser.java
│       │                   │   │   ├── FastDatePrinter.java
│       │                   │   │   ├── FormatCache.java
│       │                   │   │   ├── GlobalCustomFormat.java
│       │                   │   │   └── package-info.java
│       │                   │   └── package-info.java
│       │                   ├── exceptions/
│       │                   │   ├── CheckedUtil.java
│       │                   │   ├── DependencyException.java
│       │                   │   ├── ExceptionUtil.java
│       │                   │   ├── InvocationTargetRuntimeException.java
│       │                   │   ├── NotInitedException.java
│       │                   │   ├── StatefulException.java
│       │                   │   ├── UtilException.java
│       │                   │   ├── ValidateException.java
│       │                   │   └── package-info.java
│       │                   ├── getter/
│       │                   │   ├── ArrayTypeGetter.java
│       │                   │   ├── BasicTypeGetter.java
│       │                   │   ├── GroupedTypeGetter.java
│       │                   │   ├── ListTypeGetter.java
│       │                   │   ├── OptArrayTypeGetter.java
│       │                   │   ├── OptBasicTypeGetter.java
│       │                   │   ├── OptNullBasicTypeFromObjectGetter.java
│       │                   │   ├── OptNullBasicTypeFromStringGetter.java
│       │                   │   ├── OptNullBasicTypeGetter.java
│       │                   │   └── package-info.java
│       │                   ├── img/
│       │                   │   ├── BackgroundRemoval.java
│       │                   │   ├── ColorUtil.java
│       │                   │   ├── FontUtil.java
│       │                   │   ├── GraphicsUtil.java
│       │                   │   ├── Img.java
│       │                   │   ├── ImgUtil.java
│       │                   │   ├── LabColor.java
│       │                   │   ├── ScaleType.java
│       │                   │   ├── gif/
│       │                   │   │   ├── AnimatedGifEncoder.java
│       │                   │   │   ├── GifDecoder.java
│       │                   │   │   ├── LZWEncoder.java
│       │                   │   │   ├── NeuQuant.java
│       │                   │   │   └── package-info.java
│       │                   │   └── package-info.java
│       │                   ├── io/
│       │                   │   ├── AppendableWriter.java
│       │                   │   ├── BOMInputStream.java
│       │                   │   ├── BomReader.java
│       │                   │   ├── BufferUtil.java
│       │                   │   ├── CharsetDetector.java
│       │                   │   ├── FastByteArrayOutputStream.java
│       │                   │   ├── FastByteBuffer.java
│       │                   │   ├── FastStringWriter.java
│       │                   │   ├── FileMagicNumber.java
│       │                   │   ├── FileTypeUtil.java
│       │                   │   ├── FileUtil.java
│       │                   │   ├── IORuntimeException.java
│       │                   │   ├── IoUtil.java
│       │                   │   ├── LimitedInputStream.java
│       │                   │   ├── LineHandler.java
│       │                   │   ├── ManifestUtil.java
│       │                   │   ├── NioUtil.java
│       │                   │   ├── NullOutputStream.java
│       │                   │   ├── StreamProgress.java
│       │                   │   ├── ValidateObjectInputStream.java
│       │                   │   ├── checksum/
│       │                   │   │   ├── CRC16.java
│       │                   │   │   ├── CRC8.java
│       │                   │   │   ├── crc16/
│       │                   │   │   │   ├── CRC16Ansi.java
│       │                   │   │   │   ├── CRC16CCITT.java
│       │                   │   │   │   ├── CRC16CCITTFalse.java
│       │                   │   │   │   ├── CRC16Checksum.java
│       │                   │   │   │   ├── CRC16DNP.java
│       │                   │   │   │   ├── CRC16IBM.java
│       │                   │   │   │   ├── CRC16Maxim.java
│       │                   │   │   │   ├── CRC16Modbus.java
│       │                   │   │   │   ├── CRC16USB.java
│       │                   │   │   │   ├── CRC16X25.java
│       │                   │   │   │   ├── CRC16XModem.java
│       │                   │   │   │   └── package-info.java
│       │                   │   │   └── package-info.java
│       │                   │   ├── copy/
│       │                   │   │   ├── ChannelCopier.java
│       │                   │   │   ├── IoCopier.java
│       │                   │   │   ├── ReaderWriterCopier.java
│       │                   │   │   ├── StreamCopier.java
│       │                   │   │   └── package-info.java
│       │                   │   ├── file/
│       │                   │   │   ├── FileAppender.java
│       │                   │   │   ├── FileCopier.java
│       │                   │   │   ├── FileMode.java
│       │                   │   │   ├── FileNameUtil.java
│       │                   │   │   ├── FileReader.java
│       │                   │   │   ├── FileSystemUtil.java
│       │                   │   │   ├── FileWrapper.java
│       │                   │   │   ├── FileWriter.java
│       │                   │   │   ├── LineReadWatcher.java
│       │                   │   │   ├── LineSeparator.java
│       │                   │   │   ├── PathMover.java
│       │                   │   │   ├── PathUtil.java
│       │                   │   │   ├── Tailer.java
│       │                   │   │   ├── package-info.java
│       │                   │   │   └── visitor/
│       │                   │   │       ├── CopyVisitor.java
│       │                   │   │       ├── DelVisitor.java
│       │                   │   │       ├── MoveVisitor.java
│       │                   │   │       └── package-info.java
│       │                   │   ├── package-info.java
│       │                   │   ├── resource/
│       │                   │   │   ├── BytesResource.java
│       │                   │   │   ├── CharSequenceResource.java
│       │                   │   │   ├── ClassPathResource.java
│       │                   │   │   ├── FileObjectResource.java
│       │                   │   │   ├── FileResource.java
│       │                   │   │   ├── InputStreamResource.java
│       │                   │   │   ├── MultiFileResource.java
│       │                   │   │   ├── MultiResource.java
│       │                   │   │   ├── NoResourceException.java
│       │                   │   │   ├── Resource.java
│       │                   │   │   ├── ResourceUtil.java
│       │                   │   │   ├── StringResource.java
│       │                   │   │   ├── UrlResource.java
│       │                   │   │   ├── VfsResource.java
│       │                   │   │   ├── WebAppResource.java
│       │                   │   │   └── package-info.java
│       │                   │   ├── unit/
│       │                   │   │   ├── DataSize.java
│       │                   │   │   ├── DataSizeUtil.java
│       │                   │   │   ├── DataUnit.java
│       │                   │   │   └── package-info.java
│       │                   │   └── watch/
│       │                   │       ├── SimpleWatcher.java
│       │                   │       ├── WatchAction.java
│       │                   │       ├── WatchException.java
│       │                   │       ├── WatchKind.java
│       │                   │       ├── WatchMonitor.java
│       │                   │       ├── WatchServer.java
│       │                   │       ├── WatchUtil.java
│       │                   │       ├── Watcher.java
│       │                   │       ├── package-info.java
│       │                   │       └── watchers/
│       │                   │           ├── DelayWatcher.java
│       │                   │           ├── IgnoreWatcher.java
│       │                   │           ├── WatcherChain.java
│       │                   │           └── package-info.java
│       │                   ├── lang/
│       │                   │   ├── Assert.java
│       │                   │   ├── Chain.java
│       │                   │   ├── ClassScanner.java
│       │                   │   ├── ConsistentHash.java
│       │                   │   ├── Console.java
│       │                   │   ├── ConsoleTable.java
│       │                   │   ├── DefaultSegment.java
│       │                   │   ├── Dict.java
│       │                   │   ├── Editor.java
│       │                   │   ├── EnumItem.java
│       │                   │   ├── Filter.java
│       │                   │   ├── JarClassLoader.java
│       │                   │   ├── Matcher.java
│       │                   │   ├── ObjectId.java
│       │                   │   ├── Opt.java
│       │                   │   ├── Pair.java
│       │                   │   ├── ParameterizedTypeImpl.java
│       │                   │   ├── PatternPool.java
│       │                   │   ├── Pid.java
│       │                   │   ├── Range.java
│       │                   │   ├── RegexPool.java
│       │                   │   ├── Replacer.java
│       │                   │   ├── ResourceClassLoader.java
│       │                   │   ├── Segment.java
│       │                   │   ├── SimpleCache.java
│       │                   │   ├── Singleton.java
│       │                   │   ├── Snowflake.java
│       │                   │   ├── Tuple.java
│       │                   │   ├── TypeReference.java
│       │                   │   ├── UUID.java
│       │                   │   ├── Validator.java
│       │                   │   ├── Version.java
│       │                   │   ├── WeightListRandom.java
│       │                   │   ├── WeightRandom.java
│       │                   │   ├── ansi/
│       │                   │   │   ├── Ansi8BitColor.java
│       │                   │   │   ├── AnsiBackground.java
│       │                   │   │   ├── AnsiColor.java
│       │                   │   │   ├── AnsiColorWrapper.java
│       │                   │   │   ├── AnsiColors.java
│       │                   │   │   ├── AnsiElement.java
│       │                   │   │   ├── AnsiEncoder.java
│       │                   │   │   ├── AnsiStyle.java
│       │                   │   │   ├── ForeOrBack.java
│       │                   │   │   └── package-info.java
│       │                   │   ├── caller/
│       │                   │   │   ├── Caller.java
│       │                   │   │   ├── CallerUtil.java
│       │                   │   │   ├── SecurityManagerCaller.java
│       │                   │   │   ├── StackTraceCaller.java
│       │                   │   │   └── package-info.java
│       │                   │   ├── copier/
│       │                   │   │   ├── Copier.java
│       │                   │   │   ├── SrcToDestCopier.java
│       │                   │   │   └── package-info.java
│       │                   │   ├── func/
│       │                   │   │   ├── Consumer3.java
│       │                   │   │   ├── Func.java
│       │                   │   │   ├── Func0.java
│       │                   │   │   ├── Func1.java
│       │                   │   │   ├── LambdaUtil.java
│       │                   │   │   ├── Supplier1.java
│       │                   │   │   ├── Supplier2.java
│       │                   │   │   ├── Supplier3.java
│       │                   │   │   ├── Supplier4.java
│       │                   │   │   ├── Supplier5.java
│       │                   │   │   ├── VoidFunc.java
│       │                   │   │   ├── VoidFunc0.java
│       │                   │   │   ├── VoidFunc1.java
│       │                   │   │   └── package-info.java
│       │                   │   ├── generator/
│       │                   │   │   ├── Generator.java
│       │                   │   │   ├── ObjectGenerator.java
│       │                   │   │   ├── ObjectIdGenerator.java
│       │                   │   │   ├── SnowflakeGenerator.java
│       │                   │   │   ├── UUIDGenerator.java
│       │                   │   │   └── package-info.java
│       │                   │   ├── hash/
│       │                   │   │   ├── CityHash.java
│       │                   │   │   ├── Hash.java
│       │                   │   │   ├── Hash128.java
│       │                   │   │   ├── Hash32.java
│       │                   │   │   ├── Hash64.java
│       │                   │   │   ├── KetamaHash.java
│       │                   │   │   ├── MetroHash.java
│       │                   │   │   ├── MurmurHash.java
│       │                   │   │   ├── Number128.java
│       │                   │   │   └── package-info.java
│       │                   │   ├── id/
│       │                   │   │   ├── IdConstants.java
│       │                   │   │   ├── NanoId.java
│       │                   │   │   └── package-info.java
│       │                   │   ├── intern/
│       │                   │   │   ├── InternUtil.java
│       │                   │   │   ├── Interner.java
│       │                   │   │   ├── JdkStringInterner.java
│       │                   │   │   ├── WeakInterner.java
│       │                   │   │   └── package-info.java
│       │                   │   ├── loader/
│       │                   │   │   ├── AtomicLoader.java
│       │                   │   │   ├── LazyFunLoader.java
│       │                   │   │   ├── LazyLoader.java
│       │                   │   │   ├── Loader.java
│       │                   │   │   └── package-info.java
│       │                   │   ├── mutable/
│       │                   │   │   ├── Mutable.java
│       │                   │   │   ├── MutableBool.java
│       │                   │   │   ├── MutableByte.java
│       │                   │   │   ├── MutableDouble.java
│       │                   │   │   ├── MutableFloat.java
│       │                   │   │   ├── MutableInt.java
│       │                   │   │   ├── MutableLong.java
│       │                   │   │   ├── MutableObj.java
│       │                   │   │   ├── MutablePair.java
│       │                   │   │   ├── MutableShort.java
│       │                   │   │   └── package-info.java
│       │                   │   ├── package-info.java
│       │                   │   ├── ref/
│       │                   │   │   ├── PhantomObj.java
│       │                   │   │   ├── Ref.java
│       │                   │   │   ├── ReferenceType.java
│       │                   │   │   ├── SoftObj.java
│       │                   │   │   ├── StrongObj.java
│       │                   │   │   ├── WeakObj.java
│       │                   │   │   └── package-info.java
│       │                   │   ├── reflect/
│       │                   │   │   ├── ActualTypeMapperPool.java
│       │                   │   │   ├── LookupFactory.java
│       │                   │   │   ├── MethodHandleUtil.java
│       │                   │   │   └── package-info.java
│       │                   │   └── tree/
│       │                   │       ├── Node.java
│       │                   │       ├── Tree.java
│       │                   │       ├── TreeBuilder.java
│       │                   │       ├── TreeNode.java
│       │                   │       ├── TreeNodeConfig.java
│       │                   │       ├── TreeUtil.java
│       │                   │       ├── package-info.java
│       │                   │       └── parser/
│       │                   │           ├── DefaultNodeParser.java
│       │                   │           └── NodeParser.java
│       │                   ├── map/
│       │                   │   ├── AbsEntry.java
│       │                   │   ├── BiMap.java
│       │                   │   ├── CamelCaseLinkedMap.java
│       │                   │   ├── CamelCaseMap.java
│       │                   │   ├── CaseInsensitiveLinkedMap.java
│       │                   │   ├── CaseInsensitiveMap.java
│       │                   │   ├── CaseInsensitiveTreeMap.java
│       │                   │   ├── CustomKeyMap.java
│       │                   │   ├── FixedLinkedHashMap.java
│       │                   │   ├── ForestMap.java
│       │                   │   ├── FuncKeyMap.java
│       │                   │   ├── FuncMap.java
│       │                   │   ├── LinkedForestMap.java
│       │                   │   ├── MapBuilder.java
│       │                   │   ├── MapProxy.java
│       │                   │   ├── MapUtil.java
│       │                   │   ├── MapWrapper.java
│       │                   │   ├── ReferenceConcurrentMap.java
│       │                   │   ├── SafeConcurrentHashMap.java
│       │                   │   ├── TableMap.java
│       │                   │   ├── TolerantMap.java
│       │                   │   ├── TransMap.java
│       │                   │   ├── TreeEntry.java
│       │                   │   ├── WeakConcurrentMap.java
│       │                   │   ├── multi/
│       │                   │   │   ├── AbsCollValueMap.java
│       │                   │   │   ├── AbsTable.java
│       │                   │   │   ├── CollectionValueMap.java
│       │                   │   │   ├── ListValueMap.java
│       │                   │   │   ├── RowKeyTable.java
│       │                   │   │   ├── SetValueMap.java
│       │                   │   │   ├── Table.java
│       │                   │   │   └── package-info.java
│       │                   │   ├── package-info.java
│       │                   │   └── reference/
│       │                   │       ├── ReferenceConcurrentMap.java
│       │                   │       ├── SoftConcurrentMap.java
│       │                   │       ├── WeakKeyConcurrentMap.java
│       │                   │       ├── WeakKeyValueConcurrentMap.java
│       │                   │       └── package-info.java
│       │                   ├── math/
│       │                   │   ├── Arrangement.java
│       │                   │   ├── BitStatusUtil.java
│       │                   │   ├── Calculator.java
│       │                   │   ├── Combination.java
│       │                   │   ├── MathUtil.java
│       │                   │   ├── Money.java
│       │                   │   └── package-info.java
│       │                   ├── net/
│       │                   │   ├── DefaultTrustManager.java
│       │                   │   ├── FormUrlencoded.java
│       │                   │   ├── Ipv4Util.java
│       │                   │   ├── LocalPortGenerater.java
│       │                   │   ├── MaskBit.java
│       │                   │   ├── NetUtil.java
│       │                   │   ├── PassAuth.java
│       │                   │   ├── ProxySocketFactory.java
│       │                   │   ├── RFC3986.java
│       │                   │   ├── SSLContextBuilder.java
│       │                   │   ├── SSLProtocols.java
│       │                   │   ├── SSLUtil.java
│       │                   │   ├── URLDecoder.java
│       │                   │   ├── URLEncodeUtil.java
│       │                   │   ├── URLEncoder.java
│       │                   │   ├── UserPassAuthenticator.java
│       │                   │   ├── multipart/
│       │                   │   │   ├── MultipartFormData.java
│       │                   │   │   ├── MultipartRequestInputStream.java
│       │                   │   │   ├── UploadFile.java
│       │                   │   │   ├── UploadFileHeader.java
│       │                   │   │   ├── UploadSetting.java
│       │                   │   │   └── package-info.java
│       │                   │   ├── package-info.java
│       │                   │   └── url/
│       │                   │       ├── UrlBuilder.java
│       │                   │       ├── UrlPath.java
│       │                   │       ├── UrlQuery.java
│       │                   │       └── package-info.java
│       │                   ├── package-info.java
│       │                   ├── stream/
│       │                   │   ├── CollectorUtil.java
│       │                   │   ├── SimpleCollector.java
│       │                   │   ├── StreamUtil.java
│       │                   │   └── package-info.java
│       │                   ├── swing/
│       │                   │   ├── DesktopUtil.java
│       │                   │   ├── RobotUtil.java
│       │                   │   ├── ScreenUtil.java
│       │                   │   ├── clipboard/
│       │                   │   │   ├── ClipboardListener.java
│       │                   │   │   ├── ClipboardMonitor.java
│       │                   │   │   ├── ClipboardUtil.java
│       │                   │   │   ├── ImageSelection.java
│       │                   │   │   ├── StrClipboardListener.java
│       │                   │   │   └── package-info.java
│       │                   │   └── package-info.java
│       │                   ├── text/
│       │                   │   ├── ASCIIStrCache.java
│       │                   │   ├── AntPathMatcher.java
│       │                   │   ├── CharPool.java
│       │                   │   ├── CharSequenceUtil.java
│       │                   │   ├── NamingCase.java
│       │                   │   ├── PasswdStrength.java
│       │                   │   ├── Simhash.java
│       │                   │   ├── StrBuilder.java
│       │                   │   ├── StrFormatter.java
│       │                   │   ├── StrJoiner.java
│       │                   │   ├── StrMatcher.java
│       │                   │   ├── StrPool.java
│       │                   │   ├── StrSplitter.java
│       │                   │   ├── TextSimilarity.java
│       │                   │   ├── UnicodeUtil.java
│       │                   │   ├── csv/
│       │                   │   │   ├── CsvBaseReader.java
│       │                   │   │   ├── CsvConfig.java
│       │                   │   │   ├── CsvData.java
│       │                   │   │   ├── CsvParser.java
│       │                   │   │   ├── CsvReadConfig.java
│       │                   │   │   ├── CsvReader.java
│       │                   │   │   ├── CsvRow.java
│       │                   │   │   ├── CsvRowHandler.java
│       │                   │   │   ├── CsvTokener.java
│       │                   │   │   ├── CsvUtil.java
│       │                   │   │   ├── CsvWriteConfig.java
│       │                   │   │   ├── CsvWriter.java
│       │                   │   │   └── package-info.java
│       │                   │   ├── escape/
│       │                   │   │   ├── Html4Escape.java
│       │                   │   │   ├── Html4Unescape.java
│       │                   │   │   ├── InternalEscapeUtil.java
│       │                   │   │   ├── NumericEntityUnescaper.java
│       │                   │   │   ├── XmlEscape.java
│       │                   │   │   ├── XmlUnescape.java
│       │                   │   │   └── package-info.java
│       │                   │   ├── finder/
│       │                   │   │   ├── CharFinder.java
│       │                   │   │   ├── CharMatcherFinder.java
│       │                   │   │   ├── Finder.java
│       │                   │   │   ├── LengthFinder.java
│       │                   │   │   ├── PatternFinder.java
│       │                   │   │   ├── StrFinder.java
│       │                   │   │   ├── TextFinder.java
│       │                   │   │   └── package-info.java
│       │                   │   ├── package-info.java
│       │                   │   ├── replacer/
│       │                   │   │   ├── LookupReplacer.java
│       │                   │   │   ├── ReplacerChain.java
│       │                   │   │   ├── StrReplacer.java
│       │                   │   │   └── package-info.java
│       │                   │   └── split/
│       │                   │       └── SplitIter.java
│       │                   ├── thread/
│       │                   │   ├── AsyncUtil.java
│       │                   │   ├── BlockPolicy.java
│       │                   │   ├── ConcurrencyTester.java
│       │                   │   ├── DelegatedExecutorService.java
│       │                   │   ├── ExecutorBuilder.java
│       │                   │   ├── FinalizableDelegatedExecutorService.java
│       │                   │   ├── GlobalThreadPool.java
│       │                   │   ├── NamedThreadFactory.java
│       │                   │   ├── RecyclableBatchThreadPoolExecutor.java
│       │                   │   ├── RejectPolicy.java
│       │                   │   ├── SemaphoreRunnable.java
│       │                   │   ├── SyncFinisher.java
│       │                   │   ├── ThreadException.java
│       │                   │   ├── ThreadFactoryBuilder.java
│       │                   │   ├── ThreadUtil.java
│       │                   │   ├── lock/
│       │                   │   │   ├── LockUtil.java
│       │                   │   │   ├── NoLock.java
│       │                   │   │   ├── NoReadWriteLock.java
│       │                   │   │   ├── SegmentLock.java
│       │                   │   │   └── package-info.java
│       │                   │   ├── package-info.java
│       │                   │   └── threadlocal/
│       │                   │       ├── NamedInheritableThreadLocal.java
│       │                   │       ├── NamedThreadLocal.java
│       │                   │       └── package-info.java
│       │                   └── util/
│       │                       ├── ArrayUtil.java
│       │                       ├── BooleanUtil.java
│       │                       ├── ByteUtil.java
│       │                       ├── CharUtil.java
│       │                       ├── CharsetUtil.java
│       │                       ├── ClassLoaderUtil.java
│       │                       ├── ClassUtil.java
│       │                       ├── CoordinateUtil.java
│       │                       ├── CreditCodeUtil.java
│       │                       ├── DesensitizedUtil.java
│       │                       ├── EnumUtil.java
│       │                       ├── EscapeUtil.java
│       │                       ├── HashUtil.java
│       │                       ├── HexUtil.java
│       │                       ├── IdUtil.java
│       │                       ├── IdcardUtil.java
│       │                       ├── JAXBUtil.java
│       │                       ├── JNDIUtil.java
│       │                       ├── JdkUtil.java
│       │                       ├── ModifierUtil.java
│       │                       ├── NumberUtil.java
│       │                       ├── ObjUtil.java
│       │                       ├── ObjectUtil.java
│       │                       ├── PageUtil.java
│       │                       ├── PhoneUtil.java
│       │                       ├── PrimitiveArrayUtil.java
│       │                       ├── RadixUtil.java
│       │                       ├── RandomUtil.java
│       │                       ├── ReUtil.java
│       │                       ├── ReferenceUtil.java
│       │                       ├── ReflectUtil.java
│       │                       ├── RuntimeUtil.java
│       │                       ├── SerializeUtil.java
│       │                       ├── ServiceLoaderUtil.java
│       │                       ├── StrUtil.java
│       │                       ├── SystemPropsUtil.java
│       │                       ├── TypeUtil.java
│       │                       ├── URLUtil.java
│       │                       ├── VersionUtil.java
│       │                       ├── XmlUtil.java
│       │                       ├── ZipUtil.java
│       │                       └── package-info.java
│       └── test/
│           ├── java/
│           │   └── cn/
│           │       └── hutool/
│           │           └── core/
│           │               ├── annotation/
│           │               │   ├── AbstractWrappedAnnotationAttributeTest.java
│           │               │   ├── AliasAnnotationPostProcessorTest.java
│           │               │   ├── AliasLinkAnnotationPostProcessorTest.java
│           │               │   ├── AliasedAnnotationAttributeTest.java
│           │               │   ├── AnnotationForTest.java
│           │               │   ├── AnnotationUtilTest.java
│           │               │   ├── CacheableAnnotationAttributeTest.java
│           │               │   ├── CacheableSynthesizedAnnotationAttributeProcessorTest.java
│           │               │   ├── ForceAliasedAnnotationAttributeTest.java
│           │               │   ├── GenericSynthesizedAggregateAnnotationTest.java
│           │               │   ├── MirrorLinkAnnotationPostProcessorTest.java
│           │               │   ├── MirroredAnnotationAttributeTest.java
│           │               │   ├── RepeatAnnotationForTest.java
│           │               │   ├── SynthesizedAnnotationSelectorTest.java
│           │               │   ├── TestIssueI8CLBJ.java
│           │               │   └── scanner/
│           │               │       ├── AnnotationForScannerTest.java
│           │               │       ├── ElementAnnotationScannerTest.java
│           │               │       ├── FieldAnnotationScannerTest.java
│           │               │       ├── GenericAnnotationScannerTest.java
│           │               │       ├── MateAnnotationScannerTest.java
│           │               │       ├── MethodAnnotationScannerTest.java
│           │               │       └── TypeAnnotationScannerTest.java
│           │               ├── bean/
│           │               │   ├── BeanCopyMappingTest.java
│           │               │   ├── BeanDescTest.java
│           │               │   ├── BeanPathTest.java
│           │               │   ├── BeanUtilTest.java
│           │               │   ├── DynaBeanTest.java
│           │               │   ├── Issue1687Test.java
│           │               │   ├── Issue2009Test.java
│           │               │   ├── Issue2082Test.java
│           │               │   ├── Issue2202Test.java
│           │               │   ├── Issue2697Test.java
│           │               │   ├── Issue3091Test.java
│           │               │   ├── Issue3452Test.java
│           │               │   ├── Issue3497Test.java
│           │               │   ├── Issue3645Test.java
│           │               │   ├── Issue3702Test.java
│           │               │   ├── IssueI80FP4Test.java
│           │               │   ├── IssueI8JASOTest.java
│           │               │   ├── IssueIAYGT0Test.java
│           │               │   ├── IssueIBLTZWTest.java
│           │               │   ├── IssueICHM3OTest.java
│           │               │   └── copier/
│           │               │       ├── BeanCopierTest.java
│           │               │       └── Issue2718Test.java
│           │               ├── builder/
│           │               │   └── GenericBuilderTest.java
│           │               ├── clone/
│           │               │   ├── CloneTest.java
│           │               │   └── DefaultCloneTest.java
│           │               ├── codec/
│           │               │   ├── BCDTest.java
│           │               │   ├── Base32Test.java
│           │               │   ├── Base58Test.java
│           │               │   ├── Base62Test.java
│           │               │   ├── Base64Test.java
│           │               │   ├── CaesarTest.java
│           │               │   ├── HashidsTest.java
│           │               │   ├── MorseTest.java
│           │               │   ├── PunyCodeTest.java
│           │               │   └── RotTest.java
│           │               ├── collection/
│           │               │   ├── CollStreamUtilTest.java
│           │               │   ├── CollUtilTest.java
│           │               │   ├── FilterIterTest.java
│           │               │   ├── IterUtilTest.java
│           │               │   ├── ListUtilTest.java
│           │               │   ├── MapProxyTest.java
│           │               │   ├── PartitionIterTest.java
│           │               │   ├── RingIndexUtilTest.java
│           │               │   └── UniqueKeySetTest.java
│           │               ├── comparator/
│           │               │   ├── ArrayIndexedComparator.java
│           │               │   ├── CompareUtilTest.java
│           │               │   ├── IndexedComparatorTest.java
│           │               │   ├── Issue3259Test.java
│           │               │   ├── PropertyComparatorTest.java
│           │               │   ├── VersionComparatorTest.java
│           │               │   └── WindowsExplorerStringComparatorTest.java
│           │               ├── compiler/
│           │               │   └── JavaSourceCompilerTest.java
│           │               ├── compress/
│           │               │   ├── IssueI5DRU0Test.java
│           │               │   ├── IssueIAGYDGTest.java
│           │               │   ├── ZipReaderTest.java
│           │               │   └── ZipWriterTest.java
│           │               ├── convert/
│           │               │   ├── CastUtilTest.java
│           │               │   ├── ConvertOtherTest.java
│           │               │   ├── ConvertTest.java
│           │               │   ├── ConvertToArrayTest.java
│           │               │   ├── ConvertToBeanTest.java
│           │               │   ├── ConvertToBooleanTest.java
│           │               │   ├── ConvertToCollectionTest.java
│           │               │   ├── ConvertToNumberTest.java
│           │               │   ├── ConvertToSBCAndDBCTest.java
│           │               │   ├── ConverterRegistryTest.java
│           │               │   ├── DateConvertTest.java
│           │               │   ├── EnumConvertTest.java
│           │               │   ├── Issue2611Test.java
│           │               │   ├── Issue3241Test.java
│           │               │   ├── IssueI7WJHHTest.java
│           │               │   ├── IssueIALV38Test.java
│           │               │   ├── MapConvertTest.java
│           │               │   ├── NumberChineseFormatterTest.java
│           │               │   ├── NumberConverterTest.java
│           │               │   ├── NumberWordFormatTest.java
│           │               │   ├── NumberWordFormatterTest.java
│           │               │   ├── PrimitiveConvertTest.java
│           │               │   ├── StringConvertTest.java
│           │               │   ├── TemporalAccessorConverterTest.java
│           │               │   └── ToBytesTest.java
│           │               ├── date/
│           │               │   ├── BetweenFormatterTest.java
│           │               │   ├── CalendarUtilTest.java
│           │               │   ├── ChineseDateTest.java
│           │               │   ├── DateBetweenTest.java
│           │               │   ├── DateFieldTest.java
│           │               │   ├── DateModifierTest.java
│           │               │   ├── DateRangeTest.java
│           │               │   ├── DateTimeTest.java
│           │               │   ├── DateUtilTest.java
│           │               │   ├── FastDateFormatTest.java
│           │               │   ├── GanzhiTest.java
│           │               │   ├── Issue2612Test.java
│           │               │   ├── Issue2981Test.java
│           │               │   ├── Issue3011Test.java
│           │               │   ├── Issue3036Test.java
│           │               │   ├── Issue3301Test.java
│           │               │   ├── Issue3348Test.java
│           │               │   ├── Issue3608Test.java
│           │               │   ├── Issue3798Test.java
│           │               │   ├── IssueI7QI6RTest.java
│           │               │   ├── IssueI7XMYWTest.java
│           │               │   ├── IssueI82Y1LTest.java
│           │               │   ├── IssueI97WU6Test.java
│           │               │   ├── IssueI9C2D4Test.java
│           │               │   ├── IssueIB8OFSTest.java
│           │               │   ├── IssueIB9NPUTest.java
│           │               │   ├── IssueIBB6I5Test.java
│           │               │   ├── IssueIC00HGTest.java
│           │               │   ├── IssueIDFMXJTest.java
│           │               │   ├── LocalDateTimeUtilTest.java
│           │               │   ├── MonthTest.java
│           │               │   ├── QuarterTest.java
│           │               │   ├── TemporalAccessorUtilTest.java
│           │               │   ├── TimeIntervalTest.java
│           │               │   ├── TimeZoneTest.java
│           │               │   ├── WeekTest.java
│           │               │   ├── YearQuarterTest.java
│           │               │   ├── ZodiacTest.java
│           │               │   ├── ZoneUtilTest.java
│           │               │   └── chinese/
│           │               │       ├── IssueI5YB1ATest.java
│           │               │       ├── IssueICL1BTTest.java
│           │               │       └── SolarTermsTest.java
│           │               ├── exceptions/
│           │               │   ├── CheckedUtilTest.java
│           │               │   └── ExceptionUtilTest.java
│           │               ├── img/
│           │               │   ├── FontUtilTest.java
│           │               │   ├── ImgTest.java
│           │               │   ├── ImgUtilTest.java
│           │               │   ├── Issue2735Test.java
│           │               │   └── IssueI8L8UATest.java
│           │               ├── io/
│           │               │   ├── BufferUtilTest.java
│           │               │   ├── CharsetDetectorTest.java
│           │               │   ├── ClassPathResourceTest.java
│           │               │   ├── FileCopierTest.java
│           │               │   ├── FileReaderTest.java
│           │               │   ├── FileTypeUtilTest.java
│           │               │   ├── FileUtilTest.java
│           │               │   ├── IoUtilTest.java
│           │               │   ├── Issue3846Test.java
│           │               │   ├── ManifestUtilTest.java
│           │               │   ├── WatchMonitorTest.java
│           │               │   ├── checksum/
│           │               │   │   ├── CRC16Test.java
│           │               │   │   └── CrcTest.java
│           │               │   ├── file/
│           │               │   │   ├── FileNameUtilTest.java
│           │               │   │   ├── FileSystemUtilTest.java
│           │               │   │   ├── FileWriterTest.java
│           │               │   │   ├── Issue3557Test.java
│           │               │   │   ├── IssueIAB65VTest.java
│           │               │   │   ├── PathUtilTest.java
│           │               │   │   └── TailerTest.java
│           │               │   ├── resource/
│           │               │   │   └── ResourceUtilTest.java
│           │               │   └── unit/
│           │               │       └── DataSizeUtilTest.java
│           │               ├── lang/
│           │               │   ├── AssertTest.java
│           │               │   ├── ClassScanerTest.java
│           │               │   ├── ConsoleTableTest.java
│           │               │   ├── ConsoleTest.java
│           │               │   ├── DictTest.java
│           │               │   ├── IssueIAOGDRTest.java
│           │               │   ├── NanoIdTest.java
│           │               │   ├── ObjectIdTest.java
│           │               │   ├── OptTest.java
│           │               │   ├── RangeTest.java
│           │               │   ├── SimhashTest.java
│           │               │   ├── SimpleCacheTest.java
│           │               │   ├── SingletonTest.java
│           │               │   ├── SnowflakeTest.java
│           │               │   ├── StrFormatterTest.java
│           │               │   ├── TupleTest.java
│           │               │   ├── UUIDTest.java
│           │               │   ├── ValidatorTest.java
│           │               │   ├── WeightListRandomTest.java
│           │               │   ├── WeightRandomTest.java
│           │               │   ├── ansi/
│           │               │   │   └── AnsiEncoderTest.java
│           │               │   ├── caller/
│           │               │   │   ├── CallerTest.java
│           │               │   │   └── CallerUtilTest.java
│           │               │   ├── func/
│           │               │   │   └── LambdaUtilTest.java
│           │               │   ├── hash/
│           │               │   │   ├── CityHashTest.java
│           │               │   │   ├── MetroHashTest.java
│           │               │   │   └── MurmurHashTest.java
│           │               │   ├── intern/
│           │               │   │   └── InternUtilTest.java
│           │               │   ├── loader/
│           │               │   │   └── LazyFunLoaderTest.java
│           │               │   ├── reflect/
│           │               │   │   ├── ActualTypeMapperPoolTest.java
│           │               │   │   └── MethodHandleUtilTest.java
│           │               │   ├── test/
│           │               │   │   └── bean/
│           │               │   │       ├── ExamInfoDict.java
│           │               │   │       ├── UserInfoDict.java
│           │               │   │       └── UserInfoRedundCount.java
│           │               │   └── tree/
│           │               │       ├── Issue2279Test.java
│           │               │       ├── IssueI795INTest.java
│           │               │       ├── IssueI9PDVFTest.java
│           │               │       ├── IssueIAUSHRTest.java
│           │               │       ├── Issues2538Test.java
│           │               │       ├── TreeBuilderTest.java
│           │               │       ├── TreeSearchTest.java
│           │               │       └── TreeTest.java
│           │               ├── map/
│           │               │   ├── BiMapTest.java
│           │               │   ├── CamelCaseMapTest.java
│           │               │   ├── CaseInsensitiveMapTest.java
│           │               │   ├── CollValueMapTest.java
│           │               │   ├── FuncMapTest.java
│           │               │   ├── IssueI88R5MTest.java
│           │               │   ├── LinkedForestMapTest.java
│           │               │   ├── MapBuilderTest.java
│           │               │   ├── MapUtilTest.java
│           │               │   ├── RowKeyTableTest.java
│           │               │   ├── TableMapTest.java
│           │               │   ├── TolerantMapTest.java
│           │               │   └── WeakConcurrentMapTest.java
│           │               ├── math/
│           │               │   ├── ArrangementTest.java
│           │               │   ├── CalculatorTest.java
│           │               │   ├── CombinationTest.java
│           │               │   └── MoneyTest.java
│           │               ├── net/
│           │               │   ├── FormUrlencodedTest.java
│           │               │   ├── Ipv4UtilTest.java
│           │               │   ├── IssueI70UPUTest.java
│           │               │   ├── NetUtilTest.java
│           │               │   ├── RFC3986Test.java
│           │               │   ├── UrlBuilderTest.java
│           │               │   ├── UrlDecoderTest.java
│           │               │   └── UrlQueryTest.java
│           │               ├── stream/
│           │               │   ├── CollectorUtilTest.java
│           │               │   └── StreamUtilTest.java
│           │               ├── swing/
│           │               │   ├── ClipboardMonitorTest.java
│           │               │   ├── ClipboardUtilTest.java
│           │               │   ├── DesktopUtilTest.java
│           │               │   └── RobotUtilTest.java
│           │               ├── text/
│           │               │   ├── AntPathMatcherTest.java
│           │               │   ├── CharSequenceUtilTest.java
│           │               │   ├── IssueI96LWHTest.java
│           │               │   ├── NamingCaseTest.java
│           │               │   ├── PasswdStrengthTest.java
│           │               │   ├── StrBuilderTest.java
│           │               │   ├── StrJoinerTest.java
│           │               │   ├── StrMatcherTest.java
│           │               │   ├── TextSimilarityTest.java
│           │               │   ├── UnicodeUtilTest.java
│           │               │   ├── csv/
│           │               │   │   ├── CsvParserTest.java
│           │               │   │   ├── CsvReaderTest.java
│           │               │   │   ├── CsvUtilTest.java
│           │               │   │   ├── CsvWriterTest.java
│           │               │   │   ├── Issue3705Test.java
│           │               │   │   ├── IssueI91VF1Test.java
│           │               │   │   ├── IssueIA8WE0Test.java
│           │               │   │   ├── IssueIB5UQ8Test.java
│           │               │   │   ├── IssueICRMKATest.java
│           │               │   │   └── Pr1244Test.java
│           │               │   ├── finder/
│           │               │   │   └── CharFinderTest.java
│           │               │   └── split/
│           │               │       ├── SplitIterTest.java
│           │               │       └── StrSplitterTest.java
│           │               ├── thread/
│           │               │   ├── AsyncUtilTest.java
│           │               │   ├── ConcurrencyTesterTest.java
│           │               │   ├── ExecutorBuilderTest.java
│           │               │   ├── RecyclableBatchThreadPoolExecutorTest.java
│           │               │   ├── SegmentLockTest.java
│           │               │   ├── SyncFinisherTest.java
│           │               │   └── ThreadUtilTest.java
│           │               └── util/
│           │                   ├── ArrayUtilTest.java
│           │                   ├── BooleanUtilTest.java
│           │                   ├── ByteUtilTest.java
│           │                   ├── CharUtilTest.java
│           │                   ├── ClassLoaderUtilTest.java
│           │                   ├── ClassUtilTest.java
│           │                   ├── CoordinateUtilTest.java
│           │                   ├── CreditCodeUtilTest.java
│           │                   ├── DesensitizedUtilTest.java
│           │                   ├── EnumUtilTest.java
│           │                   ├── EscapeUtilTest.java
│           │                   ├── HashUtilTest.java
│           │                   ├── HexUtilTest.java
│           │                   ├── IdUtilTest.java
│           │                   ├── IdcardUtilTest.java
│           │                   ├── Issue3136Test.java
│           │                   ├── Issue3423Test.java
│           │                   ├── Issue3516Test.java
│           │                   ├── Issue3660Test.java
│           │                   ├── Issue3809Test.java
│           │                   ├── IssueI7CRIWTest.java
│           │                   ├── IssueI9IDAGTest.java
│           │                   ├── IssueI9K494Test.java
│           │                   ├── IssueI9NSZ4Test.java
│           │                   ├── IssueI9UK5VTest.java
│           │                   ├── IssueIAQ16ETest.java
│           │                   ├── IssueIB95X4Test.java
│           │                   ├── IssueIBP6T1Test.java
│           │                   ├── IssueICA9S5Test.java
│           │                   ├── IssueICOJVZTest.java
│           │                   ├── JAXBUtilTest.java
│           │                   ├── JNDIUtilTest.java
│           │                   ├── ModifierUtilTest.java
│           │                   ├── NumberUtilTest.java
│           │                   ├── ObjectUtilTest.java
│           │                   ├── PageUtilTest.java
│           │                   ├── PhoneUtilTest.java
│           │                   ├── RadixUtilTest.java
│           │                   ├── RandomUtilTest.java
│           │                   ├── ReUtilTest.java
│           │                   ├── ReferenceUtilTest.java
│           │                   ├── ReflectUtilTest.java
│           │                   ├── RuntimeUtilTest.java
│           │                   ├── StrUtilTest.java
│           │                   ├── TypeUtilTest.java
│           │                   ├── URLUtilTest.java
│           │                   ├── VersionUtilTest.java
│           │                   ├── XmlUtilTest.java
│           │                   └── ZipUtilTest.java
│           └── resources/
│               ├── 1_psi_index_0.txt
│               ├── issueI91VF1.csv
│               ├── issueIA8WE0.csv
│               ├── issueICRMKA.csv
│               ├── test-compile/
│               │   ├── a/
│               │   │   └── A.java
│               │   ├── b/
│               │   │   └── B.java
│               │   ├── c/
│               │   │   └── C.java
│               │   └── error/
│               │       └── ErrorClazz.java
│               ├── test-zip/
│               │   ├── addFile.txt
│               │   └── test-add/
│               │       └── test.txt
│               ├── test.csv
│               ├── test.properties
│               ├── test.xml
│               ├── test_bean.csv
│               ├── test_lines.csv
│               ├── test_lines_cr.csv
│               ├── test_lines_crlf.csv
│               └── text.txt
├── hutool-cron/
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   └── java/
│       │       └── cn/
│       │           └── hutool/
│       │               └── cron/
│       │                   ├── CronConfig.java
│       │                   ├── CronException.java
│       │                   ├── CronTimer.java
│       │                   ├── CronUtil.java
│       │                   ├── Scheduler.java
│       │                   ├── TaskExecutor.java
│       │                   ├── TaskExecutorManager.java
│       │                   ├── TaskLauncher.java
│       │                   ├── TaskLauncherManager.java
│       │                   ├── TaskTable.java
│       │                   ├── listener/
│       │                   │   ├── SimpleTaskListener.java
│       │                   │   ├── TaskListener.java
│       │                   │   ├── TaskListenerManager.java
│       │                   │   └── package-info.java
│       │                   ├── package-info.java
│       │                   ├── pattern/
│       │                   │   ├── CronPattern.java
│       │                   │   ├── CronPatternBuilder.java
│       │                   │   ├── CronPatternUtil.java
│       │                   │   ├── Part.java
│       │                   │   ├── PatternUtil.java
│       │                   │   ├── matcher/
│       │                   │   │   ├── AlwaysTrueMatcher.java
│       │                   │   │   ├── BoolArrayMatcher.java
│       │                   │   │   ├── DayOfMonthMatcher.java
│       │                   │   │   ├── PartMatcher.java
│       │                   │   │   ├── PatternMatcher.java
│       │                   │   │   ├── YearValueMatcher.java
│       │                   │   │   └── package-info.java
│       │                   │   ├── package-info.java
│       │                   │   └── parser/
│       │                   │       ├── PartParser.java
│       │                   │       ├── PatternParser.java
│       │                   │       └── package-info.java
│       │                   ├── task/
│       │                   │   ├── CronTask.java
│       │                   │   ├── InvokeTask.java
│       │                   │   ├── RunnableTask.java
│       │                   │   ├── Task.java
│       │                   │   └── package-info.java
│       │                   └── timingwheel/
│       │                       ├── SystemTimer.java
│       │                       ├── TimerTask.java
│       │                       ├── TimerTaskList.java
│       │                       ├── TimingWheel.java
│       │                       └── package-info.java
│       └── test/
│           ├── java/
│           │   └── cn/
│           │       └── hutool/
│           │           └── cron/
│           │               ├── TaskTableTest.java
│           │               ├── demo/
│           │               │   ├── AddAndRemoveMainTest.java
│           │               │   ├── CronTest.java
│           │               │   ├── DeamonMainTest.java
│           │               │   ├── JobMainTest.java
│           │               │   ├── TestJob.java
│           │               │   └── TestJob2.java
│           │               ├── pattern/
│           │               │   ├── CronPatternBuilderTest.java
│           │               │   ├── CronPatternNextMatchTest.java
│           │               │   ├── CronPatternTest.java
│           │               │   ├── CronPatternUtilTest.java
│           │               │   ├── Issue3685Test.java
│           │               │   ├── Issue4006Test.java
│           │               │   ├── Issue4056Test.java
│           │               │   ├── IssueI7SMP7Test.java
│           │               │   ├── IssueI82CSHTest.java
│           │               │   └── IssueI9FQUATest.java
│           │               └── timingwheel/
│           │                   └── Issue3090Test.java
│           └── resources/
│               └── config/
│                   └── cron.setting
├── hutool-crypto/
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   └── java/
│       │       └── cn/
│       │           └── hutool/
│       │               └── crypto/
│       │                   ├── ASN1Util.java
│       │                   ├── BCUtil.java
│       │                   ├── CipherMode.java
│       │                   ├── CipherWrapper.java
│       │                   ├── CryptoException.java
│       │                   ├── ECKeyUtil.java
│       │                   ├── GlobalBouncyCastleProvider.java
│       │                   ├── KeyUtil.java
│       │                   ├── Mode.java
│       │                   ├── OpensslKeyUtil.java
│       │                   ├── Padding.java
│       │                   ├── PemUtil.java
│       │                   ├── ProviderFactory.java
│       │                   ├── SecureUtil.java
│       │                   ├── SignUtil.java
│       │                   ├── SmUtil.java
│       │                   ├── SpecUtil.java
│       │                   ├── asymmetric/
│       │                   │   ├── AbstractAsymmetricCrypto.java
│       │                   │   ├── AsymmetricAlgorithm.java
│       │                   │   ├── AsymmetricCrypto.java
│       │                   │   ├── AsymmetricDecryptor.java
│       │                   │   ├── AsymmetricEncryptor.java
│       │                   │   ├── BaseAsymmetric.java
│       │                   │   ├── ECIES.java
│       │                   │   ├── KeyType.java
│       │                   │   ├── RSA.java
│       │                   │   ├── SM2.java
│       │                   │   ├── Sign.java
│       │                   │   ├── SignAlgorithm.java
│       │                   │   └── package-info.java
│       │                   ├── digest/
│       │                   │   ├── Argon2.java
│       │                   │   ├── BCrypt.java
│       │                   │   ├── DigestAlgorithm.java
│       │                   │   ├── DigestUtil.java
│       │                   │   ├── Digester.java
│       │                   │   ├── DigesterFactory.java
│       │                   │   ├── HMac.java
│       │                   │   ├── HmacAlgorithm.java
│       │                   │   ├── MD5.java
│       │                   │   ├── SM3.java
│       │                   │   ├── mac/
│       │                   │   │   ├── BCHMacEngine.java
│       │                   │   │   ├── BCMacEngine.java
│       │                   │   │   ├── CBCBlockCipherMacEngine.java
│       │                   │   │   ├── DefaultHMacEngine.java
│       │                   │   │   ├── Mac.java
│       │                   │   │   ├── MacEngine.java
│       │                   │   │   ├── MacEngineFactory.java
│       │                   │   │   ├── SM4MacEngine.java
│       │                   │   │   └── package-info.java
│       │                   │   ├── otp/
│       │                   │   │   ├── HOTP.java
│       │                   │   │   ├── TOTP.java
│       │                   │   │   └── package-info.java
│       │                   │   └── package-info.java
│       │                   ├── package-info.java
│       │                   └── symmetric/
│       │                       ├── AES.java
│       │                       ├── ChaCha20.java
│       │                       ├── DES.java
│       │                       ├── DESede.java
│       │                       ├── PBKDF2.java
│       │                       ├── RC4.java
│       │                       ├── SM4.java
│       │                       ├── SymmetricAlgorithm.java
│       │                       ├── SymmetricCrypto.java
│       │                       ├── SymmetricDecryptor.java
│       │                       ├── SymmetricEncryptor.java
│       │                       ├── Vigenere.java
│       │                       ├── XXTEA.java
│       │                       ├── ZUC.java
│       │                       ├── fpe/
│       │                       │   └── FPE.java
│       │                       └── package-info.java
│       └── test/
│           ├── java/
│           │   └── cn/
│           │       └── hutool/
│           │           └── crypto/
│           │               ├── BCUtilTest.java
│           │               ├── Issue3512Test.java
│           │               ├── KeyUtilTest.java
│           │               ├── OpensslKeyUtilTest.java
│           │               ├── PemUtilTest.java
│           │               ├── SecureUtilTest.java
│           │               ├── SmTest.java
│           │               ├── asymmetric/
│           │               │   ├── ECIESTest.java
│           │               │   ├── Issue3925Test.java
│           │               │   ├── IssueI6OQJATest.java
│           │               │   ├── IssueID1EIKTest.java
│           │               │   ├── RSATest.java
│           │               │   ├── SM2Test.java
│           │               │   └── SignTest.java
│           │               ├── digest/
│           │               │   ├── Argon2Test.java
│           │               │   ├── BCryptTest.java
│           │               │   ├── CBCBlockCipherMacEngineTest.java
│           │               │   ├── DigestTest.java
│           │               │   ├── HmacTest.java
│           │               │   ├── Md5Test.java
│           │               │   └── OTPTest.java
│           │               └── symmetric/
│           │                   ├── AESTest.java
│           │                   ├── ChaCha20Test.java
│           │                   ├── DesTest.java
│           │                   ├── PBKDF2Test.java
│           │                   ├── RC4Test.java
│           │                   ├── Sm4StreamTest.java
│           │                   ├── SymmetricTest.java
│           │                   ├── TEATest.java
│           │                   ├── ZucTest.java
│           │                   └── fpe/
│           │                       └── FPETest.java
│           └── resources/
│               ├── asn1.key
│               ├── test_ec_certificate.cer
│               ├── test_ec_certificate_request.csr
│               ├── test_ec_encrypted_private_key.key
│               ├── test_ec_pkcs8_private_key.key
│               ├── test_ec_public_key.pem
│               ├── test_ec_sec1_private_key.pem
│               ├── test_private_key.pem
│               └── test_public_key.csr
├── hutool-db/
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   └── java/
│       │       └── cn/
│       │           └── hutool/
│       │               └── db/
│       │                   ├── AbstractDb.java
│       │                   ├── ActiveEntity.java
│       │                   ├── DaoTemplate.java
│       │                   ├── Db.java
│       │                   ├── DbRuntimeException.java
│       │                   ├── DbUtil.java
│       │                   ├── DialectRunner.java
│       │                   ├── Entity.java
│       │                   ├── GlobalDbConfig.java
│       │                   ├── Page.java
│       │                   ├── PageResult.java
│       │                   ├── Session.java
│       │                   ├── SqlConnRunner.java
│       │                   ├── StatementUtil.java
│       │                   ├── ThreadLocalConnection.java
│       │                   ├── dialect/
│       │                   │   ├── Dialect.java
│       │                   │   ├── DialectFactory.java
│       │                   │   ├── DialectName.java
│       │                   │   ├── DriverNamePool.java
│       │                   │   ├── DriverUtil.java
│       │                   │   ├── impl/
│       │                   │   │   ├── AnsiSqlDialect.java
│       │                   │   │   ├── DmDialect.java
│       │                   │   │   ├── H2Dialect.java
│       │                   │   │   ├── HanaDialect.java
│       │                   │   │   ├── MysqlDialect.java
│       │                   │   │   ├── OracleDialect.java
│       │                   │   │   ├── PhoenixDialect.java
│       │                   │   │   ├── PostgresqlDialect.java
│       │                   │   │   ├── SqlServer2012Dialect.java
│       │                   │   │   ├── Sqlite3Dialect.java
│       │                   │   │   └── package-info.java
│       │                   │   └── package-info.java
│       │                   ├── ds/
│       │                   │   ├── AbstractDSFactory.java
│       │                   │   ├── DSFactory.java
│       │                   │   ├── DataSourceWrapper.java
│       │                   │   ├── GlobalDSFactory.java
│       │                   │   ├── bee/
│       │                   │   │   ├── BeeDSFactory.java
│       │                   │   │   └── package-info.java
│       │                   │   ├── c3p0/
│       │                   │   │   ├── C3p0DSFactory.java
│       │                   │   │   └── package-info.java
│       │                   │   ├── dbcp/
│       │                   │   │   ├── DbcpDSFactory.java
│       │                   │   │   └── package-info.java
│       │                   │   ├── druid/
│       │                   │   │   ├── DruidDSFactory.java
│       │                   │   │   └── package-info.java
│       │                   │   ├── hikari/
│       │                   │   │   ├── HikariDSFactory.java
│       │                   │   │   └── package-info.java
│       │                   │   ├── jndi/
│       │                   │   │   ├── JndiDSFactory.java
│       │                   │   │   └── package-info.java
│       │                   │   ├── package-info.java
│       │                   │   ├── pooled/
│       │                   │   │   ├── ConnectionWraper.java
│       │                   │   │   ├── DbConfig.java
│       │                   │   │   ├── DbSetting.java
│       │                   │   │   ├── PooledConnection.java
│       │                   │   │   ├── PooledDSFactory.java
│       │                   │   │   ├── PooledDataSource.java
│       │                   │   │   └── package-info.java
│       │                   │   ├── simple/
│       │                   │   │   ├── AbstractDataSource.java
│       │                   │   │   ├── SimpleDSFactory.java
│       │                   │   │   ├── SimpleDataSource.java
│       │                   │   │   └── package-info.java
│       │                   │   └── tomcat/
│       │                   │       ├── TomcatDSFactory.java
│       │                   │       └── package-info.java
│       │                   ├── handler/
│       │                   │   ├── BeanHandler.java
│       │                   │   ├── BeanListHandler.java
│       │                   │   ├── EntityHandler.java
│       │                   │   ├── EntityListHandler.java
│       │                   │   ├── EntitySetHandler.java
│       │                   │   ├── HandleHelper.java
│       │                   │   ├── NumberHandler.java
│       │                   │   ├── PageResultHandler.java
│       │                   │   ├── RsHandler.java
│       │                   │   ├── StringHandler.java
│       │                   │   ├── ValueListHandler.java
│       │                   │   └── package-info.java
│       │                   ├── meta/
│       │                   │   ├── Column.java
│       │                   │   ├── ColumnIndexInfo.java
│       │                   │   ├── IndexInfo.java
│       │                   │   ├── JdbcType.java
│       │                   │   ├── MetaUtil.java
│       │                   │   ├── Table.java
│       │                   │   ├── TableType.java
│       │                   │   └── package-info.java
│       │                   ├── nosql/
│       │                   │   ├── mongo/
│       │                   │   │   ├── MongoDS.java
│       │                   │   │   ├── MongoFactory.java
│       │                   │   │   └── package-info.java
│       │                   │   ├── package-info.java
│       │                   │   └── redis/
│       │                   │       ├── RedisDS.java
│       │                   │       └── package-info.java
│       │                   ├── package-info.java
│       │                   ├── sql/
│       │                   │   ├── Condition.java
│       │                   │   ├── ConditionBuilder.java
│       │                   │   ├── ConditionGroup.java
│       │                   │   ├── Direction.java
│       │                   │   ├── LogicalOperator.java
│       │                   │   ├── NamedSql.java
│       │                   │   ├── Order.java
│       │                   │   ├── Query.java
│       │                   │   ├── SqlBuilder.java
│       │                   │   ├── SqlExecutor.java
│       │                   │   ├── SqlFormatter.java
│       │                   │   ├── SqlLog.java
│       │                   │   ├── SqlUtil.java
│       │                   │   ├── StatementWrapper.java
│       │                   │   ├── Wrapper.java
│       │                   │   └── package-info.java
│       │                   └── transaction/
│       │                       ├── TransactionLevel.java
│       │                       └── package-info.java
│       └── test/
│           ├── java/
│           │   └── cn/
│           │       └── hutool/
│           │           └── db/
│           │               ├── CRUDTest.java
│           │               ├── ConcurentTest.java
│           │               ├── DbTest.java
│           │               ├── DerbyTest.java
│           │               ├── DmTest.java
│           │               ├── DsTest.java
│           │               ├── EntityTest.java
│           │               ├── FindBeanTest.java
│           │               ├── GlobalDbConfigTest.java
│           │               ├── H2Test.java
│           │               ├── HanaTest.java
│           │               ├── HsqldbTest.java
│           │               ├── IssueI73770Test.java
│           │               ├── IssueI9BANETest.java
│           │               ├── MySQLTest.java
│           │               ├── NamedSqlTest.java
│           │               ├── OracleTest.java
│           │               ├── PageResultTest.java
│           │               ├── PageTest.java
│           │               ├── PicTransferTest.java
│           │               ├── PostgreTest.java
│           │               ├── SessionTest.java
│           │               ├── SqlServerTest.java
│           │               ├── UpdateTest.java
│           │               ├── WrapperTest.java
│           │               ├── dialect/
│           │               │   ├── DialectFactoryTest.java
│           │               │   └── DriverUtilTest.java
│           │               ├── ds/
│           │               │   ├── DataSourceWrapperTest.java
│           │               │   └── IssueI70J95Test.java
│           │               ├── meta/
│           │               │   └── MetaUtilTest.java
│           │               ├── nosql/
│           │               │   ├── MongoDBTest.java
│           │               │   └── RedisDSTest.java
│           │               ├── pojo/
│           │               │   └── User.java
│           │               └── sql/
│           │                   ├── ConditionBuilderTest.java
│           │                   ├── ConditionGroupTest.java
│           │                   ├── ConditionTest.java
│           │                   ├── Issue4066Test.java
│           │                   ├── Issue4200Test.java
│           │                   ├── SqlBuilderTest.java
│           │                   └── SqlFormatterTest.java
│           └── resources/
│               ├── config/
│               │   ├── db.setting
│               │   ├── example/
│               │   │   ├── db-example-c3p0.setting
│               │   │   ├── db-example-dbcp.setting
│               │   │   ├── db-example-druid.setting
│               │   │   ├── db-example-hikari.setting
│               │   │   ├── db-example-tomcat.setting
│               │   │   └── mongo-example.setting
│               │   ├── mongo.setting
│               │   └── redis.setting
│               ├── logback.xml
│               └── simplelogger.properties
├── hutool-dfa/
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   └── java/
│       │       └── cn/
│       │           └── hutool/
│       │               └── dfa/
│       │                   ├── FoundWord.java
│       │                   ├── SensitiveProcessor.java
│       │                   ├── SensitiveUtil.java
│       │                   ├── StopChar.java
│       │                   ├── WordTree.java
│       │                   └── package-info.java
│       └── test/
│           └── java/
│               └── cn/
│                   └── hutool/
│                       └── dfa/
│                           ├── DfaTest.java
│                           └── SensitiveUtilTest.java
├── hutool-extra/
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   ├── java/
│       │   │   └── cn/
│       │   │       └── hutool/
│       │   │           └── extra/
│       │   │               ├── cglib/
│       │   │               │   ├── BeanCopierCache.java
│       │   │               │   ├── CglibUtil.java
│       │   │               │   └── package-info.java
│       │   │               ├── compress/
│       │   │               │   ├── CompressException.java
│       │   │               │   ├── CompressUtil.java
│       │   │               │   ├── archiver/
│       │   │               │   │   ├── Archiver.java
│       │   │               │   │   ├── SevenZArchiver.java
│       │   │               │   │   ├── StreamArchiver.java
│       │   │               │   │   └── package-info.java
│       │   │               │   ├── extractor/
│       │   │               │   │   ├── Extractor.java
│       │   │               │   │   ├── Seven7EntryInputStream.java
│       │   │               │   │   ├── SevenZExtractor.java
│       │   │               │   │   ├── StreamExtractor.java
│       │   │               │   │   └── package-info.java
│       │   │               │   └── package-info.java
│       │   │               ├── emoji/
│       │   │               │   ├── EmojiUtil.java
│       │   │               │   └── package-info.java
│       │   │               ├── expression/
│       │   │               │   ├── ExpressionEngine.java
│       │   │               │   ├── ExpressionException.java
│       │   │               │   ├── ExpressionUtil.java
│       │   │               │   ├── engine/
│       │   │               │   │   ├── ExpressionFactory.java
│       │   │               │   │   ├── aviator/
│       │   │               │   │   │   ├── AviatorEngine.java
│       │   │               │   │   │   └── package-info.java
│       │   │               │   │   ├── jexl/
│       │   │               │   │   │   ├── JexlEngine.java
│       │   │               │   │   │   └── package-info.java
│       │   │               │   │   ├── jfireel/
│       │   │               │   │   │   ├── JfireELEngine.java
│       │   │               │   │   │   └── package-info.java
│       │   │               │   │   ├── mvel/
│       │   │               │   │   │   ├── MvelEngine.java
│       │   │               │   │   │   └── package-info.java
│       │   │               │   │   ├── package-info.java
│       │   │               │   │   ├── qlexpress/
│       │   │               │   │   │   ├── QLExpressEngine.java
│       │   │               │   │   │   └── package-info.java
│       │   │               │   │   ├── rhino/
│       │   │               │   │   │   ├── RhinoEngine.java
│       │   │               │   │   │   └── package-info.java
│       │   │               │   │   └── spel/
│       │   │               │   │       ├── SpELEngine.java
│       │   │               │   │       └── package-info.java
│       │   │               │   └── package-info.java
│       │   │               ├── ftp/
│       │   │               │   ├── AbstractFtp.java
│       │   │               │   ├── Ftp.java
│       │   │               │   ├── FtpConfig.java
│       │   │               │   ├── FtpException.java
│       │   │               │   ├── FtpMode.java
│       │   │               │   ├── SimpleFtpServer.java
│       │   │               │   └── package-info.java
│       │   │               ├── mail/
│       │   │               │   ├── GlobalMailAccount.java
│       │   │               │   ├── InternalMailUtil.java
│       │   │               │   ├── JakartaInternalMailUtil.java
│       │   │               │   ├── JakartaMail.java
│       │   │               │   ├── JakartaMailUtil.java
│       │   │               │   ├── JakartaUserPassAuthenticator.java
│       │   │               │   ├── Mail.java
│       │   │               │   ├── MailAccount.java
│       │   │               │   ├── MailException.java
│       │   │               │   ├── MailUtil.java
│       │   │               │   ├── UserPassAuthenticator.java
│       │   │               │   └── package-info.java
│       │   │               ├── package-info.java
│       │   │               ├── pinyin/
│       │   │               │   ├── PinyinEngine.java
│       │   │               │   ├── PinyinException.java
│       │   │               │   ├── PinyinUtil.java
│       │   │               │   ├── engine/
│       │   │               │   │   ├── PinyinFactory.java
│       │   │               │   │   ├── bopomofo4j/
│       │   │               │   │   │   ├── Bopomofo4jEngine.java
│       │   │               │   │   │   └── package-info.java
│       │   │               │   │   ├── houbbpinyin/
│       │   │               │   │   │   ├── HoubbPinyinEngine.java
│       │   │               │   │   │   └── package-info.java
│       │   │               │   │   ├── jpinyin/
│       │   │               │   │   │   ├── JPinyinEngine.java
│       │   │               │   │   │   └── package-info.java
│       │   │               │   │   ├── package-info.java
│       │   │               │   │   ├── pinyin4j/
│       │   │               │   │   │   ├── Pinyin4jEngine.java
│       │   │               │   │   │   └── package-info.java
│       │   │               │   │   └── tinypinyin/
│       │   │               │   │       ├── TinyPinyinEngine.java
│       │   │               │   │       └── package-info.java
│       │   │               │   └── package-info.java
│       │   │               ├── qrcode/
│       │   │               │   ├── BufferedImageLuminanceSource.java
│       │   │               │   ├── QrCodeException.java
│       │   │               │   ├── QrCodeUtil.java
│       │   │               │   ├── QrConfig.java
│       │   │               │   └── package-info.java
│       │   │               ├── servlet/
│       │   │               │   ├── JakartaServletUtil.java
│       │   │               │   ├── ServletUtil.java
│       │   │               │   └── package-info.java
│       │   │               ├── spring/
│       │   │               │   ├── EnableSpringUtil.java
│       │   │               │   ├── SpringUtil.java
│       │   │               │   └── package-info.java
│       │   │               ├── ssh/
│       │   │               │   ├── ChannelType.java
│       │   │               │   ├── Connector.java
│       │   │               │   ├── GanymedUtil.java
│       │   │               │   ├── JschRuntimeException.java
│       │   │               │   ├── JschSessionPool.java
│       │   │               │   ├── JschUtil.java
│       │   │               │   ├── Sftp.java
│       │   │               │   ├── SshjSftp.java
│       │   │               │   └── package-info.java
│       │   │               ├── template/
│       │   │               │   ├── AbstractTemplate.java
│       │   │               │   ├── Template.java
│       │   │               │   ├── TemplateConfig.java
│       │   │               │   ├── TemplateEngine.java
│       │   │               │   ├── TemplateException.java
│       │   │               │   ├── TemplateUtil.java
│       │   │               │   ├── engine/
│       │   │               │   │   ├── TemplateFactory.java
│       │   │               │   │   ├── beetl/
│       │   │               │   │   │   ├── BeetlEngine.java
│       │   │               │   │   │   ├── BeetlTemplate.java
│       │   │               │   │   │   └── package-info.java
│       │   │               │   │   ├── enjoy/
│       │   │               │   │   │   ├── EnjoyEngine.java
│       │   │               │   │   │   ├── EnjoyTemplate.java
│       │   │               │   │   │   └── package-info.java
│       │   │               │   │   ├── freemarker/
│       │   │               │   │   │   ├── FreemarkerEngine.java
│       │   │               │   │   │   ├── FreemarkerTemplate.java
│       │   │               │   │   │   ├── SimpleStringTemplateLoader.java
│       │   │               │   │   │   └── package-info.java
│       │   │               │   │   ├── jetbrick/
│       │   │               │   │   │   ├── JetbrickEngine.java
│       │   │               │   │   │   ├── JetbrickTemplate.java
│       │   │               │   │   │   ├── loader/
│       │   │               │   │   │   │   ├── StringResourceLoader.java
│       │   │               │   │   │   │   └── package-info.java
│       │   │               │   │   │   └── package-info.java
│       │   │               │   │   ├── package-info.java
│       │   │               │   │   ├── rythm/
│       │   │               │   │   │   ├── RythmEngine.java
│       │   │               │   │   │   ├── RythmTemplate.java
│       │   │               │   │   │   └── package-info.java
│       │   │               │   │   ├── thymeleaf/
│       │   │               │   │   │   ├── ThymeleafEngine.java
│       │   │               │   │   │   ├── ThymeleafTemplate.java
│       │   │               │   │   │   └── package-info.java
│       │   │               │   │   ├── velocity/
│       │   │               │   │   │   ├── SimpleStringResourceLoader.java
│       │   │               │   │   │   ├── VelocityEngine.java
│       │   │               │   │   │   ├── VelocityTemplate.java
│       │   │               │   │   │   └── package-info.java
│       │   │               │   │   └── wit/
│       │   │               │   │       ├── WitEngine.java
│       │   │               │   │       ├── WitTemplate.java
│       │   │               │   │       └── package-info.java
│       │   │               │   └── package-info.java
│       │   │               ├── tokenizer/
│       │   │               │   ├── AbstractResult.java
│       │   │               │   ├── Result.java
│       │   │               │   ├── TokenizerEngine.java
│       │   │               │   ├── TokenizerException.java
│       │   │               │   ├── TokenizerUtil.java
│       │   │               │   ├── Word.java
│       │   │               │   ├── engine/
│       │   │               │   │   ├── TokenizerFactory.java
│       │   │               │   │   ├── analysis/
│       │   │               │   │   │   ├── AnalysisEngine.java
│       │   │               │   │   │   ├── AnalysisResult.java
│       │   │               │   │   │   ├── AnalysisWord.java
│       │   │               │   │   │   ├── SmartcnEngine.java
│       │   │               │   │   │   └── package-info.java
│       │   │               │   │   ├── ansj/
│       │   │               │   │   │   ├── AnsjEngine.java
│       │   │               │   │   │   ├── AnsjResult.java
│       │   │               │   │   │   ├── AnsjWord.java
│       │   │               │   │   │   └── package-info.java
│       │   │               │   │   ├── hanlp/
│       │   │               │   │   │   ├── HanLPEngine.java
│       │   │               │   │   │   ├── HanLPResult.java
│       │   │               │   │   │   ├── HanLPWord.java
│       │   │               │   │   │   └── package-info.java
│       │   │               │   │   ├── ikanalyzer/
│       │   │               │   │   │   ├── IKAnalyzerEngine.java
│       │   │               │   │   │   ├── IKAnalyzerResult.java
│       │   │               │   │   │   ├── IKAnalyzerWord.java
│       │   │               │   │   │   └── package-info.java
│       │   │               │   │   ├── jcseg/
│       │   │               │   │   │   ├── JcsegEngine.java
│       │   │               │   │   │   ├── JcsegResult.java
│       │   │               │   │   │   ├── JcsegWord.java
│       │   │               │   │   │   └── package-info.java
│       │   │               │   │   ├── jieba/
│       │   │               │   │   │   ├── JiebaEngine.java
│       │   │               │   │   │   ├── JiebaResult.java
│       │   │               │   │   │   ├── JiebaWord.java
│       │   │               │   │   │   └── package-info.java
│       │   │               │   │   ├── mmseg/
│       │   │               │   │   │   ├── MmsegEngine.java
│       │   │               │   │   │   ├── MmsegResult.java
│       │   │               │   │   │   ├── MmsegWord.java
│       │   │               │   │   │   └── package-info.java
│       │   │               │   │   ├── mynlp/
│       │   │               │   │   │   ├── MynlpEngine.java
│       │   │               │   │   │   ├── MynlpResult.java
│       │   │               │   │   │   ├── MynlpWord.java
│       │   │               │   │   │   └── package-info.java
│       │   │               │   │   ├── package-info.java
│       │   │               │   │   └── word/
│       │   │               │   │       ├── WordEngine.java
│       │   │               │   │       ├── WordResult.java
│       │   │               │   │       ├── WordWord.java
│       │   │               │   │       └── package-info.java
│       │   │               │   └── package-info.java
│       │   │               └── validation/
│       │   │                   ├── BeanValidationResult.java
│       │   │                   ├── ValidationUtil.java
│       │   │                   └── package-info.java
│       │   └── resources/
│       │       └── META-INF/
│       │           ├── services/
│       │           │   ├── cn.hutool.extra.expression.ExpressionEngine
│       │           │   ├── cn.hutool.extra.pinyin.PinyinEngine
│       │           │   ├── cn.hutool.extra.template.TemplateEngine
│       │           │   └── cn.hutool.extra.tokenizer.TokenizerEngine
│       │           ├── spring/
│       │           │   └── org.springframework.boot.autoconfigure.AutoConfiguration.imports
│       │           └── spring.factories
│       └── test/
│           ├── java/
│           │   └── cn/
│           │       └── hutool/
│           │           └── extra/
│           │               ├── cglib/
│           │               │   └── CglibUtilTest.java
│           │               ├── compress/
│           │               │   ├── ArchiverTest.java
│           │               │   ├── ExtractorTest.java
│           │               │   └── IssueI7PMJ0Test.java
│           │               ├── emoji/
│           │               │   └── EmojiUtilTest.java
│           │               ├── expression/
│           │               │   ├── AviatorTest.java
│           │               │   └── ExpressionUtilTest.java
│           │               ├── ftp/
│           │               │   ├── FtpTest.java
│           │               │   └── SimpleFtpServerTest.java
│           │               ├── mail/
│           │               │   ├── JakartaMailTest.java
│           │               │   ├── MailAccountTest.java
│           │               │   └── MailTest.java
│           │               ├── pinyin/
│           │               │   ├── Bopomofo4jTest.java
│           │               │   ├── HoubbPinyinTest.java
│           │               │   ├── JpinyinTest.java
│           │               │   ├── Pinyin4jTest.java
│           │               │   ├── PinyinUtilTest.java
│           │               │   └── TinyPinyinTest.java
│           │               ├── qrcode/
│           │               │   ├── IssueI7RUIVTest.java
│           │               │   └── QrCodeUtilTest.java
│           │               ├── servlet/
│           │               │   └── ServletUtilTest.java
│           │               ├── spring/
│           │               │   ├── EnableSpringUtilTest.java
│           │               │   ├── SpringUtilTest.java
│           │               │   └── SpringUtilWithAutoConfigTest.java
│           │               ├── ssh/
│           │               │   ├── JschUtilTest.java
│           │               │   ├── SftpTest.java
│           │               │   └── SshjSftpTest.java
│           │               ├── template/
│           │               │   ├── Issue3488Test.java
│           │               │   ├── JetbrickTest.java
│           │               │   ├── TemplateUtilTest.java
│           │               │   ├── ThymeleafTest.java
│           │               │   └── VelocityTest.java
│           │               ├── tokenizer/
│           │               │   └── TokenizerUtilTest.java
│           │               └── validation/
│           │                   └── BeanValidatorUtilTest.java
│           └── resources/
│               ├── beetl.properties
│               ├── config/
│               │   └── mail.setting
│               ├── example/
│               │   ├── beetl-example.properties
│               │   ├── mail-example.setting
│               │   └── velocity-example.vm
│               └── templates/
│                   ├── beetl_test.btl
│                   ├── enjoy_test.etl
│                   ├── freemarker_test.ftl
│                   ├── issue3488.ftl
│                   ├── jetbrick_test.jetx
│                   ├── rythm_test.tmpl
│                   ├── thymeleaf_test.ttl
│                   ├── velocity_test.vtl
│                   ├── velocity_test_gbk.vtl
│                   └── wit_test.wit
├── hutool-http/
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   └── java/
│       │       └── cn/
│       │           └── hutool/
│       │               └── http/
│       │                   ├── ContentType.java
│       │                   ├── GlobalHeaders.java
│       │                   ├── GlobalInterceptor.java
│       │                   ├── HTMLFilter.java
│       │                   ├── Header.java
│       │                   ├── HtmlUtil.java
│       │                   ├── HttpBase.java
│       │                   ├── HttpConfig.java
│       │                   ├── HttpConnection.java
│       │                   ├── HttpDownloader.java
│       │                   ├── HttpException.java
│       │                   ├── HttpGlobalConfig.java
│       │                   ├── HttpInputStream.java
│       │                   ├── HttpInterceptor.java
│       │                   ├── HttpRequest.java
│       │                   ├── HttpResource.java
│       │                   ├── HttpResponse.java
│       │                   ├── HttpStatus.java
│       │                   ├── HttpUtil.java
│       │                   ├── Method.java
│       │                   ├── MultipartOutputStream.java
│       │                   ├── Status.java
│       │                   ├── body/
│       │                   │   ├── BytesBody.java
│       │                   │   ├── FormUrlEncodedBody.java
│       │                   │   ├── MultipartBody.java
│       │                   │   ├── RequestBody.java
│       │                   │   ├── ResourceBody.java
│       │                   │   └── package-info.java
│       │                   ├── cookie/
│       │                   │   ├── GlobalCookieManager.java
│       │                   │   ├── ThreadLocalCookieStore.java
│       │                   │   └── package-info.java
│       │                   ├── package-info.java
│       │                   ├── server/
│       │                   │   ├── HttpExchangeWrapper.java
│       │                   │   ├── HttpServerBase.java
│       │                   │   ├── HttpServerRequest.java
│       │                   │   ├── HttpServerResponse.java
│       │                   │   ├── SimpleServer.java
│       │                   │   ├── action/
│       │                   │   │   ├── Action.java
│       │                   │   │   ├── RootAction.java
│       │                   │   │   └── package-info.java
│       │                   │   ├── filter/
│       │                   │   │   ├── DefaultExceptionFilter.java
│       │                   │   │   ├── ExceptionFilter.java
│       │                   │   │   ├── HttpFilter.java
│       │                   │   │   ├── SimpleFilter.java
│       │                   │   │   └── package-info.java
│       │                   │   ├── handler/
│       │                   │   │   ├── ActionHandler.java
│       │                   │   │   └── package-info.java
│       │                   │   └── package-info.java
│       │                   ├── ssl/
│       │                   │   ├── AndroidSupportSSLFactory.java
│       │                   │   ├── CustomProtocolsSSLFactory.java
│       │                   │   ├── DefaultSSLFactory.java
│       │                   │   ├── DefaultSSLInfo.java
│       │                   │   ├── SSLSocketFactoryBuilder.java
│       │                   │   ├── TrustAnyHostnameVerifier.java
│       │                   │   └── package-info.java
│       │                   ├── useragent/
│       │                   │   ├── Browser.java
│       │                   │   ├── Engine.java
│       │                   │   ├── OS.java
│       │                   │   ├── Platform.java
│       │                   │   ├── UserAgent.java
│       │                   │   ├── UserAgentInfo.java
│       │                   │   ├── UserAgentParser.java
│       │                   │   ├── UserAgentUtil.java
│       │                   │   └── package-info.java
│       │                   └── webservice/
│       │                       ├── JakartaSoapClient.java
│       │                       ├── JakartaSoapProtocol.java
│       │                       ├── JakartaSoapUtil.java
│       │                       ├── SoapClient.java
│       │                       ├── SoapProtocol.java
│       │                       ├── SoapRuntimeException.java
│       │                       ├── SoapUtil.java
│       │                       └── package-info.java
│       └── test/
│           ├── java/
│           │   └── cn/
│           │       └── hutool/
│           │           └── http/
│           │               ├── ContentTypeTest.java
│           │               ├── DownloadTest.java
│           │               ├── HTMLFilterTest.java
│           │               ├── HtmlUtilTest.java
│           │               ├── HttpGlobalConfigTest.java
│           │               ├── HttpRequestTest.java
│           │               ├── HttpUtilTest.java
│           │               ├── HttpsTest.java
│           │               ├── Issue2658Test.java
│           │               ├── Issue3074Test.java
│           │               ├── Issue3197Test.java
│           │               ├── Issue3314Test.java
│           │               ├── Issue3536Test.java
│           │               ├── IssueI5TPSYTest.java
│           │               ├── IssueI6RE7JTest.java
│           │               ├── IssueI7EHSETest.java
│           │               ├── IssueI7WZEOTest.java
│           │               ├── IssueI7ZRJUTest.java
│           │               ├── IssueI8YV0KTest.java
│           │               ├── IssueIB7REWTest.java
│           │               ├── IssueIBQIYQTest.java
│           │               ├── IssueIBRVE4Test.java
│           │               ├── RestTest.java
│           │               ├── UploadTest.java
│           │               ├── body/
│           │               │   └── MultipartBodyTest.java
│           │               ├── server/
│           │               │   ├── BlankServerTest.java
│           │               │   ├── DocServerTest.java
│           │               │   ├── ExceptionServerTest.java
│           │               │   ├── Issue3343Test.java
│           │               │   ├── Issue3568Test.java
│           │               │   ├── Issue3723Test.java
│           │               │   ├── RedirectServerTest.java
│           │               │   └── SimpleServerTest.java
│           │               ├── useragent/
│           │               │   ├── IssueIB3SJFTest.java
│           │               │   └── UserAgentUtilTest.java
│           │               └── webservice/
│           │                   ├── JakartaSoapClientTest.java
│           │                   └── SoapClientTest.java
│           └── resources/
│               └── html/
│                   ├── formForUpload.html
│                   └── index.html
├── hutool-json/
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   └── java/
│       │       └── cn/
│       │           └── hutool/
│       │               └── json/
│       │                   ├── InternalJSONUtil.java
│       │                   ├── JSON.java
│       │                   ├── JSONArray.java
│       │                   ├── JSONBeanParser.java
│       │                   ├── JSONConfig.java
│       │                   ├── JSONConverter.java
│       │                   ├── JSONException.java
│       │                   ├── JSONGetter.java
│       │                   ├── JSONNull.java
│       │                   ├── JSONObject.java
│       │                   ├── JSONObjectIter.java
│       │                   ├── JSONParser.java
│       │                   ├── JSONStrFormatter.java
│       │                   ├── JSONString.java
│       │                   ├── JSONSupport.java
│       │                   ├── JSONTokener.java
│       │                   ├── JSONUtil.java
│       │                   ├── ObjectMapper.java
│       │                   ├── XML.java
│       │                   ├── XMLTokener.java
│       │                   ├── package-info.java
│       │                   ├── serialize/
│       │                   │   ├── GlobalSerializeMapping.java
│       │                   │   ├── JSONArraySerializer.java
│       │                   │   ├── JSONDeserializer.java
│       │                   │   ├── JSONObjectSerializer.java
│       │                   │   ├── JSONSerializer.java
│       │                   │   ├── JSONWriter.java
│       │                   │   ├── TemporalAccessorSerializer.java
│       │                   │   └── package-info.java
│       │                   └── xml/
│       │                       ├── JSONXMLParser.java
│       │                       ├── JSONXMLSerializer.java
│       │                       ├── ParseConfig.java
│       │                       └── package-info.java
│       └── test/
│           ├── java/
│           │   └── cn/
│           │       └── hutool/
│           │           └── json/
│           │               ├── BeanToJsonTest.java
│           │               ├── CustomSerializeTest.java
│           │               ├── Issue1075Test.java
│           │               ├── Issue1101Test.java
│           │               ├── Issue1200Test.java
│           │               ├── Issue2090Test.java
│           │               ├── Issue2131Test.java
│           │               ├── Issue2223Test.java
│           │               ├── Issue2365Test.java
│           │               ├── Issue2369Test.java
│           │               ├── Issue2377Test.java
│           │               ├── Issue2447Test.java
│           │               ├── Issue2555Test.java
│           │               ├── Issue2572Test.java
│           │               ├── Issue2746Test.java
│           │               ├── Issue2749Test.java
│           │               ├── Issue2953Test.java
│           │               ├── Issue2997Test.java
│           │               ├── Issue3051Test.java
│           │               ├── Issue3086Test.java
│           │               ├── Issue3139Test.java
│           │               ├── Issue3274Test.java
│           │               ├── Issue3289Test.java
│           │               ├── Issue3504Test.java
│           │               ├── Issue3506Test.java
│           │               ├── Issue3541Test.java
│           │               ├── Issue3588Test.java
│           │               ├── Issue3619Test.java
│           │               ├── Issue3649Test.java
│           │               ├── Issue3713Test.java
│           │               ├── Issue3759Test.java
│           │               ├── Issue3790Test.java
│           │               ├── Issue3795Test.java
│           │               ├── Issue4197Test.java
│           │               ├── Issue4210Test.java
│           │               ├── Issue4214Test.java
│           │               ├── Issue488Test.java
│           │               ├── Issue644Test.java
│           │               ├── Issue677Test.java
│           │               ├── Issue867Test.java
│           │               ├── IssueI1AU86Test.java
│           │               ├── IssueI1F8M2.java
│           │               ├── IssueI1H2VN.java
│           │               ├── IssueI3BS4S.java
│           │               ├── IssueI3EGJP.java
│           │               ├── IssueI49VZBTest.java
│           │               ├── IssueI4RBZ4Test.java
│           │               ├── IssueI4XFMWTest.java
│           │               ├── IssueI50EGGTest.java
│           │               ├── IssueI59LW4Test.java
│           │               ├── IssueI5OMSCTest.java
│           │               ├── IssueI676IT.java
│           │               ├── IssueI6H0XFTest.java
│           │               ├── IssueI6SZYBTest.java
│           │               ├── IssueI6TPIFTest.java
│           │               ├── IssueI6YN2ATest.java
│           │               ├── IssueI71BE6Test.java
│           │               ├── IssueI7FQ29Test.java
│           │               ├── IssueI7GPGXTest.java
│           │               ├── IssueI7M2GZTest.java
│           │               ├── IssueI82AM8Test.java
│           │               ├── IssueI84V6ITest.java
│           │               ├── IssueI8NMP7Test.java
│           │               ├── IssueI8PC9FTest.java
│           │               ├── IssueI90ADXTest.java
│           │               ├── IssueIA5YOETest.java
│           │               ├── IssueIALQ0NTest.java
│           │               ├── IssueIAOPI9Test.java
│           │               ├── IssueIAP4GMTest.java
│           │               ├── IssueIB9MH0Test.java
│           │               ├── IssueID418BTest.java
│           │               ├── IssueID61QRTest.java
│           │               ├── Issues1881Test.java
│           │               ├── IssuesI44E4HTest.java
│           │               ├── IssuesI4V14NTest.java
│           │               ├── JSONArrayTest.java
│           │               ├── JSONBeanParserTest.java
│           │               ├── JSONConvertTest.java
│           │               ├── JSONNullTest.java
│           │               ├── JSONObjectTest.java
│           │               ├── JSONPathTest.java
│           │               ├── JSONStrFormatterTest.java
│           │               ├── JSONSupportTest.java
│           │               ├── JSONUtilTest.java
│           │               ├── ParseBeanTest.java
│           │               ├── Pr1431Test.java
│           │               ├── Pr192Test.java
│           │               ├── TransientTest.java
│           │               ├── issueIVMD5/
│           │               │   ├── BaseResult.java
│           │               │   ├── IssueIVMD5Test.java
│           │               │   └── StudentInfo.java
│           │               ├── test/
│           │               │   └── bean/
│           │               │       ├── ADT.java
│           │               │       ├── Data.java
│           │               │       ├── Exam.java
│           │               │       ├── ExamInfoDict.java
│           │               │       ├── JSONBean.java
│           │               │       ├── JsonNode.java
│           │               │       ├── KeyBean.java
│           │               │       ├── PerfectEvaluationProductResVo.java
│           │               │       ├── Price.java
│           │               │       ├── ProductResBase.java
│           │               │       ├── ResultBean.java
│           │               │       ├── ResultDto.java
│           │               │       ├── Seq.java
│           │               │       ├── TokenAuthResponse.java
│           │               │       ├── TokenAuthWarp.java
│           │               │       ├── TokenAuthWarp2.java
│           │               │       ├── UUMap.java
│           │               │       ├── UserA.java
│           │               │       ├── UserB.java
│           │               │       ├── UserC.java
│           │               │       ├── UserInfoDict.java
│           │               │       ├── UserInfoRedundCount.java
│           │               │       ├── UserWithMap.java
│           │               │       └── report/
│           │               │           ├── CaseReport.java
│           │               │           ├── EnvSettingInfo.java
│           │               │           ├── StepReport.java
│           │               │           └── SuiteReport.java
│           │               └── xml/
│           │                   ├── Issue2748Test.java
│           │                   ├── Issue3560Test.java
│           │                   ├── IssueID0HP2Test.java
│           │                   └── XMLTest.java
│           └── resources/
│               ├── evaluation.json
│               ├── exam_test.json
│               ├── issue1200.json
│               ├── issue488.json
│               ├── issue488Array.json
│               ├── issueI5OMSC.json
│               ├── issueI676IT.json
│               ├── issueI82AM8.json
│               ├── issueIVMD5.json
│               └── suiteReport.json
├── hutool-jwt/
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   └── java/
│       │       └── cn/
│       │           └── hutool/
│       │               └── jwt/
│       │                   ├── Claims.java
│       │                   ├── JWT.java
│       │                   ├── JWTException.java
│       │                   ├── JWTHeader.java
│       │                   ├── JWTPayload.java
│       │                   ├── JWTUtil.java
│       │                   ├── JWTValidator.java
│       │                   ├── RegisteredPayload.java
│       │                   ├── package-info.java
│       │                   └── signers/
│       │                       ├── AlgorithmUtil.java
│       │                       ├── AsymmetricJWTSigner.java
│       │                       ├── EllipticCurveJWTSigner.java
│       │                       ├── HMacJWTSigner.java
│       │                       ├── JWTSigner.java
│       │                       ├── JWTSignerUtil.java
│       │                       ├── NoneJWTSigner.java
│       │                       └── package-info.java
│       └── test/
│           └── java/
│               └── cn/
│                   └── hutool/
│                       └── jwt/
│                           ├── Issue3205Test.java
│                           ├── Issue3732Test.java
│                           ├── Issue4105Test.java
│                           ├── IssueI5QRUOTest.java
│                           ├── IssueI6IS5BTest.java
│                           ├── JWTSignerTest.java
│                           ├── JWTTest.java
│                           ├── JWTUtilTest.java
│                           └── JWTValidatorTest.java
├── hutool-log/
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   ├── java/
│       │   │   └── cn/
│       │   │       └── hutool/
│       │   │           └── log/
│       │   │               ├── AbstractLog.java
│       │   │               ├── GlobalLogFactory.java
│       │   │               ├── Log.java
│       │   │               ├── LogFactory.java
│       │   │               ├── StaticLog.java
│       │   │               ├── dialect/
│       │   │               │   ├── commons/
│       │   │               │   │   ├── ApacheCommonsLog.java
│       │   │               │   │   ├── ApacheCommonsLog4JLog.java
│       │   │               │   │   ├── ApacheCommonsLogFactory.java
│       │   │               │   │   └── package-info.java
│       │   │               │   ├── console/
│       │   │               │   │   ├── ConsoleColorLog.java
│       │   │               │   │   ├── ConsoleColorLogFactory.java
│       │   │               │   │   ├── ConsoleLog.java
│       │   │               │   │   ├── ConsoleLogFactory.java
│       │   │               │   │   └── package-info.java
│       │   │               │   ├── jboss/
│       │   │               │   │   ├── JbossLog.java
│       │   │               │   │   ├── JbossLogFactory.java
│       │   │               │   │   └── package-info.java
│       │   │               │   ├── jdk/
│       │   │               │   │   ├── JdkLog.java
│       │   │               │   │   ├── JdkLogFactory.java
│       │   │               │   │   └── package-info.java
│       │   │               │   ├── log4j/
│       │   │               │   │   ├── Log4jLog.java
│       │   │               │   │   ├── Log4jLogFactory.java
│       │   │               │   │   └── package-info.java
│       │   │               │   ├── log4j2/
│       │   │               │   │   ├── Log4j2Log.java
│       │   │               │   │   ├── Log4j2LogFactory.java
│       │   │               │   │   └── package-info.java
│       │   │               │   ├── logtube/
│       │   │               │   │   ├── LogTubeLog.java
│       │   │               │   │   ├── LogTubeLogFactory.java
│       │   │               │   │   └── package-info.java
│       │   │               │   ├── package-info.java
│       │   │               │   ├── slf4j/
│       │   │               │   │   ├── Slf4jLog.java
│       │   │               │   │   ├── Slf4jLogFactory.java
│       │   │               │   │   └── package-info.java
│       │   │               │   └── tinylog/
│       │   │               │       ├── TinyLog.java
│       │   │               │       ├── TinyLog2.java
│       │   │               │       ├── TinyLog2Factory.java
│       │   │               │       ├── TinyLogFactory.java
│       │   │               │       └── package-info.java
│       │   │               ├── level/
│       │   │               │   ├── DebugLog.java
│       │   │               │   ├── ErrorLog.java
│       │   │               │   ├── InfoLog.java
│       │   │               │   ├── Level.java
│       │   │               │   ├── TraceLog.java
│       │   │               │   ├── WarnLog.java
│       │   │               │   └── package-info.java
│       │   │               └── package-info.java
│       │   └── resources/
│       │       └── META-INF/
│       │           └── services/
│       │               └── cn.hutool.log.LogFactory
│       └── test/
│           ├── java/
│           │   └── cn/
│           │       └── hutool/
│           │           └── log/
│           │               └── test/
│           │                   ├── CustomLogTest.java
│           │                   ├── LogTest.java
│           │                   ├── LogTubeTest.java
│           │                   └── StaticLogTest.java
│           └── resources/
│               ├── example/
│               │   └── log4j2.xml
│               ├── log4j.properties
│               ├── log4j2.xml
│               ├── logback.xml
│               ├── logging.properties
│               ├── logtube.properties
│               └── tinylog.properties
├── hutool-poi/
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   └── java/
│       │       └── cn/
│       │           └── hutool/
│       │               └── poi/
│       │                   ├── GlobalPoiConfig.java
│       │                   ├── PoiChecker.java
│       │                   ├── excel/
│       │                   │   ├── BigExcelWriter.java
│       │                   │   ├── ExcelBase.java
│       │                   │   ├── ExcelDateUtil.java
│       │                   │   ├── ExcelExtractorUtil.java
│       │                   │   ├── ExcelFileUtil.java
│       │                   │   ├── ExcelPicUtil.java
│       │                   │   ├── ExcelReader.java
│       │                   │   ├── ExcelUtil.java
│       │                   │   ├── ExcelWriter.java
│       │                   │   ├── RowUtil.java
│       │                   │   ├── StyleSet.java
│       │                   │   ├── WorkbookUtil.java
│       │                   │   ├── cell/
│       │                   │   │   ├── CellEditor.java
│       │                   │   │   ├── CellHandler.java
│       │                   │   │   ├── CellLocation.java
│       │                   │   │   ├── CellSetter.java
│       │                   │   │   ├── CellUtil.java
│       │                   │   │   ├── CellValue.java
│       │                   │   │   ├── FormulaCellValue.java
│       │                   │   │   ├── NullCell.java
│       │                   │   │   ├── package-info.java
│       │                   │   │   ├── setters/
│       │                   │   │   │   ├── BooleanCellSetter.java
│       │                   │   │   │   ├── CalendarCellSetter.java
│       │                   │   │   │   ├── CellSetterFactory.java
│       │                   │   │   │   ├── CharSequenceCellSetter.java
│       │                   │   │   │   ├── DateCellSetter.java
│       │                   │   │   │   ├── EscapeStrCellSetter.java
│       │                   │   │   │   ├── HyperlinkCellSetter.java
│       │                   │   │   │   ├── NullCellSetter.java
│       │                   │   │   │   ├── NumberCellSetter.java
│       │                   │   │   │   ├── RichTextCellSetter.java
│       │                   │   │   │   ├── TemporalAccessorCellSetter.java
│       │                   │   │   │   └── package-info.java
│       │                   │   │   └── values/
│       │                   │   │       ├── ErrorCellValue.java
│       │                   │   │       └── NumericCellValue.java
│       │                   │   ├── editors/
│       │                   │   │   ├── NumericToIntEditor.java
│       │                   │   │   ├── TrimEditor.java
│       │                   │   │   └── package-info.java
│       │                   │   ├── package-info.java
│       │                   │   ├── reader/
│       │                   │   │   ├── AbstractSheetReader.java
│       │                   │   │   ├── BeanSheetReader.java
│       │                   │   │   ├── ColumnSheetReader.java
│       │                   │   │   ├── ListSheetReader.java
│       │                   │   │   ├── MapSheetReader.java
│       │                   │   │   ├── SheetReader.java
│       │                   │   │   └── package-info.java
│       │                   │   ├── sax/
│       │                   │   │   ├── AttributeName.java
│       │                   │   │   ├── CellDataType.java
│       │                   │   │   ├── ElementName.java
│       │                   │   │   ├── Excel03SaxReader.java
│       │                   │   │   ├── Excel07SaxReader.java
│       │                   │   │   ├── ExcelSaxReader.java
│       │                   │   │   ├── ExcelSaxUtil.java
│       │                   │   │   ├── SheetDataSaxHandler.java
│       │                   │   │   ├── SheetRidReader.java
│       │                   │   │   ├── StopReadException.java
│       │                   │   │   ├── handler/
│       │                   │   │   │   ├── AbstractRowHandler.java
│       │                   │   │   │   ├── BeanRowHandler.java
│       │                   │   │   │   ├── MapRowHandler.java
│       │                   │   │   │   ├── RowHandler.java
│       │                   │   │   │   └── package-info.java
│       │                   │   │   └── package-info.java
│       │                   │   └── style/
│       │                   │       ├── Align.java
│       │                   │       ├── StyleUtil.java
│       │                   │       └── package-info.java
│       │                   ├── exceptions/
│       │                   │   ├── POIException.java
│       │                   │   └── package-info.java
│       │                   ├── ofd/
│       │                   │   ├── OfdWriter.java
│       │                   │   └── package-info.java
│       │                   ├── package-info.java
│       │                   └── word/
│       │                       ├── DocUtil.java
│       │                       ├── PicType.java
│       │                       ├── TableUtil.java
│       │                       ├── Word07Writer.java
│       │                       ├── WordUtil.java
│       │                       └── package-info.java
│       └── test/
│           ├── java/
│           │   └── cn/
│           │       └── hutool/
│           │           └── poi/
│           │               ├── IssueI5Q1TWTest.java
│           │               ├── excel/
│           │               │   ├── BigExcelWriteTest.java
│           │               │   ├── CellEditorTest.java
│           │               │   ├── CellUtilTest.java
│           │               │   ├── ExcelFileUtilTest.java
│           │               │   ├── ExcelReadTest.java
│           │               │   ├── ExcelReaderToWriterTest.java
│           │               │   ├── ExcelUtilTest.java
│           │               │   ├── ExcelWriteBeanTest.java
│           │               │   ├── ExcelWriteTest.java
│           │               │   ├── Issue1729Test.java
│           │               │   ├── Issue2221Test.java
│           │               │   ├── Issue2706Test.java
│           │               │   ├── Issue2899Test.java
│           │               │   ├── Issue2941Test.java
│           │               │   ├── Issue3048Test.java
│           │               │   ├── Issue3698Test.java
│           │               │   ├── Issue3965Test.java
│           │               │   ├── Issue4146Test.java
│           │               │   ├── IssueI53OSTTest.java
│           │               │   ├── IssueI64P2KTest.java
│           │               │   ├── IssueI6MBS5Test.java
│           │               │   ├── IssueI6URF3Test.java
│           │               │   ├── IssueIB0EJ9Test.java
│           │               │   ├── NumericCellValueTest.java
│           │               │   ├── OrderExcel.java
│           │               │   ├── TestBean.java
│           │               │   ├── WorkbookUtilTest.java
│           │               │   ├── WriteNumberToStringTest.java
│           │               │   ├── WriteStyleTest.java
│           │               │   └── sax/
│           │               │       ├── ExcelSaxReadTest.java
│           │               │       └── Issue4195Test.java
│           │               ├── ofd/
│           │               │   └── OfdWriterTest.java
│           │               └── word/
│           │                   └── WordWriterTest.java
│           └── resources/
│               ├── 1899bug_demo.xlsx
│               ├── I5Q1TW.xlsx
│               ├── UserProjectDO.xlsx
│               ├── aaa.xls
│               ├── aaa.xlsx
│               ├── alias.xlsx
│               ├── blankAndDateTest.xlsx
│               ├── cell_editor_test.xlsx
│               ├── data_for_sax_test.xls
│               ├── data_for_sax_test.xlsx
│               ├── formula_test.xlsx
│               ├── merge_test.xlsx
│               ├── null_cell_test.xlsx
│               ├── priceIndex.xls
│               ├── readBySax.xls
│               ├── read_row_npe.xlsx
│               └── test.xls
├── hutool-script/
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   └── java/
│       │       └── cn/
│       │           └── hutool/
│       │               └── script/
│       │                   ├── FullSupportScriptEngine.java
│       │                   ├── JavaScriptEngine.java
│       │                   ├── ScriptRuntimeException.java
│       │                   ├── ScriptUtil.java
│       │                   └── package-info.java
│       └── test/
│           ├── java/
│           │   └── cn/
│           │       └── hutool/
│           │           └── script/
│           │               └── test/
│           │                   ├── NashornDeepTest.java
│           │                   └── ScriptUtilTest.java
│           └── resources/
│               └── filter1.js
├── hutool-setting/
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   └── java/
│       │       └── cn/
│       │           └── hutool/
│       │               └── setting/
│       │                   ├── AbsSetting.java
│       │                   ├── GroupedMap.java
│       │                   ├── GroupedSet.java
│       │                   ├── Setting.java
│       │                   ├── SettingLoader.java
│       │                   ├── SettingRuntimeException.java
│       │                   ├── SettingUtil.java
│       │                   ├── dialect/
│       │                   │   ├── Props.java
│       │                   │   ├── PropsUtil.java
│       │                   │   └── package-info.java
│       │                   ├── package-info.java
│       │                   ├── profile/
│       │                   │   ├── GlobalProfile.java
│       │                   │   ├── Profile.java
│       │                   │   └── package-info.java
│       │                   └── yaml/
│       │                       ├── YamlUtil.java
│       │                       └── package-info.java
│       └── test/
│           ├── java/
│           │   └── cn/
│           │       └── hutool/
│           │           └── setting/
│           │               ├── Issue3008Test.java
│           │               ├── IssueI7G34ETest.java
│           │               ├── PropsTest.java
│           │               ├── PropsUtilTest.java
│           │               ├── SettingTest.java
│           │               ├── SettingUtilTest.java
│           │               └── yaml/
│           │                   └── YamlUtilTest.java
│           └── resources/
│               ├── example/
│               │   ├── example.set
│               │   ├── example.setting
│               │   └── group-set-example.set
│               ├── issue3008.properties
│               ├── test.properties
│               ├── test.setting
│               ├── test.yaml
│               ├── test_with_bom.setting
│               └── to_bean_test.properties
├── hutool-socket/
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   └── java/
│       │       └── cn/
│       │           └── hutool/
│       │               └── socket/
│       │                   ├── ChannelUtil.java
│       │                   ├── SocketConfig.java
│       │                   ├── SocketRuntimeException.java
│       │                   ├── SocketUtil.java
│       │                   ├── aio/
│       │                   │   ├── AcceptHandler.java
│       │                   │   ├── AioClient.java
│       │                   │   ├── AioServer.java
│       │                   │   ├── AioSession.java
│       │                   │   ├── IoAction.java
│       │                   │   ├── ReadHandler.java
│       │                   │   ├── SimpleIoAction.java
│       │                   │   └── package-info.java
│       │                   ├── nio/
│       │                   │   ├── AcceptHandler.java
│       │                   │   ├── ChannelHandler.java
│       │                   │   ├── NioClient.java
│       │                   │   ├── NioServer.java
│       │                   │   ├── NioUtil.java
│       │                   │   ├── Operation.java
│       │                   │   └── package-info.java
│       │                   ├── package-info.java
│       │                   └── protocol/
│       │                       ├── MsgDecoder.java
│       │                       ├── MsgEncoder.java
│       │                       ├── Protocol.java
│       │                       └── package-info.java
│       └── test/
│           └── java/
│               └── cn/
│                   └── hutool/
│                       └── socket/
│                           ├── aio/
│                           │   ├── AioClientTest.java
│                           │   └── AioServerTest.java
│                           └── nio/
│                               ├── NioClientTest.java
│                               └── NioServerTest.java
├── hutool-system/
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   └── java/
│       │       └── cn/
│       │           └── hutool/
│       │               └── system/
│       │                   ├── HostInfo.java
│       │                   ├── JavaInfo.java
│       │                   ├── JavaRuntimeInfo.java
│       │                   ├── JavaSpecInfo.java
│       │                   ├── JvmInfo.java
│       │                   ├── JvmSpecInfo.java
│       │                   ├── OsInfo.java
│       │                   ├── RuntimeInfo.java
│       │                   ├── SystemPropsKeys.java
│       │                   ├── SystemUtil.java
│       │                   ├── UserInfo.java
│       │                   ├── oshi/
│       │                   │   ├── CpuInfo.java
│       │                   │   ├── CpuTicks.java
│       │                   │   ├── OshiUtil.java
│       │                   │   └── package-info.java
│       │                   └── package-info.java
│       └── test/
│           └── java/
│               └── cn/
│                   └── hutool/
│                       └── system/
│                           ├── OshiPrintTest.java
│                           ├── OshiTest.java
│                           └── SystemUtilTest.java
├── hutool.sh
└── pom.xml
Download .txt
Showing preview only (1,698K chars total). Download the full file or copy to clipboard to get everything.
SYMBOL INDEX (20842 symbols across 2028 files)

FILE: hutool-ai/src/main/java/cn/hutool/ai/AIException.java
  class AIException (line 24) | public class AIException extends RuntimeException {
    method AIException (line 32) | public AIException(final Throwable e) {
    method AIException (line 41) | public AIException(final String message) {
    method AIException (line 51) | public AIException(String messageTemplate, Object... params) {
    method AIException (line 61) | public AIException(final String message, final Throwable cause) {
    method AIException (line 73) | public AIException(final String message, final Throwable cause, final ...
    method AIException (line 84) | public AIException(Throwable throwable, String messageTemplate, Object...

FILE: hutool-ai/src/main/java/cn/hutool/ai/AIServiceFactory.java
  class AIServiceFactory (line 34) | public class AIServiceFactory {
    method getAIService (line 53) | public static AIService getAIService(final AIConfig config) {
    method getAIService (line 66) | @SuppressWarnings("unchecked")

FILE: hutool-ai/src/main/java/cn/hutool/ai/AIUtil.java
  class AIUtil (line 37) | public class AIUtil {
    method getAIService (line 48) | public static <T extends AIService> T getAIService(final AIConfig conf...
    method getAIService (line 59) | public static AIService getAIService(final AIConfig config) {
    method getHutoolService (line 70) | public static HutoolService getHutoolService(final AIConfig config) {
    method getDeepSeekService (line 81) | public static DeepSeekService getDeepSeekService(final AIConfig config) {
    method getDoubaoService (line 92) | public static DoubaoService getDoubaoService(final AIConfig config) {
    method getGrokService (line 103) | public static GrokService getGrokService(final AIConfig config) {
    method getOpenAIService (line 114) | public static OpenaiService getOpenAIService(final AIConfig config) {
    method getGeminiService (line 125) | public static GeminiService getGeminiService(final AIConfig config) {
    method chat (line 137) | public static String chat(final AIConfig config, final String prompt) {
    method chat (line 149) | public static String chat(final AIConfig config, final List<Message> m...

FILE: hutool-ai/src/main/java/cn/hutool/ai/ModelName.java
  type ModelName (line 25) | public enum ModelName {
    method ModelName (line 58) | ModelName(final String value) {
    method getValue (line 67) | public String getValue() {

FILE: hutool-ai/src/main/java/cn/hutool/ai/Models.java
  class Models (line 25) | public class Models {
    type Hutool (line 29) | public enum Hutool {
      method Hutool (line 34) | Hutool(String model) {
      method getModel (line 38) | public String getModel() {
    type DeepSeek (line 44) | public enum DeepSeek {
      method DeepSeek (line 50) | DeepSeek(String model) {
      method getModel (line 54) | public String getModel() {
    type Openai (line 60) | public enum Openai {
      method Openai (line 98) | Openai(String model) {
      method getModel (line 102) | public String getModel() {
    type Doubao (line 108) | public enum Doubao {
      method Doubao (line 151) | Doubao(String model) {
      method getModel (line 155) | public String getModel() {
    type Grok (line 161) | public enum Grok {
      method Grok (line 186) | Grok(String model) {
      method getModel (line 190) | public String getModel() {
    type Ollama (line 196) | public enum Ollama {
      method Ollama (line 201) | Ollama(String model) {
      method getModel (line 205) | public String getModel() {
    type Gemini (line 211) | public enum Gemini {
      method Gemini (line 239) | Gemini(String model) {
      method getModel (line 243) | public String getModel() {

FILE: hutool-ai/src/main/java/cn/hutool/ai/core/AIConfig.java
  type AIConfig (line 28) | public interface AIConfig {
    method getModelName (line 36) | default String getModelName() {
    method setApiKey (line 46) | void setApiKey(String apiKey);
    method getApiKey (line 54) | String getApiKey();
    method setApiUrl (line 62) | void setApiUrl(String apiUrl);
    method getApiUrl (line 70) | String getApiUrl();
    method setModel (line 78) | void setModel(String model);
    method getModel (line 86) | String getModel();
    method putAdditionalConfigByKey (line 95) | void putAdditionalConfigByKey(String key, Object value);
    method getAdditionalConfigByKey (line 104) | Object getAdditionalConfigByKey(String key);
    method getAdditionalConfigMap (line 112) | Map<String, Object> getAdditionalConfigMap();
    method setTimeout (line 120) | void setTimeout(int timeout);
    method getTimeout (line 128) | int getTimeout();
    method setReadTimeout (line 136) | void setReadTimeout(int readTimeout);
    method getReadTimeout (line 144) | int getReadTimeout();
    method getHasProxy (line 152) | boolean getHasProxy();
    method setHasProxy (line 160) | void setHasProxy(boolean hasProxy);
    method getProxy (line 168) | Proxy getProxy();
    method setProxy (line 176) | void setProxy(Proxy proxy);

FILE: hutool-ai/src/main/java/cn/hutool/ai/core/AIConfigBuilder.java
  class AIConfigBuilder (line 28) | public class AIConfigBuilder {
    method AIConfigBuilder (line 37) | public AIConfigBuilder(final String modelName) {
    method setApiKey (line 60) | public synchronized AIConfigBuilder setApiKey(final String apiKey) {
    method setApiUrl (line 74) | public synchronized AIConfigBuilder setApiUrl(final String apiUrl) {
    method setModel (line 88) | public synchronized AIConfigBuilder setModel(final String model) {
    method putAdditionalConfig (line 103) | public AIConfigBuilder putAdditionalConfig(final String key, final Obj...
    method setTimout (line 118) | @Deprecated
    method setTimeout (line 130) | public synchronized AIConfigBuilder setTimeout(final int timeout) {
    method setReadTimout (line 145) | @Deprecated
    method setReadTimeout (line 157) | public synchronized AIConfigBuilder setReadTimeout(final int readTimeo...
    method setProxy (line 171) | public synchronized AIConfigBuilder setProxy(final Proxy proxy) {
    method build (line 185) | public AIConfig build() {

FILE: hutool-ai/src/main/java/cn/hutool/ai/core/AIConfigRegistry.java
  class AIConfigRegistry (line 31) | public class AIConfigRegistry {
    method getConfigClass (line 49) | public static Class<? extends AIConfig> getConfigClass(final String mo...

FILE: hutool-ai/src/main/java/cn/hutool/ai/core/AIService.java
  type AIService (line 29) | public interface AIService {
    method chat (line 38) | default String chat(String prompt){
    method chat (line 51) | default void chat(String prompt, final Consumer<String> callback){
    method chat (line 65) | String chat(final List<Message> messages);
    method chat (line 74) | void chat(final List<Message> messages, final Consumer<String> callback);

FILE: hutool-ai/src/main/java/cn/hutool/ai/core/AIServiceProvider.java
  type AIServiceProvider (line 25) | public interface AIServiceProvider {
    method getServiceName (line 33) | String getServiceName();
    method create (line 43) | <T extends AIService> T create(final AIConfig config);

FILE: hutool-ai/src/main/java/cn/hutool/ai/core/BaseAIService.java
  class BaseAIService (line 39) | public class BaseAIService {
    method BaseAIService (line 48) | public BaseAIService(final AIConfig config) {
    method sendGet (line 57) | protected HttpResponse sendGet(final String endpoint) {
    method sendPost (line 80) | protected HttpResponse sendPost(final String endpoint, final String pa...
    method sendFormData (line 105) | protected HttpResponse sendFormData(final String endpoint, final Map<S...
    method sendPostStream (line 131) | protected void sendPostStream(final String endpoint, final Map<String,...

FILE: hutool-ai/src/main/java/cn/hutool/ai/core/BaseConfig.java
  class BaseConfig (line 29) | public class BaseConfig implements AIConfig {
    method setApiKey (line 48) | @Override
    method getApiKey (line 53) | @Override
    method setApiUrl (line 58) | @Override
    method getApiUrl (line 63) | @Override
    method setModel (line 68) | @Override
    method getModel (line 73) | @Override
    method putAdditionalConfigByKey (line 78) | @Override
    method getAdditionalConfigByKey (line 83) | @Override
    method getAdditionalConfigMap (line 88) | @Override
    method getTimeout (line 93) | @Override
    method setTimeout (line 98) | @Override
    method getReadTimeout (line 103) | @Override
    method setReadTimeout (line 108) | @Override
    method getHasProxy (line 113) | @Override
    method setHasProxy (line 118) | @Override
    method getProxy (line 123) | @Override
    method setProxy (line 128) | @Override

FILE: hutool-ai/src/main/java/cn/hutool/ai/core/Message.java
  class Message (line 25) | public class Message {
    method Message (line 34) | public Message() {
    method Message (line 43) | public Message(final String role, final Object content) {
    method setRole (line 53) | public void setRole(final String role) {
    method getRole (line 62) | public String getRole() {
    method getContent (line 71) | public Object getContent() {
    method setContent (line 80) | public void setContent(final Object content) {

FILE: hutool-ai/src/main/java/cn/hutool/ai/model/deepseek/DeepSeekCommon.java
  class DeepSeekCommon (line 25) | public class DeepSeekCommon {

FILE: hutool-ai/src/main/java/cn/hutool/ai/model/deepseek/DeepSeekConfig.java
  class DeepSeekConfig (line 28) | public class DeepSeekConfig extends BaseConfig {
    method DeepSeekConfig (line 34) | public DeepSeekConfig() {
    method DeepSeekConfig (line 39) | public DeepSeekConfig(String apiKey) {
    method getModelName (line 44) | @Override

FILE: hutool-ai/src/main/java/cn/hutool/ai/model/deepseek/DeepSeekProvider.java
  class DeepSeekProvider (line 28) | public class DeepSeekProvider implements AIServiceProvider {
    method getServiceName (line 30) | @Override
    method create (line 35) | @Override

FILE: hutool-ai/src/main/java/cn/hutool/ai/model/deepseek/DeepSeekService.java
  type DeepSeekService (line 28) | public interface DeepSeekService extends AIService {
    method beta (line 37) | String beta(String prompt);
    method beta (line 45) | void beta(String prompt, final Consumer<String> callback);
    method models (line 53) | String models();
    method balance (line 61) | String balance();

FILE: hutool-ai/src/main/java/cn/hutool/ai/model/deepseek/DeepSeekServiceImpl.java
  class DeepSeekServiceImpl (line 38) | public class DeepSeekServiceImpl extends BaseAIService implements DeepSe...
    method DeepSeekServiceImpl (line 54) | public DeepSeekServiceImpl(final AIConfig config) {
    method chat (line 59) | @Override
    method chat (line 66) | @Override
    method beta (line 72) | @Override
    method beta (line 79) | @Override
    method models (line 85) | @Override
    method balance (line 91) | @Override
    method buildChatRequestBody (line 98) | private String buildChatRequestBody(final List<Message> messages) {
    method buildChatStreamRequestBody (line 110) | private Map<String, Object> buildChatStreamRequestBody(final List<Mess...
    method buildBetaRequestBody (line 123) | private String buildBetaRequestBody(final String prompt) {
    method buildBetaStreamRequestBody (line 136) | private Map<String, Object> buildBetaStreamRequestBody(final String pr...

FILE: hutool-ai/src/main/java/cn/hutool/ai/model/doubao/DoubaoCommon.java
  class DoubaoCommon (line 25) | public class DoubaoCommon {
    type DoubaoContext (line 28) | public enum DoubaoContext {
      method DoubaoContext (line 35) | DoubaoContext(String mode) {
      method getMode (line 39) | public String getMode() {
    type DoubaoVision (line 45) | public enum DoubaoVision {
      method DoubaoVision (line 53) | DoubaoVision(String detail) {
      method getDetail (line 57) | public String getDetail() {
    type DoubaoVideo (line 63) | public enum DoubaoVideo {
      method DoubaoVideo (line 90) | DoubaoVideo(String type, Object value) {
      method getType (line 95) | public String getType() {
      method getValue (line 99) | public Object getValue() {

FILE: hutool-ai/src/main/java/cn/hutool/ai/model/doubao/DoubaoConfig.java
  class DoubaoConfig (line 28) | public class DoubaoConfig extends BaseConfig {
    method DoubaoConfig (line 34) | public DoubaoConfig() {
    method DoubaoConfig (line 39) | public DoubaoConfig(String apiKey) {
    method getModelName (line 44) | @Override

FILE: hutool-ai/src/main/java/cn/hutool/ai/model/doubao/DoubaoProvider.java
  class DoubaoProvider (line 28) | public class DoubaoProvider implements AIServiceProvider {
    method getServiceName (line 30) | @Override
    method create (line 35) | @Override

FILE: hutool-ai/src/main/java/cn/hutool/ai/model/doubao/DoubaoService.java
  type DoubaoService (line 32) | public interface DoubaoService extends AIService {
    method chatVision (line 42) | default String chatVision(String prompt, final List<String> images) {
    method chatVision (line 54) | default void chatVision(String prompt, final List<String> images, fina...
    method chatVision (line 67) | String chatVision(String prompt, final List<String> images, String det...
    method chatVision (line 78) | void chatVision(String prompt, final List<String> images, String detai...
    method videoTasks (line 90) | String videoTasks(String text, String image, final List<DoubaoCommon.D...
    method videoTasks (line 101) | default String videoTasks(String text, String image) {
    method getVideoTasksInfo (line 112) | String getVideoTasksInfo(String taskId);
    method embeddingText (line 121) | String embeddingText(String[] input);
    method embeddingVision (line 131) | String embeddingVision(String text, String image);
    method botsChat (line 140) | String botsChat(final List<Message> messages);
    method botsChat (line 149) | void botsChat(final List<Message> messages, final Consumer<String> cal...
    method tokenization (line 158) | String tokenization(String[] text);
    method batchChat (line 169) | default String batchChat(String prompt){
    method batchChat (line 185) | String batchChat(final List<Message> messages);
    method createContext (line 197) | String createContext(final List<Message> messages, String mode);
    method createContext (line 208) | default String createContext(final List<Message> messages) {
    method chatContext (line 221) | default String chatContext(String prompt, String contextId){
    method chatContext (line 236) | default void chatContext(String prompt, String contextId, final Consum...
    method chatContext (line 251) | String chatContext(final List<Message> messages, String contextId);
    method chatContext (line 262) | void chatContext(final List<Message> messages, String contextId, final...
    method imagesGenerations (line 272) | String imagesGenerations(String prompt);

FILE: hutool-ai/src/main/java/cn/hutool/ai/model/doubao/DoubaoServiceImpl.java
  class DoubaoServiceImpl (line 39) | public class DoubaoServiceImpl extends BaseAIService implements DoubaoSe...
    method DoubaoServiceImpl (line 62) | public DoubaoServiceImpl(final AIConfig config) {
    method chat (line 67) | @Override
    method chat (line 74) | @Override
    method chatVision (line 80) | @Override
    method chatVision (line 87) | @Override
    method videoTasks (line 93) | @Override
    method getVideoTasksInfo (line 100) | @Override
    method embeddingText (line 107) | @Override
    method embeddingVision (line 114) | @Override
    method botsChat (line 121) | @Override
    method botsChat (line 128) | @Override
    method tokenization (line 134) | @Override
    method batchChat (line 142) | @Override
    method createContext (line 149) | @Override
    method chatContext (line 156) | @Override
    method chatContext (line 163) | @Override
    method imagesGenerations (line 169) | @Override
    method buildChatRequestBody (line 177) | private String buildChatRequestBody(final List<Message> messages) {
    method buildChatStreamRequestBody (line 189) | private Map<String, Object> buildChatStreamRequestBody(final List<Mess...
    method buildChatVisionRequestBody (line 202) | private String buildChatVisionRequestBody(String prompt, final List<St...
    method buildChatVisionStreamRequestBody (line 232) | private Map<String, Object> buildChatVisionStreamRequestBody(String pr...
    method buildEmbeddingTextRequestBody (line 264) | private String buildEmbeddingTextRequestBody(String[] input) {
    method buildEmbeddingVisionRequestBody (line 275) | private String buildEmbeddingVisionRequestBody(String text, String ima...
    method buildBotsChatRequestBody (line 306) | private String buildBotsChatRequestBody(final List<Message> messages) {
    method buildBotsChatStreamRequestBody (line 310) | private Map<String, Object> buildBotsChatStreamRequestBody(final List<...
    method buildTokenizationRequestBody (line 315) | private String buildTokenizationRequestBody(String[] text) {
    method buildBatchChatRequestBody (line 323) | private String buildBatchChatRequestBody(final List<Message> messages) {
    method buildBatchChatStreamRequestBody (line 327) | private Map<String, Object> buildBatchChatStreamRequestBody(final List...
    method buildCreateContextRequest (line 332) | private String buildCreateContextRequest(final List<Message> messages,...
    method buildChatContentRequestBody (line 344) | private String buildChatContentRequestBody(final List<Message> message...
    method buildChatContentStreamRequestBody (line 356) | private Map<String, Object> buildChatContentStreamRequestBody(final Li...
    method buildGenerationsTasksRequestBody (line 370) | private String buildGenerationsTasksRequestBody(String text, String im...
    method buildImagesGenerationsRequestBody (line 429) | private String buildImagesGenerationsRequestBody(String prompt) {

FILE: hutool-ai/src/main/java/cn/hutool/ai/model/gemini/GeminiCommon.java
  class GeminiCommon (line 25) | public class GeminiCommon {
    type GeminiImageCount (line 28) | public enum GeminiImageCount {
      method GeminiImageCount (line 37) | GeminiImageCount(int count) {
      method getCount (line 41) | public int getCount() {
    type GeminiImageSize (line 47) | public enum GeminiImageSize {
      method GeminiImageSize (line 54) | GeminiImageSize(String value) {
      method getValue (line 58) | public String getValue() {
    type GeminiAspectRatio (line 64) | public enum GeminiAspectRatio {
      method GeminiAspectRatio (line 74) | GeminiAspectRatio(String ratio) {
      method getRatio (line 78) | public String getRatio() {
    type GeminiPersonGeneration (line 85) | public enum GeminiPersonGeneration {
      method GeminiPersonGeneration (line 93) | GeminiPersonGeneration(String value) {
      method getValue (line 97) | public String getValue() {
    type GeminiDurationSeconds (line 103) | public enum GeminiDurationSeconds {
      method GeminiDurationSeconds (line 111) | GeminiDurationSeconds(Integer value) {
      method getValue (line 115) | public Integer getValue() {
    type GeminiVoice (line 121) | public enum GeminiVoice {
      method GeminiVoice (line 131) | GeminiVoice(String value) {
      method getValue (line 135) | public String getValue() {

FILE: hutool-ai/src/main/java/cn/hutool/ai/model/gemini/GeminiConfig.java
  class GeminiConfig (line 28) | public class GeminiConfig extends BaseConfig {
    method GeminiConfig (line 36) | public GeminiConfig() {
    method GeminiConfig (line 41) | public GeminiConfig(String apiKey) {
    method getModelName (line 46) | @Override

FILE: hutool-ai/src/main/java/cn/hutool/ai/model/gemini/GeminiProvider.java
  class GeminiProvider (line 28) | public class GeminiProvider implements AIServiceProvider {
    method getServiceName (line 30) | @Override
    method create (line 35) | @Override

FILE: hutool-ai/src/main/java/cn/hutool/ai/model/gemini/GeminiService.java
  type GeminiService (line 32) | public interface GeminiService extends AIService {
    method chatMultimodal (line 41) | String chatMultimodal(String prompt, final List<String> mediaList);
    method chatMultimodal (line 50) | void chatMultimodal(String prompt, final List<String> mediaList, final...
    method chatJson (line 58) | String chatJson(final List<Message> messages);
    method predictImage (line 66) | String predictImage(String prompt);
    method predictVideo (line 74) | String predictVideo(String prompt);
    method getVideoOperation (line 82) | String getVideoOperation(String operationName);
    method downLoadVideo (line 91) | void downLoadVideo(String videoUri, String filePath);
    method textToSpeech (line 99) | String textToSpeech(String prompt);
    method textToSpeech (line 108) | String textToSpeech(String prompt, String voice);
    method uploadFile (line 116) | String uploadFile(final File file);
    method addWavHeader (line 124) | byte[] addWavHeader(final byte[] rawPcm);

FILE: hutool-ai/src/main/java/cn/hutool/ai/model/gemini/GeminiServiceImpl.java
  class GeminiServiceImpl (line 45) | public class GeminiServiceImpl extends BaseAIService implements GeminiSe...
    method GeminiServiceImpl (line 53) | public GeminiServiceImpl(final AIConfig config) {
    method getEndpoint (line 57) | private String getEndpoint(final boolean stream) {
    method getPredictImageEndpoint (line 62) | private String getPredictImageEndpoint() {
    method getPredictVideoEndpoint (line 66) | private String getPredictVideoEndpoint() {
    method chat (line 70) | @Override
    method chat (line 77) | @Override
    method chatMultimodal (line 84) | @Override
    method chatMultimodal (line 91) | @Override
    method chatJson (line 98) | @Override
    method predictImage (line 112) | @Override
    method predictVideo (line 119) | @Override
    method getVideoOperation (line 126) | @Override
    method downLoadVideo (line 133) | @Override
    method textToSpeech (line 149) | @Override
    method textToSpeech (line 156) | @Override
    method uploadFile (line 163) | @Override
    method addWavHeader (line 203) | @Override
    method getUploadBaseUrl (line 252) | private String getUploadBaseUrl() {
    method buildChatRequestMap (line 267) | private Map<String, Object> buildChatRequestMap(final List<Message> me...
    method buildMultimodalRequestMap (line 291) | private Map<String, Object> buildMultimodalRequestMap(String prompt, f...
    method buildPredictVideoRequestMap (line 359) | private Map<String, Object> buildPredictVideoRequestMap(String prompt) {
    method buildPredictImageRequestMap (line 378) | private Map<String, Object> buildPredictImageRequestMap(String prompt) {
    method buildTextToSpeechRequestMap (line 405) | private Map<String, Object> buildTextToSpeechRequestMap(String prompt) {
    method getRemoteFileMimeType (line 434) | private String getRemoteFileMimeType(String fileUri) {
    method sendGet (line 462) | @Override
    method sendPost (line 480) | @Override
    method sendPostStream (line 505) | @Override

FILE: hutool-ai/src/main/java/cn/hutool/ai/model/grok/GrokCommon.java
  class GrokCommon (line 25) | public class GrokCommon {
    type GrokVision (line 28) | public enum GrokVision {
      method GrokVision (line 36) | GrokVision(String detail) {
      method getDetail (line 40) | public String getDetail() {

FILE: hutool-ai/src/main/java/cn/hutool/ai/model/grok/GrokConfig.java
  class GrokConfig (line 28) | public class GrokConfig extends BaseConfig {
    method GrokConfig (line 35) | public GrokConfig() {
    method GrokConfig (line 40) | public GrokConfig(String apiKey) {
    method getModelName (line 45) | @Override

FILE: hutool-ai/src/main/java/cn/hutool/ai/model/grok/GrokProvider.java
  class GrokProvider (line 28) | public class GrokProvider implements AIServiceProvider {
    method getServiceName (line 30) | @Override
    method create (line 35) | @Override

FILE: hutool-ai/src/main/java/cn/hutool/ai/model/grok/GrokService.java
  type GrokService (line 32) | public interface GrokService extends AIService {
    method message (line 42) | default String message(String prompt, int maxToken){
    method message (line 58) | default void message(String prompt, int maxToken, final Consumer<Strin...
    method message (line 73) | String message(List<Message> messages, int maxToken);
    method message (line 83) | void message(List<Message> messages, int maxToken, final Consumer<Stri...
    method chatVision (line 94) | String chatVision(String prompt, final List<String> images, String det...
    method chatVision (line 105) | void chatVision(String prompt, final List<String> images, String detai...
    method chatVision (line 115) | default String chatVision(String prompt, final List<String> images) {
    method chatVision (line 127) | default void chatVision(String prompt, final List<String> images, fina...
    method models (line 137) | String models();
    method getModel (line 146) | String getModel(String modelId);
    method languageModels (line 154) | String languageModels();
    method getLanguageModel (line 163) | String getLanguageModel(String modelId);
    method tokenizeText (line 172) | String tokenizeText(String text);
    method deferredCompletion (line 181) | String deferredCompletion(String requestId);
    method imagesGenerations (line 191) | String imagesGenerations(String prompt);

FILE: hutool-ai/src/main/java/cn/hutool/ai/model/grok/GrokServiceImpl.java
  class GrokServiceImpl (line 38) | public class GrokServiceImpl extends BaseAIService implements GrokService {
    method GrokServiceImpl (line 55) | public GrokServiceImpl(final AIConfig config) {
    method chat (line 60) | @Override
    method chat (line 67) | @Override
    method message (line 73) | @Override
    method message (line 80) | @Override
    method chatVision (line 86) | @Override
    method chatVision (line 93) | @Override
    method models (line 99) | @Override
    method getModel (line 105) | @Override
    method languageModels (line 111) | @Override
    method getLanguageModel (line 117) | @Override
    method tokenizeText (line 123) | @Override
    method deferredCompletion (line 130) | @Override
    method imagesGenerations (line 136) | @Override
    method buildChatRequestBody (line 144) | private String buildChatRequestBody(final List<Message> messages) {
    method buildChatStreamRequestBody (line 155) | private Map<String, Object> buildChatStreamRequestBody(final List<Mess...
    method buildChatVisionRequestBody (line 168) | private String buildChatVisionRequestBody(String prompt, final List<St...
    method buildChatVisionStreamRequestBody (line 198) | private Map<String, Object> buildChatVisionStreamRequestBody(String pr...
    method buildMessageRequestBody (line 230) | private String buildMessageRequestBody(final List<Message> messages, i...
    method buildMessageStreamRequestBody (line 241) | private Map<String, Object> buildMessageStreamRequestBody(final List<M...
    method buildTokenizeRequestBody (line 254) | private String buildTokenizeRequestBody(String text) {
    method buildImagesGenerationsRequestBody (line 266) | private String buildImagesGenerationsRequestBody(String prompt) {

FILE: hutool-ai/src/main/java/cn/hutool/ai/model/hutool/HutoolCommon.java
  class HutoolCommon (line 25) | public class HutoolCommon {
    type HutoolVision (line 28) | public enum HutoolVision {
      method HutoolVision (line 36) | HutoolVision(String detail) {
      method getDetail (line 40) | public String getDetail() {
    type HutoolSpeech (line 46) | public enum HutoolSpeech {
      method HutoolSpeech (line 60) | HutoolSpeech(String voice) {
      method getVoice (line 64) | public String getVoice() {
    type HutoolVideo (line 70) | public enum HutoolVideo {
      method HutoolVideo (line 97) | HutoolVideo(String type, Object value) {
      method getType (line 102) | public String getType() {
      method getValue (line 106) | public Object getValue() {

FILE: hutool-ai/src/main/java/cn/hutool/ai/model/hutool/HutoolConfig.java
  class HutoolConfig (line 28) | public class HutoolConfig extends BaseConfig {
    method HutoolConfig (line 34) | public HutoolConfig() {
    method HutoolConfig (line 39) | public HutoolConfig(String apiKey) {
    method getModelName (line 44) | @Override

FILE: hutool-ai/src/main/java/cn/hutool/ai/model/hutool/HutoolProvider.java
  class HutoolProvider (line 28) | public class HutoolProvider implements AIServiceProvider {
    method getServiceName (line 30) | @Override
    method create (line 35) | @Override

FILE: hutool-ai/src/main/java/cn/hutool/ai/model/hutool/HutoolService.java
  type HutoolService (line 32) | public interface HutoolService extends AIService {
    method chatVision (line 43) | String chatVision(String prompt, final List<String> images, String det...
    method chatVision (line 54) | void chatVision(String prompt, final List<String> images, String detai...
    method chatVision (line 64) | default String chatVision(String prompt, final List<String> images) {
    method chatVision (line 76) | default void chatVision(String prompt, final List<String> images, fina...
    method tokenizeText (line 87) | String tokenizeText(String text);
    method imagesGenerations (line 96) | String imagesGenerations(String prompt);
    method embeddingVision (line 106) | String embeddingVision(String text, String image);
    method tts (line 116) | InputStream tts(String input, final HutoolCommon.HutoolSpeech voice);
    method tts (line 125) | default InputStream tts(String input) {
    method stt (line 136) | String stt(final File file);
    method videoTasks (line 147) | String videoTasks(String text, String image, final List<HutoolCommon.H...
    method videoTasks (line 157) | default String videoTasks(String text, String image) {
    method getVideoTasksInfo (line 168) | String getVideoTasksInfo(String taskId);

FILE: hutool-ai/src/main/java/cn/hutool/ai/model/hutool/HutoolServiceImpl.java
  class HutoolServiceImpl (line 42) | public class HutoolServiceImpl extends BaseAIService implements HutoolSe...
    method HutoolServiceImpl (line 59) | public HutoolServiceImpl(final AIConfig config) {
    method chat (line 64) | @Override
    method chat (line 71) | @Override
    method chatVision (line 77) | @Override
    method chatVision (line 84) | @Override
    method tokenizeText (line 91) | @Override
    method imagesGenerations (line 98) | @Override
    method embeddingVision (line 106) | @Override
    method tts (line 113) | @Override
    method stt (line 133) | @Override
    method videoTasks (line 141) | @Override
    method getVideoTasksInfo (line 148) | @Override
    method buildChatRequestBody (line 156) | private String buildChatRequestBody(final List<Message> messages) {
    method buildChatStreamRequestBody (line 167) | private Map<String, Object> buildChatStreamRequestBody(final List<Mess...
    method buildChatVisionRequestBody (line 180) | private String buildChatVisionRequestBody(String prompt, final List<St...
    method buildChatVisionStreamRequestBody (line 210) | private Map<String, Object> buildChatVisionStreamRequestBody(String pr...
    method buildTokenizeRequestBody (line 243) | private String buildTokenizeRequestBody(String text) {
    method buildImagesGenerationsRequestBody (line 255) | private String buildImagesGenerationsRequestBody(String prompt) {
    method buildEmbeddingVisionRequestBody (line 266) | private String buildEmbeddingVisionRequestBody(String text, String ima...
    method buildTTSRequestBody (line 298) | private String buildTTSRequestBody(String input, String voice) {
    method buildSTTRequestBody (line 310) | private Map<String, Object> buildSTTRequestBody(final File file) {
    method buildGenerationsTasksRequestBody (line 321) | private String buildGenerationsTasksRequestBody(String text, String im...

FILE: hutool-ai/src/main/java/cn/hutool/ai/model/ollama/OllamaCommon.java
  class OllamaCommon (line 25) | public class OllamaCommon {
    type OllamaFormat (line 30) | public enum OllamaFormat {
      method OllamaFormat (line 42) | OllamaFormat(String format) {
      method getFormat (line 46) | public String getFormat() {
    class Options (line 54) | public static class Options {

FILE: hutool-ai/src/main/java/cn/hutool/ai/model/ollama/OllamaConfig.java
  class OllamaConfig (line 28) | public class OllamaConfig extends BaseConfig {
    method OllamaConfig (line 34) | public OllamaConfig() {
    method OllamaConfig (line 39) | public OllamaConfig(String apiUrl) {
    method OllamaConfig (line 44) | public OllamaConfig(String apiUrl, String model) {
    method getModelName (line 50) | @Override

FILE: hutool-ai/src/main/java/cn/hutool/ai/model/ollama/OllamaProvider.java
  class OllamaProvider (line 28) | public class OllamaProvider implements AIServiceProvider {
    method getServiceName (line 30) | @Override
    method create (line 35) | @Override

FILE: hutool-ai/src/main/java/cn/hutool/ai/model/ollama/OllamaService.java
  type OllamaService (line 32) | public interface OllamaService extends AIService {
    method generate (line 41) | String generate(String prompt);
    method generate (line 50) | void generate(String prompt, Consumer<String> callback);
    method generate (line 60) | String generate(String prompt, String format);
    method generate (line 70) | void generate(String prompt, String format, Consumer<String> callback);
    method embeddings (line 79) | String embeddings(String prompt);
    method listModels (line 87) | String listModels();
    method showModel (line 96) | String showModel(String modelName);
    method pullModel (line 105) | String pullModel(String modelName);
    method deleteModel (line 114) | String deleteModel(String modelName);
    method copyModel (line 124) | String copyModel(String source, String destination);
    method chat (line 133) | default String chat(String prompt) {
    method chat (line 146) | default void chat(String prompt, Consumer<String> callback) {

FILE: hutool-ai/src/main/java/cn/hutool/ai/model/ollama/OllamaServiceImpl.java
  class OllamaServiceImpl (line 43) | public class OllamaServiceImpl extends BaseAIService implements OllamaSe...
    method OllamaServiceImpl (line 67) | public OllamaServiceImpl(final AIConfig config) {
    method chat (line 71) | @Override
    method chat (line 83) | @Override
    method generate (line 89) | @Override
    method generate (line 96) | @Override
    method generate (line 102) | @Override
    method generate (line 109) | @Override
    method embeddings (line 115) | @Override
    method listModels (line 122) | @Override
    method showModel (line 128) | @Override
    method pullModel (line 135) | @Override
    method deleteModel (line 142) | @Override
    method copyModel (line 149) | @Override
    method buildChatRequestBody (line 157) | private String buildChatRequestBody(final List<Message> messages) {
    method buildChatStreamRequestBody (line 169) | private Map<String, Object> buildChatStreamRequestBody(final List<Mess...
    method buildGenerateRequestBody (line 181) | private String buildGenerateRequestBody(final String prompt, final Str...
    method buildGenerateStreamRequestBody (line 195) | private Map<String, Object> buildGenerateStreamRequestBody(final Strin...
    method buildEmbeddingsRequestBody (line 210) | private String buildEmbeddingsRequestBody(final String prompt) {
    method buildShowModelRequestBody (line 221) | private String buildShowModelRequestBody(final String modelName) {
    method buildPullModelRequestBody (line 229) | private String buildPullModelRequestBody(final String modelName) {
    method buildDeleteModelRequestBody (line 237) | private String buildDeleteModelRequestBody(final String modelName) {
    method sendDeleteRequest (line 251) | private HttpResponse sendDeleteRequest(String endpoint, String paramJs...
    method buildCopyModelRequestBody (line 265) | private String buildCopyModelRequestBody(final String source, final St...

FILE: hutool-ai/src/main/java/cn/hutool/ai/model/openai/OpenaiCommon.java
  class OpenaiCommon (line 25) | public class OpenaiCommon {
    type OpenaiReasoning (line 28) | public enum OpenaiReasoning {
      method OpenaiReasoning (line 36) | OpenaiReasoning(String effort) {
      method getEffort (line 40) | public String getEffort() {
    type OpenaiVision (line 46) | public enum OpenaiVision {
      method OpenaiVision (line 54) | OpenaiVision(String detail) {
      method getDetail (line 58) | public String getDetail() {
    type OpenaiSpeech (line 64) | public enum OpenaiSpeech {
      method OpenaiSpeech (line 78) | OpenaiSpeech(String voice) {
      method getVoice (line 82) | public String getVoice() {

FILE: hutool-ai/src/main/java/cn/hutool/ai/model/openai/OpenaiConfig.java
  class OpenaiConfig (line 28) | public class OpenaiConfig extends BaseConfig {
    method OpenaiConfig (line 34) | public OpenaiConfig() {
    method OpenaiConfig (line 39) | public OpenaiConfig(String apiKey) {
    method getModelName (line 44) | @Override

FILE: hutool-ai/src/main/java/cn/hutool/ai/model/openai/OpenaiProvider.java
  class OpenaiProvider (line 28) | public class OpenaiProvider implements AIServiceProvider {
    method getServiceName (line 30) | @Override
    method create (line 35) | @Override

FILE: hutool-ai/src/main/java/cn/hutool/ai/model/openai/OpenaiService.java
  type OpenaiService (line 34) | public interface OpenaiService extends AIService {
    method chatVision (line 45) | String chatVision(String prompt, final List<String> images, String det...
    method chatVision (line 56) | void chatVision(String prompt, final List<String> images, String detai...
    method chatVision (line 67) | default String chatVision(String prompt, final List<String> images) {
    method chatVision (line 79) | default void chatVision(String prompt, final List<String> images, fina...
    method imagesGenerations (line 90) | String imagesGenerations(String prompt);
    method imagesEdits (line 101) | String imagesEdits(String prompt, final File image, final File mask);
    method imagesEdits (line 111) | default String imagesEdits(String prompt, final File image) {
    method imagesVariations (line 122) | String imagesVariations(final File image);
    method textToSpeech (line 132) | InputStream textToSpeech(String input, final OpenaiCommon.OpenaiSpeech...
    method textToSpeech (line 141) | default InputStream textToSpeech(String input) {
    method speechToText (line 152) | String speechToText(final File file);
    method embeddingText (line 161) | String embeddingText(String input);
    method moderations (line 172) | String moderations(String text, String imgUrl);
    method moderations (line 182) | default String moderations(String text) {
    method chatReasoning (line 195) | default String chatReasoning(String prompt, String reasoningEffort){
    method chatReasoning (line 211) | default void chatReasoning(String prompt, String reasoningEffort, fina...
    method chatReasoning (line 226) | default String chatReasoning(String prompt) {
    method chatReasoning (line 238) | default void chatReasoning(String prompt, final Consumer<String> callb...
    method chatReasoning (line 251) | String chatReasoning(final List<Message> messages, String reasoningEff...
    method chatReasoning (line 262) | void chatReasoning(final List<Message> messages, String reasoningEffor...
    method chatReasoning (line 272) | default String chatReasoning(final List<Message> messages) {
    method chatReasoning (line 284) | default void chatReasoning(final List<Message> messages, final Consume...

FILE: hutool-ai/src/main/java/cn/hutool/ai/model/openai/OpenaiServiceImpl.java
  class OpenaiServiceImpl (line 41) | public class OpenaiServiceImpl extends BaseAIService implements OpenaiSe...
    method OpenaiServiceImpl (line 60) | public OpenaiServiceImpl(final AIConfig config) {
    method chat (line 65) | @Override
    method chat (line 72) | @Override
    method chatVision (line 78) | @Override
    method chatVision (line 85) | @Override
    method imagesGenerations (line 91) | @Override
    method imagesEdits (line 98) | @Override
    method imagesVariations (line 105) | @Override
    method textToSpeech (line 112) | @Override
    method speechToText (line 119) | @Override
    method embeddingText (line 126) | @Override
    method moderations (line 133) | @Override
    method chatReasoning (line 140) | @Override
    method chatReasoning (line 147) | @Override
    method buildChatRequestBody (line 154) | private String buildChatRequestBody(final List<Message> messages) {
    method buildChatStreamRequestBody (line 165) | private Map<String, Object> buildChatStreamRequestBody(final List<Mess...
    method buildChatVisionRequestBody (line 178) | private String buildChatVisionRequestBody(String prompt, final List<St...
    method buildChatVisionStreamRequestBody (line 208) | private Map<String, Object> buildChatVisionStreamRequestBody(String pr...
    method buildImagesGenerationsRequestBody (line 240) | private String buildImagesGenerationsRequestBody(String prompt) {
    method buildImagesEditsRequestBody (line 251) | private Map<String, Object> buildImagesEditsRequestBody(String prompt,...
    method buildImagesVariationsRequestBody (line 266) | private Map<String, Object> buildImagesVariationsRequestBody(final Fil...
    method buildTTSRequestBody (line 277) | private String buildTTSRequestBody(String input, String voice) {
    method buildSTTRequestBody (line 289) | private Map<String, Object> buildSTTRequestBody(final File file) {
    method buildEmbeddingTextRequestBody (line 300) | private String buildEmbeddingTextRequestBody(String input) {
    method buileModerationsRequestBody (line 311) | private String buileModerationsRequestBody(String text, String imgUrl) {
    method buildChatReasoningRequestBody (line 342) | private String buildChatReasoningRequestBody(final List<Message> messa...
    method buildChatReasoningStreamRequestBody (line 353) | private Map<String, Object> buildChatReasoningStreamRequestBody(final ...

FILE: hutool-ai/src/test/java/AIServiceFactoryTest.java
  class AIServiceFactoryTest (line 26) | class AIServiceFactoryTest {
    method getAIService (line 30) | @Test
    method testGetAIService (line 36) | @Test

FILE: hutool-ai/src/test/java/AIUtilTest.java
  class AIUtilTest (line 35) | class AIUtilTest {
    method getAIService (line 39) | @Test
    method testGetAIService (line 45) | @Test
    method getHutoolService (line 51) | @Test
    method getDeepSeekService (line 57) | @Test
    method getDoubaoService (line 63) | @Test
    method getGrokService (line 69) | @Test
    method getOpenAIService (line 75) | @Test
    method getGeminiService (line 81) | @Test
    method chat (line 87) | @Test
    method testChat (line 93) | @Test

FILE: hutool-ai/src/test/java/cn/hutool/ai/model/deepseek/DeepSeekServiceTest.java
  class DeepSeekServiceTest (line 33) | class DeepSeekServiceTest {
    method chat (line 38) | @Test
    method chatStream (line 45) | @Test
    method testChat (line 68) | @Test
    method beta (line 78) | @Test
    method betaStream (line 86) | @Test
    method models (line 109) | @Test
    method balance (line 116) | @Test

FILE: hutool-ai/src/test/java/cn/hutool/ai/model/doubao/DoubaoServiceTest.java
  class DoubaoServiceTest (line 37) | class DoubaoServiceTest {
    method chat (line 42) | @Test
    method chatStream (line 49) | @Test
    method testChat (line 72) | @Test
    method chatVision (line 82) | @Test
    method testChatVision (line 92) | @Test
    method testChatVisionStream (line 101) | @Test
    method videoTasks (line 128) | @Test
    method getVideoTasksInfo (line 138) | @Test
    method embeddingText (line 148) | @Test
    method embeddingVision (line 157) | @Test
    method botsChat (line 166) | @Test
    method botsChatStream (line 178) | @Test
    method tokenization (line 205) | @Test
    method batchChat (line 212) | @Test
    method testBatchChat (line 221) | @Test
    method createContext (line 233) | @Test
    method testCreateContext (line 244) | @Test
    method chatContext (line 255) | @Test
    method testChatContext (line 265) | @Test
    method testChatContextStream (line 276) | @Test
    method imagesGenerations (line 303) | @Test

FILE: hutool-ai/src/test/java/cn/hutool/ai/model/gemini/GeminiServiceTest.java
  class GeminiServiceTest (line 42) | class GeminiServiceTest {
    method chat (line 47) | @Test
    method chatStream (line 54) | @Test
    method testUpload (line 77) | @Test
    method chatMultimodalImage (line 86) | @Test
    method chatMultimodalImageSteam (line 95) | @Test
    method chatMultimodalVideo (line 120) | @Test
    method chatMultimodalVideoStream (line 129) | @Test
    method chatJson (line 154) | @Test
    method chatImage (line 164) | @Test
    method predictImage (line 175) | @Test
    method predictImageAndSave (line 186) | @Test
    method generateVideoTest (line 218) | @Test
    method downLoadVideo (line 254) | @Test
    method testTTSWithBuildMethod (line 261) | @Test

FILE: hutool-ai/src/test/java/cn/hutool/ai/model/grok/GrokServiceTest.java
  class GrokServiceTest (line 37) | class GrokServiceTest {
    method chat (line 43) | @Test
    method chatStream (line 50) | @Test
    method testChat (line 73) | @Test
    method message (line 83) | @Test
    method messageStream (line 90) | @Test
    method chatVision (line 113) | @Test
    method testChatVisionStream (line 122) | @Test
    method testChatVision (line 147) | @Test
    method models (line 155) | @Test
    method getModel (line 162) | @Test
    method languageModels (line 169) | @Test
    method getLanguageModel (line 176) | @Test
    method tokenizeText (line 183) | @Test
    method deferredCompletion (line 190) | @Test
    method imagesGenerations (line 197) | @Test

FILE: hutool-ai/src/test/java/cn/hutool/ai/model/hutool/HutoolServiceTest.java
  class HutoolServiceTest (line 40) | class HutoolServiceTest {
    method chat (line 46) | @Test
    method chatStream (line 53) | @Test
    method testChat (line 76) | @Test
    method chatVision (line 87) | @Test
    method testChatVisionStream (line 95) | @Test
    method testChatVision (line 119) | @Test
    method tokenizeText (line 126) | @Test
    method imagesGenerations (line 133) | @Test
    method embeddingVision (line 140) | @Test
    method textToSpeech (line 147) | @Test
    method speechToText (line 168) | @Test
    method videoTasks (line 176) | @Test
    method getVideoTasksInfo (line 184) | @Test

FILE: hutool-ai/src/test/java/cn/hutool/ai/model/ollama/OllamaServiceTest.java
  class OllamaServiceTest (line 45) | class OllamaServiceTest {
    method testSimple (line 142) | @Test
    method testStream (line 152) | @Test
    method testSimpleWithHistory (line 182) | @Test
    method testStreamWithHistory (line 192) | @Test
    method testListModels (line 225) | @Test
    method testPullModel (line 235) | @Test
    method testDeleteModel (line 250) | @Test

FILE: hutool-ai/src/test/java/cn/hutool/ai/model/openai/OpenaiProxyServiceTest.java
  class OpenaiProxyServiceTest (line 46) | class OpenaiProxyServiceTest {
    method chat (line 57) | @Test
    method chatStream (line 64) | @Test
    method testChat (line 87) | @Test
    method chatVision (line 97) | @Test
    method testChatVisionStream (line 106) | @Test
    method imagesGenerations (line 132) | @Test
    method imagesEdits (line 142) | @Test
    method imagesVariations (line 152) | @Test
    method textToSpeech (line 162) | @Test
    method speechToText (line 187) | @Test
    method embeddingText (line 197) | @Test
    method moderations (line 206) | @Test
    method chatReasoning (line 215) | @Test
    method chatReasoningStream (line 227) | @Test

FILE: hutool-ai/src/test/java/cn/hutool/ai/model/openai/OpenaiServiceTest.java
  class OpenaiServiceTest (line 44) | class OpenaiServiceTest {
    method chat (line 50) | @Test
    method chatStream (line 57) | @Test
    method testChat (line 80) | @Test
    method chatVision (line 90) | @Test
    method testChatVisionStream (line 99) | @Test
    method imagesGenerations (line 125) | @Test
    method imagesEdits (line 135) | @Test
    method imagesVariations (line 145) | @Test
    method textToSpeech (line 155) | @Test
    method speechToText (line 180) | @Test
    method embeddingText (line 190) | @Test
    method moderations (line 199) | @Test
    method chatReasoning (line 208) | @Test
    method chatReasoningStream (line 220) | @Test

FILE: hutool-all/src/main/java/cn/hutool/Hutool.java
  class Hutool (line 43) | public class Hutool {
    method Hutool (line 47) | private Hutool() {
    method getAllUtils (line 56) | public static Set<Class<?>> getAllUtils() {
    method printAllUtils (line 64) | public static void printAllUtils() {

FILE: hutool-aop/src/main/java/cn/hutool/aop/ProxyUtil.java
  class ProxyUtil (line 15) | public final class ProxyUtil {
    method proxy (line 25) | public static <T> T proxy(T target, Class<? extends Aspect> aspectClass){
    method proxy (line 37) | public static <T> T proxy(T target, Aspect aspect){
    method newProxyInstance (line 58) | @SuppressWarnings("unchecked")
    method newProxyInstance (line 71) | public static <T> T newProxyInstance(InvocationHandler invocationHandl...

FILE: hutool-aop/src/main/java/cn/hutool/aop/aspects/Aspect.java
  type Aspect (line 12) | public interface Aspect {
    method before (line 22) | boolean before(Object target, Method method, Object[] args);
    method after (line 35) | boolean after(Object target, Method method, Object[] args, Object retu...
    method afterException (line 46) | boolean afterException(Object target, Method method, Object[] args, Th...

FILE: hutool-aop/src/main/java/cn/hutool/aop/aspects/SimpleAspect.java
  class SimpleAspect (line 12) | public class SimpleAspect implements Aspect, Serializable {
    method before (line 15) | @Override
    method after (line 21) | @Override
    method afterException (line 27) | @Override

FILE: hutool-aop/src/main/java/cn/hutool/aop/aspects/TimeIntervalAspect.java
  class TimeIntervalAspect (line 13) | public class TimeIntervalAspect extends SimpleAspect {
    method before (line 18) | @Override
    method after (line 24) | @Override

FILE: hutool-aop/src/main/java/cn/hutool/aop/interceptor/CglibInterceptor.java
  class CglibInterceptor (line 16) | public class CglibInterceptor implements MethodInterceptor, Serializable {
    method CglibInterceptor (line 28) | public CglibInterceptor(Object target, Aspect aspect) {
    method getTarget (line 33) | public Object getTarget() {
    method intercept (line 37) | @Override

FILE: hutool-aop/src/main/java/cn/hutool/aop/interceptor/JdkInterceptor.java
  class JdkInterceptor (line 18) | public class JdkInterceptor implements InvocationHandler, Serializable {
    method JdkInterceptor (line 30) | public JdkInterceptor(Object target, Aspect aspect) {
    method getTarget (line 35) | public Object getTarget() {
    method invoke (line 39) | @Override

FILE: hutool-aop/src/main/java/cn/hutool/aop/interceptor/SpringCglibInterceptor.java
  class SpringCglibInterceptor (line 16) | public class SpringCglibInterceptor implements MethodInterceptor, Serial...
    method SpringCglibInterceptor (line 28) | public SpringCglibInterceptor(Object target, Aspect aspect) {
    method getTarget (line 38) | public Object getTarget() {
    method intercept (line 42) | @Override

FILE: hutool-aop/src/main/java/cn/hutool/aop/proxy/CglibProxyFactory.java
  class CglibProxyFactory (line 17) | public class CglibProxyFactory extends ProxyFactory{
    method proxy (line 20) | @Override
    method create (line 40) | @SuppressWarnings("unchecked")

FILE: hutool-aop/src/main/java/cn/hutool/aop/proxy/JdkProxyFactory.java
  class JdkProxyFactory (line 12) | public class JdkProxyFactory extends ProxyFactory {
    method proxy (line 20) | @Override

FILE: hutool-aop/src/main/java/cn/hutool/aop/proxy/ProxyFactory.java
  class ProxyFactory (line 15) | public abstract class ProxyFactory implements Serializable {
    method proxy (line 27) | public <T> T proxy(T target, Class<? extends Aspect> aspectClass) {
    method proxy (line 39) | public abstract <T> T proxy(T target, Aspect aspect);
    method createProxy (line 49) | public static <T> T createProxy(T target, Class<? extends Aspect> aspe...
    method createProxy (line 61) | public static <T> T createProxy(T target, Aspect aspect) {
    method create (line 76) | public static ProxyFactory create() {

FILE: hutool-aop/src/main/java/cn/hutool/aop/proxy/SpringCglibProxyFactory.java
  class SpringCglibProxyFactory (line 17) | public class SpringCglibProxyFactory extends ProxyFactory{
    method proxy (line 20) | @Override
    method create (line 40) | @SuppressWarnings("unchecked")

FILE: hutool-aop/src/test/java/cn/hutool/aop/test/AopTest.java
  class AopTest (line 15) | public class AopTest {
    method aopTest (line 17) | @Test
    method aopByAutoCglibTest (line 25) | @Test
    type Animal (line 34) | interface Animal {
      method eat (line 35) | String eat();
      method seize (line 37) | void seize();
    class Cat (line 45) | static class Cat implements Animal {
      method eat (line 47) | @Override
      method seize (line 52) | @Override
    class Dog (line 63) | static class Dog {
      method eat (line 64) | public String eat() {
      method seize (line 68) | public void seize() {
    method testCGLIBProxy (line 73) | @Test
    class TagObj (line 84) | @Data

FILE: hutool-aop/src/test/java/cn/hutool/aop/test/IssueI74EX7Test.java
  class IssueI74EX7Test (line 24) | public class IssueI74EX7Test {
    method proxyTest (line 25) | @Test
    method cglibProxyTest (line 37) | @Test
    method springCglibProxyTest (line 49) | @Test
    method springCglibProxyWithoutConstructorTest (line 56) | @Test
    type SmsBlend (line 63) | public interface SmsBlend{
      method send (line 64) | void send();
    class SmsBlendImpl (line 67) | public static class SmsBlendImpl implements SmsBlend{
      method SmsBlendImpl (line 71) | public SmsBlendImpl(final int status) {
      method send (line 75) | @Override
    class SmsBlendImplWithoutConstructor (line 81) | @Setter
      method send (line 86) | @Override

FILE: hutool-aop/src/test/java/cn/hutool/aop/test/IssueIBF20ZTest.java
  class IssueIBF20ZTest (line 13) | public class IssueIBF20ZTest {
    method testLoadFirstAvailableConcurrent (line 15) | @Test

FILE: hutool-bloomFilter/src/main/java/cn/hutool/bloomfilter/BitMapBloomFilter.java
  class BitMapBloomFilter (line 19) | public class BitMapBloomFilter implements BloomFilter {
    method BitMapBloomFilter (line 29) | public BitMapBloomFilter(int m) {
    method BitMapBloomFilter (line 48) | public BitMapBloomFilter(int m, BloomFilter... filters) {
    method add (line 58) | @Override
    method contains (line 73) | @Override

FILE: hutool-bloomFilter/src/main/java/cn/hutool/bloomfilter/BitSetBloomFilter.java
  class BitSetBloomFilter (line 20) | public class BitSetBloomFilter implements BloomFilter {
    method BitSetBloomFilter (line 35) | public BitSetBloomFilter(int c, int n, int k) {
    method init (line 52) | @Deprecated
    method init (line 65) | public void init(String path, Charset charset) throws IOException {
    method add (line 81) | @Override
    method contains (line 101) | @Override
    method getFalsePositiveProbability (line 116) | public double getFalsePositiveProbability() {
    method createHashes (line 128) | public static int[] createHashes(String str, int hashNumber) {
    method hash (line 144) | public static int hash(String str, int k) {

FILE: hutool-bloomFilter/src/main/java/cn/hutool/bloomfilter/BloomFilter.java
  type BloomFilter (line 12) | public interface BloomFilter extends Serializable{
    method contains (line 19) | boolean contains(String str);
    method add (line 28) | boolean add(String str);

FILE: hutool-bloomFilter/src/main/java/cn/hutool/bloomfilter/BloomFilterUtil.java
  class BloomFilterUtil (line 9) | public class BloomFilterUtil {
    method createBitSet (line 19) | public static BitSetBloomFilter createBitSet(int c, int n, int k) {
    method createBitMap (line 29) | public static BitMapBloomFilter createBitMap(int m) {

FILE: hutool-bloomFilter/src/main/java/cn/hutool/bloomfilter/bitMap/BitMap.java
  type BitMap (line 9) | public interface BitMap{
    method add (line 19) | void add(long i);
    method contains (line 27) | boolean contains(long i);
    method remove (line 34) | void remove(long i);

FILE: hutool-bloomFilter/src/main/java/cn/hutool/bloomfilter/bitMap/IntMap.java
  class IntMap (line 11) | public class IntMap implements BitMap, Serializable {
    method IntMap (line 19) | public IntMap() {
    method IntMap (line 28) | public IntMap(int size) {
    method add (line 32) | @Override
    method contains (line 39) | @Override
    method remove (line 46) | @Override

FILE: hutool-bloomFilter/src/main/java/cn/hutool/bloomfilter/bitMap/LongMap.java
  class LongMap (line 11) | public class LongMap implements BitMap, Serializable {
    method LongMap (line 19) | public LongMap() {
    method LongMap (line 28) | public LongMap(int size) {
    method add (line 32) | @Override
    method contains (line 39) | @Override
    method remove (line 46) | @Override

FILE: hutool-bloomFilter/src/main/java/cn/hutool/bloomfilter/filter/AbstractFilter.java
  class AbstractFilter (line 15) | public abstract class AbstractFilter implements BloomFilter {
    method AbstractFilter (line 30) | public AbstractFilter(long maxValue, int machineNum) {
    method AbstractFilter (line 39) | public AbstractFilter(long maxValue) {
    method init (line 49) | public void init(long maxValue, int machineNum) {
    method contains (line 64) | @Override
    method add (line 69) | @Override
    method hash (line 86) | public abstract long hash(String str);

FILE: hutool-bloomFilter/src/main/java/cn/hutool/bloomfilter/filter/DefaultFilter.java
  class DefaultFilter (line 10) | public class DefaultFilter extends FuncFilter {
    method DefaultFilter (line 13) | public DefaultFilter(long maxValue) {
    method DefaultFilter (line 17) | public DefaultFilter(long maxValue, int machineNumber) {

FILE: hutool-bloomFilter/src/main/java/cn/hutool/bloomfilter/filter/ELFFilter.java
  class ELFFilter (line 5) | public class ELFFilter extends FuncFilter {
    method ELFFilter (line 8) | public ELFFilter(long maxValue) {
    method ELFFilter (line 12) | public ELFFilter(long maxValue, int machineNumber) {

FILE: hutool-bloomFilter/src/main/java/cn/hutool/bloomfilter/filter/FNVFilter.java
  class FNVFilter (line 5) | public class FNVFilter extends FuncFilter {
    method FNVFilter (line 8) | public FNVFilter(long maxValue) {
    method FNVFilter (line 12) | public FNVFilter(long maxValue, int machineNum) {

FILE: hutool-bloomFilter/src/main/java/cn/hutool/bloomfilter/filter/FuncFilter.java
  class FuncFilter (line 13) | public class FuncFilter extends AbstractFilter {
    method FuncFilter (line 24) | public FuncFilter(long maxValue, Function<String, Number> hashFunc) {
    method FuncFilter (line 33) | public FuncFilter(long maxValue, int machineNum, Function<String, Numb...
    method hash (line 38) | @Override

FILE: hutool-bloomFilter/src/main/java/cn/hutool/bloomfilter/filter/HfFilter.java
  class HfFilter (line 6) | public class HfFilter extends FuncFilter {
    method HfFilter (line 9) | public HfFilter(long maxValue) {
    method HfFilter (line 13) | public HfFilter(long maxValue, int machineNum) {

FILE: hutool-bloomFilter/src/main/java/cn/hutool/bloomfilter/filter/HfIpFilter.java
  class HfIpFilter (line 5) | public class HfIpFilter extends FuncFilter {
    method HfIpFilter (line 8) | public HfIpFilter(long maxValue) {
    method HfIpFilter (line 12) | public HfIpFilter(long maxValue, int machineNum) {

FILE: hutool-bloomFilter/src/main/java/cn/hutool/bloomfilter/filter/JSFilter.java
  class JSFilter (line 5) | public class JSFilter extends FuncFilter {
    method JSFilter (line 8) | public JSFilter(long maxValue) {
    method JSFilter (line 12) | public JSFilter(long maxValue, int machineNum) {

FILE: hutool-bloomFilter/src/main/java/cn/hutool/bloomfilter/filter/PJWFilter.java
  class PJWFilter (line 5) | public class PJWFilter extends FuncFilter {
    method PJWFilter (line 8) | public PJWFilter(long maxValue) {
    method PJWFilter (line 12) | public PJWFilter(long maxValue, int machineNum) {

FILE: hutool-bloomFilter/src/main/java/cn/hutool/bloomfilter/filter/RSFilter.java
  class RSFilter (line 5) | public class RSFilter extends FuncFilter {
    method RSFilter (line 8) | public RSFilter(long maxValue) {
    method RSFilter (line 12) | public RSFilter(long maxValue, int machineNum) {

FILE: hutool-bloomFilter/src/main/java/cn/hutool/bloomfilter/filter/SDBMFilter.java
  class SDBMFilter (line 5) | public class SDBMFilter extends FuncFilter {
    method SDBMFilter (line 8) | public SDBMFilter(long maxValue) {
    method SDBMFilter (line 12) | public SDBMFilter(long maxValue, int machineNum) {

FILE: hutool-bloomFilter/src/main/java/cn/hutool/bloomfilter/filter/TianlFilter.java
  class TianlFilter (line 5) | public class TianlFilter extends FuncFilter {
    method TianlFilter (line 8) | public TianlFilter(long maxValue) {
    method TianlFilter (line 12) | public TianlFilter(long maxValue, int machineNum) {

FILE: hutool-bloomFilter/src/test/java/cn/hutool/bloomfilter/AbstractFilterTest.java
  class AbstractFilterTest (line 9) | public class AbstractFilterTest {
    method testInitWhenMaxValueLessThanMachineNum (line 11) | @Test

FILE: hutool-bloomFilter/src/test/java/cn/hutool/bloomfilter/BitMapBloomFilterTest.java
  class BitMapBloomFilterTest (line 10) | public class BitMapBloomFilterTest {
    method filterTest (line 12) | @Test
    method testIntMap (line 24) | @Test
    method testLongMap (line 40) | @Test

FILE: hutool-bloomFilter/src/test/java/cn/hutool/bloomfilter/BitSetBloomFilterTest.java
  class BitSetBloomFilterTest (line 7) | public class BitSetBloomFilterTest {
    method testConstructorWithInvalidParameters (line 9) | @Test

FILE: hutool-cache/src/main/java/cn/hutool/cache/Cache.java
  type Cache (line 16) | public interface Cache<K, V> extends Iterable<V>, Serializable {
    method capacity (line 23) | int capacity();
    method timeout (line 30) | long timeout();
    method put (line 39) | void put(K key, V object);
    method put (line 49) | void put(K key, V object, long timeout);
    method get (line 62) | default V get(K key) {
    method get (line 77) | default V get(K key, Func0<V> supplier) {
    method get (line 93) | V get(K key, boolean isUpdateLastAccess, Func0<V> supplier);
    method get (line 108) | V get(K key, boolean isUpdateLastAccess, long timeout, Func0<V> suppli...
    method get (line 121) | V get(K key, boolean isUpdateLastAccess);
    method cacheObjIterator (line 129) | Iterator<CacheObj<K, V>> cacheObjIterator();
    method prune (line 136) | int prune();
    method isFull (line 143) | boolean isFull();
    method remove (line 150) | void remove(K key);
    method clear (line 155) | void clear();
    method size (line 162) | int size();
    method isEmpty (line 169) | boolean isEmpty();
    method containsKey (line 177) | boolean containsKey(K key);
    method setListener (line 186) | default Cache<K, V> setListener(CacheListener<K, V> listener){

FILE: hutool-cache/src/main/java/cn/hutool/cache/CacheListener.java
  type CacheListener (line 11) | public interface CacheListener<K, V> {
    method onRemove (line 19) | void onRemove(K key, V cachedObject);

FILE: hutool-cache/src/main/java/cn/hutool/cache/CacheUtil.java
  class CacheUtil (line 16) | public class CacheUtil {
    method newFIFOCache (line 27) | public static <K, V> FIFOCache<K, V> newFIFOCache(int capacity, long t...
    method newFIFOCache (line 39) | public static <K, V> FIFOCache<K, V> newFIFOCache(int capacity) {
    method newLFUCache (line 52) | public static <K, V> LFUCache<K, V> newLFUCache(int capacity, long tim...
    method newLFUCache (line 64) | public static <K, V> LFUCache<K, V> newLFUCache(int capacity) {
    method newLRUCache (line 78) | public static <K, V> LRUCache<K, V> newLRUCache(int capacity, long tim...
    method newLRUCache (line 90) | public static <K, V> LRUCache<K, V> newLRUCache(int capacity) {
    method newTimedCache (line 104) | public static <K, V> TimedCache<K, V> newTimedCache(long timeout, long...
    method newTimedCache (line 118) | public static <K, V> TimedCache<K, V> newTimedCache(long timeout) {
    method newWeakCache (line 131) | public static <K, V> WeakCache<K, V> newWeakCache(long timeout) {
    method newNoCache (line 142) | public static <K, V> NoCache<K, V> newNoCache() {

FILE: hutool-cache/src/main/java/cn/hutool/cache/GlobalPruneTimer.java
  type GlobalPruneTimer (line 18) | public enum GlobalPruneTimer {
    method GlobalPruneTimer (line 37) | GlobalPruneTimer() {
    method schedule (line 48) | public ScheduledFuture<?> schedule(Runnable task, long delay) {
    method create (line 55) | public void create() {
    method shutdown (line 65) | public void shutdown() {
    method shutdownNow (line 76) | public List<Runnable> shutdownNow() {

FILE: hutool-cache/src/main/java/cn/hutool/cache/file/AbstractFileCache.java
  class AbstractFileCache (line 15) | public abstract class AbstractFileCache implements Serializable{
    method AbstractFileCache (line 36) | public AbstractFileCache(int capacity, int maxFileSize, long timeout) {
    method capacity (line 46) | public int capacity() {
    method getUsedSize (line 53) | public int getUsedSize() {
    method maxFileSize (line 60) | public int maxFileSize() {
    method getCachedFilesCount (line 67) | public int getCachedFilesCount() {
    method timeout (line 74) | public long timeout() {
    method clear (line 81) | public void clear() {
    method getFileBytes (line 94) | public byte[] getFileBytes(String path) throws IORuntimeException {
    method getFileBytes (line 104) | public byte[] getFileBytes(File file) throws IORuntimeException {
    method initCache (line 131) | protected abstract Cache<File, byte[]> initCache();

FILE: hutool-cache/src/main/java/cn/hutool/cache/file/LFUFileCache.java
  class LFUFileCache (line 13) | public class LFUFileCache extends AbstractFileCache{
    method LFUFileCache (line 22) | public LFUFileCache(int capacity) {
    method LFUFileCache (line 32) | public LFUFileCache(int capacity, int maxFileSize) {
    method LFUFileCache (line 42) | public LFUFileCache(int capacity, int maxFileSize, long timeout) {
    method initCache (line 46) | @Override

FILE: hutool-cache/src/main/java/cn/hutool/cache/file/LRUFileCache.java
  class LRUFileCache (line 13) | public class LRUFileCache extends AbstractFileCache{
    method LRUFileCache (line 22) | public LRUFileCache(int capacity) {
    method LRUFileCache (line 32) | public LRUFileCache(int capacity, int maxFileSize) {
    method LRUFileCache (line 42) | public LRUFileCache(int capacity, int maxFileSize, long timeout) {
    method initCache (line 46) | @Override

FILE: hutool-cache/src/main/java/cn/hutool/cache/impl/AbstractCache.java
  class AbstractCache (line 30) | public abstract class AbstractCache<K, V> implements Cache<K, V> {
    method put (line 69) | @Override
    method putWithoutLock (line 82) | protected void putWithoutLock(K key, V object, long timeout) {
    method getHitCount (line 109) | public long getHitCount() {
    method getMissCount (line 116) | public long getMissCount() {
    method get (line 120) | @Override
    method get (line 125) | @Override
    method getWithoutLock (line 157) | protected CacheObj<K, V> getWithoutLock(K key){
    method iterator (line 162) | @Override
    method pruneCache (line 174) | protected abstract int pruneCache();
    method capacity (line 178) | @Override
    method timeout (line 187) | @Override
    method isPruneExpiredActive (line 197) | protected boolean isPruneExpiredActive() {
    method isFull (line 201) | @Override
    method size (line 206) | @Override
    method isEmpty (line 211) | @Override
    method toString (line 216) | @Override
    method setListener (line 229) | @Override
    method keySet (line 241) | public Set<K> keySet(){
    method onRemove (line 252) | protected void onRemove(K key, V cachedObject) {
    method removeWithoutLock (line 265) | protected CacheObj<K, V> removeWithoutLock(K key) {
    method cacheObjIter (line 274) | protected Iterator<CacheObj<K, V>> cacheObjIter(){

FILE: hutool-cache/src/main/java/cn/hutool/cache/impl/CacheObj.java
  class CacheObj (line 16) | public class CacheObj<K, V> implements Serializable {
    method CacheObj (line 42) | protected CacheObj(K key, V obj, long ttl) {
    method getKey (line 55) | public K getKey() {
    method getValue (line 65) | public V getValue() {
    method getTtl (line 75) | public long getTtl() {
    method getExpiredTime (line 85) | public Date getExpiredTime(){
    method getLastAccess (line 98) | public long getLastAccess() {
    method toString (line 102) | @Override
    method isExpired (line 112) | protected boolean isExpired() {
    method get (line 127) | protected V get(boolean isUpdateLastAccess) {

FILE: hutool-cache/src/main/java/cn/hutool/cache/impl/CacheObjIterator.java
  class CacheObjIterator (line 16) | public class CacheObjIterator<K, V> implements Iterator<CacheObj<K, V>>,...
    method CacheObjIterator (line 27) | CacheObjIterator(Iterator<CacheObj<K, V>> iterator) {
    method hasNext (line 35) | @Override
    method next (line 43) | @Override
    method remove (line 56) | @Override
    method nextValue (line 64) | private void nextValue() {

FILE: hutool-cache/src/main/java/cn/hutool/cache/impl/CacheValuesIterator.java
  class CacheValuesIterator (line 12) | public class CacheValuesIterator<V> implements Iterator<V>, Serializable {
    method CacheValuesIterator (line 21) | CacheValuesIterator(CacheObjIterator<?, V> iterator) {
    method hasNext (line 28) | @Override
    method next (line 36) | @Override
    method remove (line 44) | @Override

FILE: hutool-cache/src/main/java/cn/hutool/cache/impl/FIFOCache.java
  class FIFOCache (line 19) | public class FIFOCache<K, V> extends ReentrantCache<K, V> {
    method FIFOCache (line 27) | public FIFOCache(int capacity) {
    method FIFOCache (line 37) | public FIFOCache(int capacity, long timeout) {
    method pruneCache (line 47) | @Override

FILE: hutool-cache/src/main/java/cn/hutool/cache/impl/LFUCache.java
  class LFUCache (line 18) | public class LFUCache<K, V> extends ReentrantCache<K, V> {
    method LFUCache (line 26) | public LFUCache(int capacity) {
    method LFUCache (line 36) | public LFUCache(int capacity, long timeout) {
    method pruneCache (line 54) | @Override

FILE: hutool-cache/src/main/java/cn/hutool/cache/impl/LRUCache.java
  class LRUCache (line 20) | public class LRUCache<K, V> extends ReentrantCache<K, V> {
    method LRUCache (line 28) | public LRUCache(int capacity) {
    method LRUCache (line 37) | public LRUCache(int capacity, long timeout) {
    method pruneCache (line 60) | @Override

FILE: hutool-cache/src/main/java/cn/hutool/cache/impl/NoCache.java
  class NoCache (line 16) | public class NoCache<K, V> implements Cache<K, V> {
    method capacity (line 19) | @Override
    method timeout (line 24) | @Override
    method put (line 29) | @Override
    method put (line 34) | @Override
    method containsKey (line 39) | @Override
    method get (line 44) | @Override
    method get (line 49) | @Override
    method get (line 54) | @Override
    method get (line 59) | @Override
    method get (line 64) | @Override
    method iterator (line 73) | @Override
    method cacheObjIterator (line 88) | @Override
    method prune (line 93) | @Override
    method isFull (line 98) | @Override
    method remove (line 103) | @Override
    method clear (line 108) | @Override
    method size (line 113) | @Override
    method isEmpty (line 118) | @Override

FILE: hutool-cache/src/main/java/cn/hutool/cache/impl/ReentrantCache.java
  class ReentrantCache (line 21) | public abstract class ReentrantCache<K, V> extends AbstractCache<K, V> {
    method put (line 28) | @Override
    method containsKey (line 38) | @Override
    method get (line 43) | @Override
    method get (line 48) | @Override
    method cacheObjIterator (line 73) | @Override
    method prune (line 85) | @Override
    method remove (line 95) | @Override
    method clear (line 109) | @Override
    method toString (line 126) | @Override
    method getOrRemoveExpired (line 143) | private V getOrRemoveExpired(final K key, final boolean isUpdateLastAc...

FILE: hutool-cache/src/main/java/cn/hutool/cache/impl/StampedCache.java
  class StampedCache (line 17) | @Deprecated
    method put (line 26) | @Override
    method containsKey (line 36) | @Override
    method get (line 41) | @Override
    method cacheObjIterator (line 46) | @Override
    method prune (line 58) | @Override
    method remove (line 68) | @Override
    method clear (line 82) | @Override
    method get (line 105) | private V get(K key, boolean isUpdateLastAccess, boolean isUpdateCount) {
    method getOrRemoveExpired (line 157) | private V getOrRemoveExpired(K key, boolean isUpdateCount) {

FILE: hutool-cache/src/main/java/cn/hutool/cache/impl/TimedCache.java
  class TimedCache (line 20) | public class TimedCache<K, V> extends ReentrantCache<K, V> {
    method TimedCache (line 31) | public TimedCache(long timeout) {
    method TimedCache (line 41) | public TimedCache(long timeout, Map<Mutable<K>, CacheObj<K, V>> map) {
    method pruneCache (line 53) | @Override
    method schedulePrune (line 75) | public void schedulePrune(long delay) {
    method cancelPruneSchedule (line 82) | public void cancelPruneSchedule() {

FILE: hutool-cache/src/main/java/cn/hutool/cache/impl/WeakCache.java
  class WeakCache (line 21) | public class WeakCache<K, V> extends TimedCache<K, V>{
    method WeakCache (line 28) | public WeakCache(long timeout) {
    method setListener (line 32) | @Override

FILE: hutool-cache/src/test/java/cn/hutool/cache/CacheConcurrentTest.java
  class CacheConcurrentTest (line 22) | public class CacheConcurrentTest {
    method fifoCacheTest (line 24) | @Test
    method lruCacheTest (line 55) | @Test
    method show (line 84) | private void show(Cache<String, String> cache) {
    method effectiveTest (line 91) | @Test

FILE: hutool-cache/src/test/java/cn/hutool/cache/CacheTest.java
  class CacheTest (line 19) | public class CacheTest {
    method fifoCacheTest (line 21) | @Test
    method fifoCacheCapacityTest (line 40) | @Test
    method lfuCacheTest (line 49) | @Test
    method lfuCacheTest2 (line 68) | @Test
    method lruCacheTest (line 75) | @Test
    method timedCacheTest (line 94) | @Test
    method whenContainsKeyTimeout_shouldCallOnRemove (line 134) | @Test
    method reentrantCache_clear_Method_Test (line 156) | @Test

FILE: hutool-cache/src/test/java/cn/hutool/cache/FileCacheTest.java
  class FileCacheTest (line 13) | public class FileCacheTest {
    method lfuFileCacheTest (line 14) | @Test

FILE: hutool-cache/src/test/java/cn/hutool/cache/Issue3618Test.java
  class Issue3618Test (line 7) | public class Issue3618Test {
    method putTest (line 8) | @Test

FILE: hutool-cache/src/test/java/cn/hutool/cache/IssueI8MEIXTest.java
  class IssueI8MEIXTest (line 9) | public class IssueI8MEIXTest {
    method getRemoveTest (line 11) | @Test

FILE: hutool-cache/src/test/java/cn/hutool/cache/LRUCacheTest.java
  class LRUCacheTest (line 20) | public class LRUCacheTest {
    method putTest (line 22) | @Test
    method readWriteTest (line 34) | @Test
    method issue2647Test (line 71) | @Test

FILE: hutool-cache/src/test/java/cn/hutool/cache/WeakCacheTest.java
  class WeakCacheTest (line 10) | public class WeakCacheTest {
    method removeTest (line 12) | @Test
    method removeByGcTest (line 26) | @Test

FILE: hutool-captcha/src/main/java/cn/hutool/captcha/AbstractCaptcha.java
  class AbstractCaptcha (line 26) | public abstract class AbstractCaptcha implements ICaptcha {
    method AbstractCaptcha (line 75) | public AbstractCaptcha(int width, int height, int codeCount, int inter...
    method AbstractCaptcha (line 87) | public AbstractCaptcha(int width, int height, CodeGenerator generator,...
    method AbstractCaptcha (line 106) | public AbstractCaptcha(int width, int height, CodeGenerator generator,...
    method createCode (line 115) | @Override
    method generateCode (line 129) | protected void generateCode() {
    method createImage (line 139) | protected abstract Image createImage(String code);
    method getCode (line 141) | @Override
    method verify (line 149) | @Override
    method write (line 160) | public void write(String path) throws IORuntimeException {
    method write (line 170) | public void write(File file) throws IORuntimeException {
    method write (line 178) | @Override
    method getImageBytes (line 189) | public byte[] getImageBytes() {
    method getImage (line 201) | public BufferedImage getImage() {
    method getImageBase64 (line 211) | public String getImageBase64() {
    method getImageBase64Data (line 221) | public String getImageBase64Data() {
    method setFont (line 230) | public void setFont(Font font) {
    method getGenerator (line 239) | public CodeGenerator getGenerator() {
    method setGenerator (line 248) | public void setGenerator(CodeGenerator generator) {
    method setBackground (line 258) | public void setBackground(Color background) {
    method setTextAlpha (line 268) | public void setTextAlpha(float textAlpha) {
    method setStroke (line 278) | public void setStroke(Stroke stroke) {

FILE: hutool-captcha/src/main/java/cn/hutool/captcha/CaptchaUtil.java
  class CaptchaUtil (line 11) | public class CaptchaUtil {
    method createLineCaptcha (line 20) | public static LineCaptcha createLineCaptcha(int width, int height) {
    method createLineCaptcha (line 33) | public static LineCaptcha createLineCaptcha(int width, int height, int...
    method createLineCaptcha (line 46) | public static LineCaptcha createLineCaptcha(int width, int height, Cod...
    method createLineCaptcha (line 60) | public static LineCaptcha createLineCaptcha(int width, int height, int...
    method createCircleCaptcha (line 73) | public static CircleCaptcha createCircleCaptcha(int width, int height) {
    method createCircleCaptcha (line 87) | public static CircleCaptcha createCircleCaptcha(int width, int height,...
    method createCircleCaptcha (line 100) | public static CircleCaptcha createCircleCaptcha(int width, int height,...
    method createCircleCaptcha (line 114) | public static CircleCaptcha createCircleCaptcha(int width, int height,...
    method createShearCaptcha (line 127) | public static ShearCaptcha createShearCaptcha(int width, int height) {
    method createShearCaptcha (line 141) | public static ShearCaptcha createShearCaptcha(int width, int height, i...
    method createShearCaptcha (line 154) | public static ShearCaptcha createShearCaptcha(int width, int height, C...
    method createShearCaptcha (line 168) | public static ShearCaptcha createShearCaptcha(int width, int height, i...
    method createGifCaptcha (line 180) | public static GifCaptcha createGifCaptcha(int width, int height) {
    method createGifCaptcha (line 192) | public static GifCaptcha createGifCaptcha(int width, int height, int c...
    method createGifCaptcha (line 205) | public static GifCaptcha createGifCaptcha(int width, int height, CodeG...
    method createGifCaptcha (line 219) | public static GifCaptcha createGifCaptcha(int width, int height, int c...

FILE: hutool-captcha/src/main/java/cn/hutool/captcha/CircleCaptcha.java
  class CircleCaptcha (line 20) | public class CircleCaptcha extends AbstractCaptcha {
    method CircleCaptcha (line 29) | public CircleCaptcha(int width, int height) {
    method CircleCaptcha (line 40) | public CircleCaptcha(int width, int height, int codeCount) {
    method CircleCaptcha (line 52) | public CircleCaptcha(int width, int height, int codeCount, int interfe...
    method CircleCaptcha (line 64) | public CircleCaptcha(int width, int height, CodeGenerator generator, i...
    method CircleCaptcha (line 77) | public CircleCaptcha(int width, int height, int codeCount, int interfe...
    method createImage (line 82) | @Override
    method drawString (line 107) | private void drawString(Graphics2D g, String code) {
    method drawInterfere (line 120) | private void drawInterfere(Graphics2D g) {

FILE: hutool-captcha/src/main/java/cn/hutool/captcha/GifCaptcha.java
  class GifCaptcha (line 23) | public class GifCaptcha extends AbstractCaptcha {
    method GifCaptcha (line 42) | public GifCaptcha(int width, int height) {
    method GifCaptcha (line 51) | public GifCaptcha(int width, int height, int codeCount) {
    method GifCaptcha (line 61) | public GifCaptcha(int width, int height, int codeCount, int interfereC...
    method GifCaptcha (line 73) | public GifCaptcha(int width, int height, CodeGenerator generator, int ...
    method GifCaptcha (line 86) | public GifCaptcha(int width, int height, int codeCount, int interfereC...
    method setQuality (line 99) | public GifCaptcha setQuality(int quality) {
    method setRepeat (line 115) | public GifCaptcha setRepeat(int repeat) {
    method setMaxColor (line 126) | public GifCaptcha setMaxColor(int maxColor) {
    method setMinColor (line 137) | public GifCaptcha setMinColor(int minColor) {
    method createCode (line 142) | @Override
    method createImage (line 168) | @Override
    method graphicsImage (line 181) | private BufferedImage graphicsImage(char[] chars, Color[] fontColor, c...
    method getAlpha (line 220) | private float getAlpha(int v, int i, int j) {
    method getRandomColor (line 232) | private Color getRandomColor(int min, int max) {

FILE: hutool-captcha/src/main/java/cn/hutool/captcha/ICaptcha.java
  type ICaptcha (line 12) | public interface ICaptcha extends Serializable{
    method createCode (line 17) | void createCode();
    method getCode (line 24) | String getCode();
    method verify (line 32) | boolean verify(String userInputCode);
    method write (line 39) | void write(OutputStream out);

FILE: hutool-captcha/src/main/java/cn/hutool/captcha/LineCaptcha.java
  class LineCaptcha (line 19) | public class LineCaptcha extends AbstractCaptcha {
    method LineCaptcha (line 29) | public LineCaptcha(int width, int height) {
    method LineCaptcha (line 41) | public LineCaptcha(int width, int height, int codeCount, int lineCount) {
    method LineCaptcha (line 53) | public LineCaptcha(int width, int height, CodeGenerator generator, int...
    method LineCaptcha (line 66) | public LineCaptcha(int width, int height, int codeCount, int interfere...
    method createImage (line 73) | @Override
    method drawString (line 99) | private void drawString(Graphics2D g, String code) {
    method drawInterfere (line 112) | private void drawInterfere(Graphics2D g) {

FILE: hutool-captcha/src/main/java/cn/hutool/captcha/ShearCaptcha.java
  class ShearCaptcha (line 23) | public class ShearCaptcha extends AbstractCaptcha {
    method ShearCaptcha (line 32) | public ShearCaptcha(int width, int height) {
    method ShearCaptcha (line 43) | public ShearCaptcha(int width, int height, int codeCount) {
    method ShearCaptcha (line 55) | public ShearCaptcha(int width, int height, int codeCount, int thicknes...
    method ShearCaptcha (line 67) | public ShearCaptcha(int width, int height, CodeGenerator generator, in...
    method ShearCaptcha (line 81) | public ShearCaptcha(int width, int height, int codeCount, int interfer...
    method createImage (line 85) | @Override
    method drawString (line 112) | private void drawString(Graphics2D g, String code) {
    method shear (line 128) | private void shear(Graphics g, int w1, int h1, Color color) {
    method shearX (line 141) | private void shearX(Graphics g, int w1, int h1, Color color) {
    method shearY (line 166) | private void shearY(Graphics g, int w1, int h1, Color color) {
    method drawInterfere (line 194) | @SuppressWarnings("SameParameterValue")

FILE: hutool-captcha/src/main/java/cn/hutool/captcha/generator/AbstractGenerator.java
  class AbstractGenerator (line 12) | public abstract class AbstractGenerator implements CodeGenerator {
    method AbstractGenerator (line 25) | public AbstractGenerator(int count) {
    method AbstractGenerator (line 35) | public AbstractGenerator(String baseStr, int length) {
    method getLength (line 45) | public int getLength() {

FILE: hutool-captcha/src/main/java/cn/hutool/captcha/generator/CodeGenerator.java
  type CodeGenerator (line 11) | public interface CodeGenerator extends Serializable{
    method generate (line 18) | String generate();
    method verify (line 28) | boolean verify(String code, String userInputCode);

FILE: hutool-captcha/src/main/java/cn/hutool/captcha/generator/MathGenerator.java
  class MathGenerator (line 14) | public class MathGenerator implements CodeGenerator {
    method MathGenerator (line 32) | public MathGenerator() {
    method MathGenerator (line 41) | public MathGenerator(boolean resultHasNegativeNumber) {
    method MathGenerator (line 50) | public MathGenerator(int numberLength) {
    method MathGenerator (line 60) | public MathGenerator(int numberLength, boolean resultHasNegativeNumber) {
    method generate (line 65) | @Override
    method verify (line 90) | @Override
    method getLength (line 109) | public int getLength() {
    method getLimit (line 118) | private int getLimit() {

FILE: hutool-captcha/src/main/java/cn/hutool/captcha/generator/RandomGenerator.java
  class RandomGenerator (line 13) | public class RandomGenerator extends AbstractGenerator {
    method RandomGenerator (line 21) | public RandomGenerator(int count) {
    method RandomGenerator (line 31) | public RandomGenerator(String baseStr, int length) {
    method generate (line 35) | @Override
    method verify (line 40) | @Override

FILE: hutool-captcha/src/test/java/cn/hutool/captcha/CaptchaTest.java
  class CaptchaTest (line 16) | public class CaptchaTest {
    method lineCaptchaTest1 (line 18) | @Test
    method lineCaptchaTest3 (line 26) | @Test
    method lineCaptchaTestWithSize (line 35) | @Test
    method lineCaptchaWithMathTest (line 44) | @Test
    method lineCaptchaTest2 (line 54) | @Test
    method circleCaptchaTest (line 74) | @Test
    method circleCaptchaTestWithSize (line 88) | @Test
    method shearCaptchaTest (line 97) | @Test
    method shearCaptchaTest2 (line 110) | @Test
    method ShearCaptchaWithMathTest (line 122) | @Test
    method ShearCaptchaTestWithSize (line 136) | @Test
    method GifCaptchaTest (line 145) | @Test
    method GifCaptchaTestWithSize (line 153) | @Test
    method bgTest (line 162) | @Test

FILE: hutool-captcha/src/test/java/cn/hutool/captcha/CaptchaUtilTest.java
  class CaptchaUtilTest (line 17) | public class CaptchaUtilTest {
    method createTest (line 19) | @Test
    method drawStringColourfulColorDistanceTest (line 27) | @Test
    method drawStringColourfulDefaultColorDistanceTest (line 36) | @Test
    class TestLineCaptchaColorDistance (line 45) | static class TestLineCaptchaColorDistance extends AbstractCaptcha{
      method TestLineCaptchaColorDistance (line 48) | public TestLineCaptchaColorDistance(int width, int height, int codeC...
      method createImage (line 52) | @Override
      method drawString (line 74) | protected void drawString(Graphics2D g, String code) {
      method drawInterfere (line 88) | private void drawInterfere(Graphics2D g) {
    class TestLineCaptchaColorDistanceDefaultColorDistance (line 103) | static class TestLineCaptchaColorDistanceDefaultColorDistance extends ...
      method TestLineCaptchaColorDistanceDefaultColorDistance (line 106) | public TestLineCaptchaColorDistanceDefaultColorDistance(int width, i...
      method drawString (line 110) | @Override

FILE: hutool-captcha/src/test/java/cn/hutool/captcha/GeneratorTest.java
  class GeneratorTest (line 7) | public class GeneratorTest {
    method mathGeneratorTest (line 9) | @Test

FILE: hutool-captcha/src/test/java/cn/hutool/captcha/GifCaptchaUtilTest.java
  class GifCaptchaUtilTest (line 14) | public class GifCaptchaUtilTest {
    method setUp (line 18) | @BeforeEach
    method invokePrivateMethod (line 25) | private Object invokePrivateMethod(String methodName, Class<?>[] param...
    method testSetQuality (line 32) | @Test
    method testSetRepeat (line 43) | @Test
    method testSetColorRange (line 54) | @Test
    method testCreateCode (line 63) | @Test
    method testGraphicsImage (line 81) | @Test
    method testRandomColor (line 96) | @Test
    method getPrivateField (line 111) | private Object getPrivateField(String fieldName) throws NoSuchFieldExc...

FILE: hutool-captcha/src/test/java/cn/hutool/captcha/ShearCaptchaTest.java
  class ShearCaptchaTest (line 13) | public class ShearCaptchaTest {
    method setUp (line 17) | @BeforeEach
    method testConstructor (line 24) | @Test
    method testCreateImage (line 30) | @Test
    method testDrawString (line 44) | @Test
    method testShear (line 58) | @Test
    method testShearX (line 72) | @Test
    method testShearY (line 86) | @Test
    method testDrawInterfere (line 100) | @Test
    method testDrawInterfereLines (line 114) | @Test
    method testCaptchaSize (line 125) | @Test
    method testRandomGenerator (line 138) | @Test

FILE: hutool-core/src/main/java/cn/hutool/core/annotation/AbstractAnnotationSynthesizer.java
  class AbstractAnnotationSynthesizer (line 20) | public abstract class AbstractAnnotationSynthesizer<T> implements Annota...
    method AbstractAnnotationSynthesizer (line 60) | protected AbstractAnnotationSynthesizer(
    method loadAnnotations (line 88) | protected abstract Map<Class<? extends Annotation>, SynthesizedAnnotat...
    method synthesize (line 98) | protected abstract <A extends Annotation> A synthesize(Class<A> annota...
    method getSource (line 105) | @Override
    method getAnnotationSelector (line 115) | @Override
    method getAnnotationPostProcessors (line 125) | @Override
    method getSynthesizedAnnotation (line 136) | @Override
    method getAllSynthesizedAnnotation (line 146) | @Override
    method synthesize (line 158) | @SuppressWarnings("unchecked")

FILE: hutool-core/src/main/java/cn/hutool/core/annotation/AbstractLinkAnnotationPostProcessor.java
  class AbstractLinkAnnotationPostProcessor (line 20) | public abstract class AbstractLinkAnnotationPostProcessor implements Syn...
    method process (line 31) | @Override
    method processTypes (line 62) | protected abstract RelationType[] processTypes();
    method processLinkedAttribute (line 74) | protected abstract void processLinkedAttribute(
    method getLinkAnnotation (line 89) | protected Link getLinkAnnotation(AnnotationAttribute attribute, Relati...
    method getLinkedAnnotation (line 104) | protected SynthesizedAnnotation getLinkedAnnotation(Link annotation, A...
    method getLinkedAnnotationType (line 117) | protected Class<?> getLinkedAnnotationType(Link annotation, Class<?> d...
    method checkAttributeType (line 130) | protected void checkAttributeType(AnnotationAttribute original, Annota...
    method checkLinkedSelf (line 144) | protected void checkLinkedSelf(AnnotationAttribute original, Annotatio...
    method checkLinkedAttributeNotNull (line 156) | protected void checkLinkedAttributeNotNull(AnnotationAttribute origina...

FILE: hutool-core/src/main/java/cn/hutool/core/annotation/AbstractWrappedAnnotationAttribute.java
  class AbstractWrappedAnnotationAttribute (line 18) | public abstract class AbstractWrappedAnnotationAttribute implements Wrap...
    method AbstractWrappedAnnotationAttribute (line 23) | protected AbstractWrappedAnnotationAttribute(AnnotationAttribute origi...
    method getOriginal (line 30) | @Override
    method getLinked (line 35) | @Override
    method getNonWrappedOriginal (line 40) | @Override
    method getAllLinkedNonWrappedAttributes (line 51) | @Override
    method collectLeafAttribute (line 58) | private void collectLeafAttribute(AnnotationAttribute curr, List<Annot...

FILE: hutool-core/src/main/java/cn/hutool/core/annotation/AggregateAnnotation.java
  type AggregateAnnotation (line 10) | public interface AggregateAnnotation extends Annotation {
    method isAnnotationPresent (line 18) | boolean isAnnotationPresent(Class<? extends Annotation> annotationType);
    method getAnnotations (line 25) | Annotation[] getAnnotations();

FILE: hutool-core/src/main/java/cn/hutool/core/annotation/AliasAnnotationPostProcessor.java
  class AliasAnnotationPostProcessor (line 22) | public class AliasAnnotationPostProcessor implements SynthesizedAnnotati...
    method order (line 24) | @Override
    method process (line 29) | @Override

FILE: hutool-core/src/main/java/cn/hutool/core/annotation/AliasLinkAnnotationPostProcessor.java
  class AliasLinkAnnotationPostProcessor (line 21) | public class AliasLinkAnnotationPostProcessor extends AbstractLinkAnnota...
    method order (line 25) | @Override
    method processTypes (line 35) | @Override
    method processLinkedAttribute (line 53) | @Override
    method wrappingLinkedAttribute (line 72) | private void wrappingLinkedAttribute(
    method processAttribute (line 89) | private void processAttribute(
    method checkAliasRelation (line 100) | private void checkAliasRelation(Link annotation, AnnotationAttribute o...
    method checkCircularDependency (line 109) | private void checkCircularDependency(AnnotationAttribute original, Ann...

FILE: hutool-core/src/main/java/cn/hutool/core/annotation/AliasedAnnotationAttribute.java
  class AliasedAnnotationAttribute (line 11) | public class AliasedAnnotationAttribute extends AbstractWrappedAnnotatio...
    method AliasedAnnotationAttribute (line 13) | protected AliasedAnnotationAttribute(AnnotationAttribute origin, Annot...
    method getValue (line 22) | @Override
    method isValueEquivalentToDefaultValue (line 32) | @Override

FILE: hutool-core/src/main/java/cn/hutool/core/annotation/AnnotationAttribute.java
  type AnnotationAttribute (line 25) | public interface AnnotationAttribute {
    method getAnnotation (line 32) | Annotation getAnnotation();
    method getAttribute (line 39) | Method getAttribute();
    method getAnnotationType (line 46) | default Class<?> getAnnotationType() {
    method getAttributeName (line 55) | default String getAttributeName() {
    method getValue (line 64) | default Object getValue() {
    method isValueEquivalentToDefaultValue (line 73) | boolean isValueEquivalentToDefaultValue();
    method getAttributeType (line 80) | default Class<?> getAttributeType() {
    method getAnnotation (line 91) | default <T extends Annotation> T getAnnotation(Class<T> annotationType) {
    method isWrapped (line 100) | default boolean isWrapped() {

FILE: hutool-core/src/main/java/cn/hutool/core/annotation/AnnotationAttributeValueProvider.java
  type AnnotationAttributeValueProvider (line 6) | @FunctionalInterface
    method getAttributeValue (line 16) | Object getAttributeValue(String attributeName, Class<?> attributeType);

FILE: hutool-core/src/main/java/cn/hutool/core/annotation/AnnotationProxy.java
  class AnnotationProxy (line 20) | public class AnnotationProxy<T extends Annotation> implements Annotation...
    method AnnotationProxy (line 32) | @SuppressWarnings("unchecked")
    method annotationType (line 40) | @Override
    method invoke (line 45) | @Override
    method initAttributes (line 73) | private Map<String, Object> initAttributes() {

FILE: hutool-core/src/main/java/cn/hutool/core/annotation/AnnotationSynthesizer.java
  type AnnotationSynthesizer (line 30) | public interface AnnotationSynthesizer {
    method getSource (line 37) | Object getSource();
    method getAnnotationSelector (line 44) | SynthesizedAnnotationSelector getAnnotationSelector();
    method getAnnotationPostProcessors (line 51) | Collection<SynthesizedAnnotationPostProcessor> getAnnotationPostProces...
    method getSynthesizedAnnotation (line 59) | SynthesizedAnnotation getSynthesizedAnnotation(Class<?> annotationType);
    method getAllSynthesizedAnnotation (line 66) | Map<Class<? extends Annotation>, SynthesizedAnnotation> getAllSynthesi...
    method synthesize (line 75) | <T extends Annotation> T synthesize(Class<T> annotationType);

FILE: hutool-core/src/main/java/cn/hutool/core/annotation/AnnotationUtil.java
  class AnnotationUtil (line 30) | public class AnnotationUtil {
    method isJdkMetaAnnotation (line 60) | public static boolean isJdkMetaAnnotation(Class<? extends Annotation> ...
    method isNotJdkMateAnnotation (line 80) | public static boolean isNotJdkMateAnnotation(Class<? extends Annotatio...
    method toCombination (line 90) | public static CombinationAnnotationElement toCombination(AnnotatedElem...
    method getAnnotations (line 104) | public static Annotation[] getAnnotations(AnnotatedElement annotationE...
    method getCombinationAnnotations (line 117) | public static <T> T[] getCombinationAnnotations(AnnotatedElement annot...
    method getAnnotations (line 131) | @SuppressWarnings("unchecked")
    method getAnnotations (line 152) | public static Annotation[] getAnnotations(AnnotatedElement annotationE...
    method getAnnotation (line 179) | public static <A extends Annotation> A getAnnotation(AnnotatedElement ...
    method hasAnnotation (line 191) | public static boolean hasAnnotation(AnnotatedElement annotationEle, Cl...
    method hasAnnotation (line 204) | @SuppressWarnings({"rawtypes", "unchecked"})
    method getAnnotationValue (line 229) | public static <T> T getAnnotationValue(AnnotatedElement annotationEle,...
    method getAnnotationValue (line 244) | public static <T> T getAnnotationValue(AnnotatedElement annotationEle,...
    method getAnnotationValue (line 269) | public static <A extends Annotation, R> R getAnnotationValue(Annotated...
    method getAnnotationValueMap (line 289) | public static Map<String, Object> getAnnotationValueMap(AnnotatedEleme...
    method getRetentionPolicy (line 320) | public static RetentionPolicy getRetentionPolicy(Class<? extends Annot...
    method getTargetType (line 334) | public static ElementType[] getTargetType(Class<? extends Annotation> ...
    method isDocumented (line 356) | public static boolean isDocumented(Class<? extends Annotation> annotat...
    method isInherited (line 366) | public static boolean isInherited(Class<? extends Annotation> annotati...
    method scanMetaAnnotation (line 387) | public static List<Annotation> scanMetaAnnotation(Class<? extends Anno...
    method scanClass (line 416) | public static List<Annotation> scanClass(Class<?> targetClass) {
    method scanMethod (line 444) | public static List<Annotation> scanMethod(Method method) {
    method setValue (line 456) | @SuppressWarnings({"rawtypes", "unchecked"})
    method isSynthesizedAnnotation (line 469) | public static boolean isSynthesizedAnnotation(Annotation annotation) {
    method getAnnotationAlias (line 482) | public static <T extends Annotation> T getAnnotationAlias(AnnotatedEle...
    method getSynthesizedAnnotation (line 499) | public static <T extends Annotation> T getSynthesizedAnnotation(Class<...
    method getSynthesizedAnnotation (line 530) | public static <T extends Annotation> T getSynthesizedAnnotation(Annota...
    method getAllSynthesizedAnnotations (line 565) | public static <T extends Annotation> List<T> getAllSynthesizedAnnotati...
    method aggregatingFromAnnotation (line 579) | public static SynthesizedAggregateAnnotation aggregatingFromAnnotation...
    method aggregatingFromAnnotationWithMeta (line 589) | public static SynthesizedAggregateAnnotation aggregatingFromAnnotation...
    method isAttributeMethod (line 599) | static boolean isAttributeMethod(Method method) {

FILE: hutool-core/src/main/java/cn/hutool/core/annotation/CacheableAnnotationAttribute.java
  class CacheableAnnotationAttribute (line 15) | public class CacheableAnnotationAttribute implements AnnotationAttribute {
    method CacheableAnnotationAttribute (line 26) | public CacheableAnnotationAttribute(Annotation annotation, Method attr...
    method getAnnotation (line 35) | @Override
    method getAttribute (line 40) | @Override
    method getValue (line 45) | @Override
    method isValueEquivalentToDefaultValue (line 58) | @Override

FILE: hutool-core/src/main/java/cn/hutool/core/annotation/CacheableSynthesizedAnnotationAttributeProcessor.java
  class CacheableSynthesizedAnnotationAttributeProcessor (line 22) | public class CacheableSynthesizedAnnotationAttributeProcessor implements...
    method CacheableSynthesizedAnnotationAttributeProcessor (line 32) | public CacheableSynthesizedAnnotationAttributeProcessor(Comparator<Hie...
    method CacheableSynthesizedAnnotationAttributeProcessor (line 42) | public CacheableSynthesizedAnnotationAttributeProcessor() {
    method getAttributeValue (line 46) | @SuppressWarnings("unchecked")

FILE: hutool-core/src/main/java/cn/hutool/core/annotation/CombinationAnnotationElement.java
  class CombinationAnnotationElement (line 21) | public class CombinationAnnotationElement implements AnnotatedElement, S...
    method of (line 32) | public static CombinationAnnotationElement of(AnnotatedElement element...
    method CombinationAnnotationElement (line 54) | public CombinationAnnotationElement(AnnotatedElement element) {
    method CombinationAnnotationElement (line 65) | public CombinationAnnotationElement(AnnotatedElement element, Predicat...
    method isAnnotationPresent (line 70) | @Override
    method getAnnotation (line 75) | @Override
    method getAnnotations (line 82) | @Override
    method getDeclaredAnnotations (line 88) | @Override
    method init (line 99) | private void init(AnnotatedElement element) {
    method parseDeclared (line 120) | private void parseDeclared(Annotation[] annotations) {
    method parse (line 146) | private void parse(Annotation[] annotations) {
    method test (line 172) | private boolean test(Annotation annotation) {

FILE: hutool-core/src/main/java/cn/hutool/core/annotation/ForceAliasedAnnotationAttribute.java
  class ForceAliasedAnnotationAttribute (line 13) | public class ForceAliasedAnnotationAttribute extends AbstractWrappedAnno...
    method ForceAliasedAnnotationAttribute (line 15) | protected ForceAliasedAnnotationAttribute(AnnotationAttribute origin, ...
    method getValue (line 24) | @Override
    method isValueEquivalentToDefaultValue (line 34) | @Override
    method getAttributeType (line 44) | @Override

FILE: hutool-core/src/main/java/cn/hutool/core/annotation/GenericSynthesizedAggregateAnnotation.java
  class GenericSynthesizedAggregateAnnotation (line 55) | public class GenericSynthesizedAggregateAnnotation
    method GenericSynthesizedAggregateAnnotation (line 86) | public GenericSynthesizedAggregateAnnotation(Annotation... source) {
    method GenericSynthesizedAggregateAnnotation (line 98) | public GenericSynthesizedAggregateAnnotation(List<Annotation> source, ...
    method GenericSynthesizedAggregateAnnotation (line 120) | public GenericSynthesizedAggregateAnnotation(
    method GenericSynthesizedAggregateAnnotation (line 144) | GenericSynthesizedAggregateAnnotation(
    method getRoot (line 165) | @Override
    method getVerticalDistance (line 175) | @Override
    method getHorizontalDistance (line 185) | @Override
    method loadAnnotations (line 193) | @Override
    method getAnnotationAttributeProcessor (line 228) | @Override
    method getAttributeValue (line 241) | @Override
    method getAnnotation (line 253) | @Override
    method isAnnotationPresent (line 268) | @Override
    method getAnnotations (line 278) | @Override
    method synthesize (line 292) | @Override
    class MetaAnnotation (line 302) | public static class MetaAnnotation extends GenericSynthesizedAnnotatio...
      method MetaAnnotation (line 312) | protected MetaAnnotation(Annotation root, Annotation annotation, int...

FILE: hutool-core/src/main/java/cn/hutool/core/annotation/GenericSynthesizedAnnotation.java
  class GenericSynthesizedAnnotation (line 22) | public class GenericSynthesizedAnnotation<R, T extends Annotation> imple...
    method GenericSynthesizedAnnotation (line 38) | protected GenericSynthesizedAnnotation(
    method loadAttributeMethods (line 53) | protected Map<String, AnnotationAttribute> loadAttributeMethods() {
    method hasAttribute (line 65) | public boolean hasAttribute(String attributeName) {
    method hasAttribute (line 76) | @Override
    method getAttributes (line 88) | @Override
    method setAttribute (line 99) | @Override
    method replaceAttribute (line 110) | @Override
    method getAttributeValue (line 124) | @Override
    method getRoot (line 136) | @Override
    method getAnnotation (line 146) | @Override
    method getVerticalDistance (line 157) | @Override
    method getHorizontalDistance (line 168) | @Override
    method annotationType (line 178) | @Override
    method getAttributeValue (line 190) | @Override

FILE: hutool-core/src/main/java/cn/hutool/core/annotation/Hierarchical.java
  type Hierarchical (line 26) | public interface Hierarchical extends Comparable<Hierarchical> {
    method compareTo (line 43) | @Override
    method getRoot (line 56) | Object getRoot();
    method getVerticalDistance (line 64) | int getVerticalDistance();
    method getHorizontalDistance (line 73) | int getHorizontalDistance();
    type Selector (line 80) | @FunctionalInterface
      method choose (line 111) | <T extends Hierarchical> T choose(T prev, T next);
      class NearestAndOldestPrioritySelector (line 116) | class NearestAndOldestPrioritySelector implements Selector {
        method choose (line 117) | @Override
      class NearestAndNewestPrioritySelector (line 126) | class NearestAndNewestPrioritySelector implements Selector {
        method choose (line 127) | @Override
      class FarthestAndOldestPrioritySelector (line 136) | class FarthestAndOldestPrioritySelector implements Selector {
        method choose (line 137) | @Override
      class FarthestAndNewestPrioritySelector (line 146) | class FarthestAndNewestPrioritySelector implements Selector {
        method choose (line 147) | @Override

FILE: hutool-core/src/main/java/cn/hutool/core/annotation/MirrorLinkAnnotationPostProcessor.java
  class MirrorLinkAnnotationPostProcessor (line 16) | public class MirrorLinkAnnotationPostProcessor extends AbstractLinkAnnot...
    method order (line 20) | @Override
    method processTypes (line 30) | @Override
    method processLinkedAttribute (line 46) | @Override
    method checkMirrored (line 74) | private void checkMirrored(AnnotationAttribute original, AnnotationAtt...
    method checkMirrorRelation (line 117) | private void checkMirrorRelation(Link annotation, AnnotationAttribute ...

FILE: hutool-core/src/main/java/cn/hutool/core/annotation/MirroredAnnotationAttribute.java
  class MirroredAnnotationAttribute (line 12) | public class MirroredAnnotationAttribute extends AbstractWrappedAnnotati...
    method MirroredAnnotationAttribute (line 14) | public MirroredAnnotationAttribute(AnnotationAttribute origin, Annotat...
    method getValue (line 18) | @Override
    method isValueEquivalentToDefaultValue (line 44) | @Override

FILE: hutool-core/src/main/java/cn/hutool/core/annotation/RelationType.java
  type RelationType (line 21) | public enum RelationType {

FILE: hutool-core/src/main/java/cn/hutool/core/annotation/SynthesizedAggregateAnnotation.java
  type SynthesizedAggregateAnnotation (line 38) | public interface SynthesizedAggregateAnnotation extends AggregateAnnotat...
    method getVerticalDistance (line 48) | @Override
    method getHorizontalDistance (line 59) | @Override
    method getAnnotation (line 73) | <T extends Annotation> T getAnnotation(Class<T> annotationType);
    method getAnnotationAttributeProcessor (line 80) | SynthesizedAnnotationAttributeProcessor getAnnotationAttributeProcesso...
    method annotationType (line 87) | @Override
    method getAttributeValue (line 99) | @Override

FILE: hutool-core/src/main/java/cn/hutool/core/annotation/SynthesizedAnnotation.java
  type SynthesizedAnnotation (line 18) | public interface SynthesizedAnnotation extends Annotation, Hierarchical,...
    method getAnnotation (line 25) | Annotation getAnnotation();
    method getVerticalDistance (line 33) | @Override
    method getHorizontalDistance (line 42) | @Override
    method hasAttribute (line 52) | boolean hasAttribute(String attributeName, Class<?> returnType);
    method getAttributes (line 59) | Map<String, AnnotationAttribute> getAttributes();
    method setAttributes (line 66) | default void setAttributes(Map<String, AnnotationAttribute> attributes) {
    method setAttribute (line 78) | void setAttribute(String attributeName, AnnotationAttribute attribute);
    method replaceAttribute (line 86) | void replaceAttribute(String attributeName, UnaryOperator<AnnotationAt...
    method getAttributeValue (line 94) | Object getAttributeValue(String attributeName);

FILE: hutool-core/src/main/java/cn/hutool/core/annotation/SynthesizedAnnotationAttributeProcessor.java
  type SynthesizedAnnotationAttributeProcessor (line 10) | @FunctionalInterface
    method getAttributeValue (line 22) | <R> R getAttributeValue(String attributeName, Class<R> attributeType, ...

FILE: hutool-core/src/main/java/cn/hutool/core/annotation/SynthesizedAnnotationPostProcessor.java
  type SynthesizedAnnotationPostProcessor (line 26) | public interface SynthesizedAnnotationPostProcessor extends Comparable<S...
    method order (line 48) | default int order() {
    method compareTo (line 58) | @Override
    method process (line 69) | void process(SynthesizedAnnotation synthesizedAnnotation, AnnotationSy...

FILE: hutool-core/src/main/java/cn/hutool/core/annotation/SynthesizedAnnotationProxy.java
  class SynthesizedAnnotationProxy (line 28) | public class SynthesizedAnnotationProxy implements InvocationHandler {
    method create (line 43) | @SuppressWarnings("unchecked")
    method create (line 70) | public static <T extends Annotation> T create(
    method isProxyAnnotation (line 81) | public static boolean isProxyAnnotation(Class<?> annotationType) {
    method SynthesizedAnnotationProxy (line 85) | SynthesizedAnnotationProxy(AnnotationAttributeValueProvider annotation...
    method invoke (line 94) | @Override
    method loadMethods (line 103) | void loadMethods() {
    method proxyToString (line 125) | private String proxyToString() {
    method proxyHashCode (line 135) | private int proxyHashCode() {
    method proxyGetSynthesizedAnnotation (line 139) | private Object proxyGetSynthesizedAnnotation() {
    method proxyAttributeValue (line 143) | private Object proxyAttributeValue(Method attributeMethod) {
    type SyntheticProxyAnnotation (line 152) | interface SyntheticProxyAnnotation extends SynthesizedAnnotation {
      method getSynthesizedAnnotation (line 159) | SynthesizedAnnotation getSynthesizedAnnotation();

FILE: hutool-core/src/main/java/cn/hutool/core/annotation/SynthesizedAnnotationSelector.java
  type SynthesizedAnnotationSelector (line 9) | @FunctionalInterface
    method choose (line 40) | <T extends SynthesizedAnnotation> T choose(T oldAnnotation, T newAnnot...
    class NearestAndOldestPrioritySelector (line 45) | class NearestAndOldestPrioritySelector implements SynthesizedAnnotatio...
      method choose (line 46) | @Override
    class NearestAndNewestPrioritySelector (line 55) | class NearestAndNewestPrioritySelector implements SynthesizedAnnotatio...
      method choose (line 56) | @Override
    class FarthestAndOldestPrioritySelector (line 65) | class FarthestAndOldestPrioritySelector implements SynthesizedAnnotati...
      method choose (line 66) | @Override
    class FarthestAndNewestPrioritySelector (line 75) | class FarthestAndNewestPrioritySelector implements SynthesizedAnnotati...
      method choose (line 76) | @Override

FILE: hutool-core/src/main/java/cn/hutool/core/annotation/WrappedAnnotationAttribute.java
  type WrappedAnnotationAttribute (line 30) | public interface WrappedAnnotationAttribute extends AnnotationAttribute {
    method getOriginal (line 39) | AnnotationAttribute getOriginal();
    method getNonWrappedOriginal (line 46) | AnnotationAttribute getNonWrappedOriginal();
    method getLinked (line 53) | AnnotationAttribute getLinked();
    method getAllLinkedNonWrappedAttributes (line 60) | Collection<AnnotationAttribute> getAllLinkedNonWrappedAttributes();
    method getAnnotation (line 69) | @Override
    method getAttribute (line 79) | @Override
    method isValueEquivalentToDefaultValue (line 91) | @Override
    method getAttributeType (line 99) | @Override
    method getAnnotation (line 110) | @Override
    method isWrapped (line 120) | @Override

FILE: hutool-core/src/main/java/cn/hutool/core/annotation/scanner/AbstractTypeAnnotationScanner.java
  class AbstractTypeAnnotationScanner (line 22) | public abstract class AbstractTypeAnnotationScanner<T extends AbstractTy...
    method AbstractTypeAnnotationScanner (line 67) | @SuppressWarnings("unchecked")
    method isIncludeSuperClass (line 84) | public boolean isIncludeSuperClass() {
    method isIncludeInterfaces (line 93) | public boolean isIncludeInterfaces() {
    method setFilter (line 103) | public T setFilter(Predicate<Class<?>> filter) {
    method addExcludeTypes (line 115) | public T addExcludeTypes(Class<?>... excludeTypes) {
    method addConverters (line 127) | public T addConverters(UnaryOperator<Class<?>> converter) {
    method setIncludeSuperClass (line 142) | protected T setIncludeSuperClass(boolean includeSuperClass) {
    method setIncludeInterfaces (line 153) | protected T setIncludeInterfaces(boolean includeInterfaces) {
    method scan (line 165) | @Override
    method getClassFormAnnotatedElement (line 207) | protected abstract Class<?> getClassFormAnnotatedElement(AnnotatedElem...
    method getAnnotationsFromTargetClass (line 217) | protected abstract Annotation[] getAnnotationsFromTargetClass(Annotate...
    method isNotNeedProcess (line 226) | protected boolean isNotNeedProcess(Set<Class<?>> accessedTypes, Class<...
    method scanInterfaceIfNecessary (line 239) | protected void scanInterfaceIfNecessary(List<Class<?>> nextClasses, Cl...
    method scanSuperClassIfNecessary (line 254) | protected void scanSuperClassIfNecessary(List<Class<?>> nextClassQueue...
    method convert (line 269) | protected Class<?> convert(Class<?> target) {
    class JdkProxyClassConverter (line 281) | public static class JdkProxyClassConverter implements UnaryOperator<Cl...
      method apply (line 282) | @Override

FILE: hutool-core/src/main/java/cn/hutool/core/annotation/scanner/AnnotationScanner.java
  type AnnotationScanner (line 46) | public interface AnnotationScanner {
    method scanByAnySupported (line 104) | static List<Annotation> scanByAnySupported(AnnotatedElement annotatedE...
    method scanByAllSupported (line 122) | static List<Annotation> scanByAllSupported(AnnotatedElement annotatedE...
    method support (line 140) | default boolean support(AnnotatedElement annotatedEle) {
    method getAnnotations (line 150) | default List<Annotation> getAnnotations(AnnotatedElement annotatedEle) {
    method getAnnotationsIfSupport (line 164) | default List<Annotation> getAnnotationsIfSupport(AnnotatedElement anno...
    method scan (line 176) | default void scan(BiConsumer<Integer, Annotation> consumer, AnnotatedE...
    method scanIfSupport (line 192) | default void scanIfSupport(BiConsumer<Integer, Annotation> consumer, A...

FILE: hutool-core/src/main/java/cn/hutool/core/annotation/scanner/ElementAnnotationScanner.java
  class ElementAnnotationScanner (line 16) | public class ElementAnnotationScanner implements AnnotationScanner {
    method support (line 24) | @Override
    method scan (line 36) | @Override

FILE: hutool-core/src/main/java/cn/hutool/core/annotation/scanner/EmptyAnnotationScanner.java
  class EmptyAnnotationScanner (line 15) | public class EmptyAnnotationScanner implements AnnotationScanner {
    method support (line 17) | @Override
    method getAnnotations (line 22) | @Override
    method scan (line 27) | @Override

FILE: hutool-core/src/main/java/cn/hutool/core/annotation/scanner/FieldAnnotationScanner.java
  class FieldAnnotationScanner (line 17) | public class FieldAnnotationScanner implements AnnotationScanner {
    method support (line 25) | @Override
    method scan (line 37) | @Override

FILE: hutool-core/src/main/java/cn/hutool/core/annotation/scanner/GenericAnnotationScanner.java
  class GenericAnnotationScanner (line 37) | public class GenericAnnotationScanner implements AnnotationScanner {
    method support (line 65) | @Override
    method GenericAnnotationScanner (line 77) | public GenericAnnotationScanner(
    method scan (line 99) | @Override
    method scanElements (line 127) | private void scanElements(

FILE: hutool-core/src/main/java/cn/hutool/core/annotation/scanner/MetaAnnotationScanner.java
  class MetaAnnotationScanner (line 23) | public class MetaAnnotationScanner implements AnnotationScanner {
    method MetaAnnotationScanner (line 35) | public MetaAnnotationScanner(boolean includeSupperMetaAnnotation) {
    method MetaAnnotationScanner (line 42) | public MetaAnnotationScanner() {
    method support (line 52) | @Override
    method getAnnotations (line 63) | @Override
    method scan (line 80) | @SuppressWarnings("unchecked")

FILE: hutool-core/src/main/java/cn/hutool/core/annotation/scanner/MethodAnnotationScanner.java
  class MethodAnnotationScanner (line 20) | public class MethodAnnotationScanner extends AbstractTypeAnnotationScann...
    method MethodAnnotationScanner (line 25) | public MethodAnnotationScanner() {
    method MethodAnnotationScanner (line 34) | public MethodAnnotationScanner(boolean scanSameSignatureMethod) {
    method MethodAnnotationScanner (line 45) | public MethodAnnotationScanner(boolean scanSameSignatureMethod, Predic...
    method MethodAnnotationScanner (line 57) | public MethodAnnotationScanner(boolean includeSuperClass, boolean incl...
    method support (line 67) | @Override
    method getClassFormAnnotatedElement (line 79) | @Override
    method getAnnotationsFromTargetClass (line 92) | @Override
    method setScanSameSignatureMethod (line 109) | public MethodAnnotationScanner setScanSameSignatureMethod(boolean scan...
    method hasSameSignature (line 118) | private boolean hasSameSignature(Method sourceMethod, Method superMeth...

FILE: hutool-core/src/main/java/cn/hutool/core/annotation/scanner/TypeAnnotationScanner.java
  class TypeAnnotationScanner (line 17) | public class TypeAnnotationScanner extends AbstractTypeAnnotationScanner...
    method TypeAnnotationScanner (line 27) | public TypeAnnotationScanner(boolean includeSupperClass, boolean inclu...
    method TypeAnnotationScanner (line 34) | public TypeAnnotationScanner() {
    method support (line 44) | @Override
    method getClassFormAnnotatedElement (line 55) | @Override
    method getAnnotationsFromTargetClass (line 68) | @Override
    method setIncludeSuperClass (line 79) | @Override
    method setIncludeInterfaces (line 90) | @Override
    class JdkProxyClassConverter (line 98) | public static class JdkProxyClassConverter implements UnaryOperator<Cl...
      method apply (line 99) | @Override

FILE: hutool-core/src/main/java/cn/hutool/core/bean/BeanDesc.java
  class BeanDesc (line 32) | public class BeanDesc implements Serializable {
    method BeanDesc (line 49) | public BeanDesc(Class<?> beanClass) {
    method getName (line 64) | public String getName() {
    method getSimpleName (line 73) | public String getSimpleName() {
    method getPropMap (line 83) | public Map<String, PropDesc> getPropMap(boolean ignoreCase) {
    method getProps (line 92) | public Collection<PropDesc> getProps() {
    method getProp (line 102) | public PropDesc getProp(String fieldName) {
    method getField (line 112) | public Field getField(String fieldName) {
    method getGetter (line 123) | public Method getGetter(String fieldName) {
    method getSetter (line 134) | public Method getSetter(String fieldName) {
    method init (line 147) | private BeanDesc init() {
    method initForRecord (line 164) | private void initForRecord() {
    method createProp (line 198) | private PropDesc createProp(Field field, Method[] methods) {
    method findProp (line 223) | private PropDesc findProp(Field field, Method[] gettersOrSetters, bool...
    method isMatchGetter (line 273) | private boolean isMatchGetter(String methodName, String fieldName, boo...
    method isMatchSetter (line 321) | private boolean isMatchSetter(String methodName, String fieldName, boo...

FILE: hutool-core/src/main/java/cn/hutool/core/bean/BeanDescCache.java
  type BeanDescCache (line 12) | public enum BeanDescCache {
    method getBeanDesc (line 25) | public BeanDesc getBeanDesc(Class<?> beanClass, Func0<BeanDesc> suppli...
    method clear (line 34) | public void clear() {

FILE: hutool-core/src/main/java/cn/hutool/core/bean/BeanException.java
  class BeanException (line 10) | public class BeanException extends RuntimeException{
    method BeanException (line 13) | public BeanException(Throwable e) {
    method BeanException (line 17) | public BeanException(String message) {
    method BeanException (line 21) | public BeanException(String messageTemplate, Object... params) {
    method BeanException (line 25) | public BeanException(String message, Throwable throwable) {
    method BeanException (line 29) | public BeanException(Throwable throwable, String messageTemplate, Obje...

FILE: hutool-core/src/main/java/cn/hutool/core/bean/BeanInfoCache.java
  type BeanInfoCache (line 16) | public enum BeanInfoCache {
    method getPropertyDescriptorMap (line 29) | public Map<String, PropertyDescriptor> getPropertyDescriptorMap(Class<...
    method getPropertyDescriptorMap (line 42) | public Map<String, PropertyDescriptor> getPropertyDescriptorMap(
    method putPropertyDescriptorMap (line 56) | public void putPropertyDescriptorMap(Class<?> beanClass, Map<String, P...
    method clear (line 65) | public void clear() {
    method getCache (line 77) | private ReferenceConcurrentMap<Class<?>, Map<String, PropertyDescripto...

FILE: hutool-core/src/main/java/cn/hutool/core/bean/BeanPath.java
  class BeanPath (line 36) | public class BeanPath implements Serializable {
    method create (line 69) | public static BeanPath create(final String expression) {
    method BeanPath (line 78) | public BeanPath(final String expression) {
    method getPatternParts (line 87) | public List<String> getPatternParts() {
    method get (line 97) | public Object get(final Object bean) {
    method set (line 114) | public void set(final Object bean, final Object value) {
    method toString (line 118) | @Override
    method set (line 140) | private void set(Object bean, List<String> patternParts, boolean nextN...
    method lastIsNumber (line 163) | private static boolean lastIsNumber(List<String> patternParts) {
    method getParentParts (line 173) | private static List<String> getParentParts(List<String> patternParts) {
    method get (line 185) | private Object get(final List<String> patternParts, final Object bean,...
    method getByWildcard (line 229) | private Object getByWildcard(final Object collectionOrArray, final Lis...
    method getFieldValue (line 263) | @SuppressWarnings("unchecked")
    method init (line 316) | private void init(final String expression) {

FILE: hutool-core/src/main/java/cn/hutool/core/bean/BeanUtil.java
  class BeanUtil (line 33) | public class BeanUtil {
    method isReadableBean (line 48) | public static boolean isReadableBean(Class<?> clazz) {
    method isBean (line 65) | public static boolean isBean(Class<?> clazz) {
    method hasSetter (line 77) | public static boolean hasSetter(Class<?> clazz) {
    method hasGetter (line 105) | public static boolean hasGetter(Class<?> clazz) {
    method hasPublicField (line 128) | public static boolean hasPublicField(Class<?> clazz) {
    method createDynaBean (line 150) | public static DynaBean createDynaBean(Object bean) {
    method findEditor (line 160) | public static PropertyEditor findEditor(Class<?> type) {
    method getBeanDesc (line 171) | public static BeanDesc getBeanDesc(Class<?> clazz) {
    method descForEach (line 182) | public static void descForEach(Class<?> clazz, Consumer<? super PropDe...
    method getPropertyDescriptors (line 195) | public static PropertyDescriptor[] getPropertyDescriptors(Class<?> cla...
    method getPropertyDescriptorMap (line 216) | public static Map<String, PropertyDescriptor> getPropertyDescriptorMap...
    method internalGetPropertyDescriptorMap (line 228) | private static Map<String, PropertyDescriptor> internalGetPropertyDesc...
    method getPropertyDescriptor (line 247) | public static PropertyDescriptor getPropertyDescriptor(Class<?> clazz,...
    method getPropertyDescriptor (line 260) | public static PropertyDescriptor getPropertyDescriptor(Class<?> clazz,...
    method getFieldValue (line 279) | public static Object getFieldValue(Object bean, String fieldNameOrInde...
    method setFieldValue (line 319) | @SuppressWarnings({"unchecked", "rawtypes"})
    method getProperty (line 345) | @SuppressWarnings("unchecked")
    method setProperty (line 362) | public static void setProperty(Object bean, String expression, Object ...
    method mapToBean (line 378) | @Deprecated
    method mapToBeanIgnoreCase (line 394) | @Deprecated
    method mapToBean (line 409) | @Deprecated
    method mapToBean (line 425) | @Deprecated
    method fillBeanWithMap (line 441) | public static <T> T fillBeanWithMap(Map<?, ?> map, T bean, boolean isI...
    method fillBeanWithMap (line 456) | @Deprecated
    method fillBeanWithMapIgnoreCase (line 470) | public static <T> T fillBeanWithMapIgnoreCase(Map<?, ?> map, T bean, b...
    method fillBeanWithMap (line 483) | public static <T> T fillBeanWithMap(Map<?, ?> map, T bean, CopyOptions...
    method fillBeanWithMap (line 503) | @Deprecated
    method toBean (line 528) | public static <T> T toBean(Object source, Class<T> clazz) {
    method toBeanIgnoreError (line 541) | public static <T> T toBeanIgnoreError(Object source, Class<T> clazz) {
    method toBeanIgnoreCase (line 555) | public static <T> T toBeanIgnoreCase(Object source, Class<T> clazz, bo...
    method toBean (line 572) | public static <T> T toBean(Object source, Class<T> clazz, CopyOptions ...
    method toBean (line 586) | public static <T> T toBean(Object source, Supplier<T> targetSupplier, ...
    method toBean (line 604) | public static <T> T toBean(Class<T> beanClass, ValueProvider<String> v...
    method fillBean (line 620) | public static <T> T fillBean(T bean, ValueProvider<String> valueProvid...
    method beanToMap (line 639) | public static Map<String, Object> beanToMap(Object bean, String... pro...
    method beanToMap (line 660) | public static Map<String, Object> beanToMap(Object bean, boolean isToU...
    method beanToMap (line 677) | public static Map<String, Object> beanToMap(Object bean, Map<String, O...
    method beanToMap (line 702) | public static Map<String, Object> beanToMap(Object bean, Map<String, O...
    method beanToMap (line 732) | public static Map<String, Object> beanToMap(Object bean, Map<String, O...
    method copyProperties (line 751) | public static <T> T copyProperties(Object source, Class<T> tClass, Str...
    method copyProperties (line 768) | public static void copyProperties(Object source, Object target, String...
    method copyProperties (line 779) | public static void copyProperties(Object source, Object target, boolea...
    method copyProperties (line 791) | public static void copyProperties(Object source, Object target, CopyOp...
    method copyToList (line 809) | public static <T> List<T> copyToList(Collection<?> collection, Class<T...
    method copyToList (line 839) | public static <T> List<T> copyToList(Collection<?> collection, Class<T...
    method isMatchName (line 854) | public static boolean isMatchName(Object bean, String beanClassName, b...
    method edit (line 871) | public static <T> T edit(T bean, Editor<Field> editor) {
    method trimStrFields (line 896) | public static <T> T trimStrFields(T bean, String... ignoreFields) {
    method isNotEmpty (line 925) | public static boolean isNotEmpty(Object bean, String... ignoreFieldNam...
    method isEmpty (line 938) | public static boolean isEmpty(Object bean, String... ignoreFieldNames) {
    method hasNullField (line 962) | public static boolean hasNullField(Object bean, String... ignoreFieldN...
    method getFieldName (line 992) | public static String getFieldName(String getterOrSetterName) {
    method isCommonFieldsEqual (line 1012) | public static boolean isCommonFieldsEqual(Object source, Object target...

FILE: hutool-core/src/main/java/cn/hutool/core/bean/DynaBean.java
  class DynaBean (line 18) | public class DynaBean extends CloneSupport<DynaBean> implements Serializ...
    method create (line 30) | public static DynaBean create(Object bean) {
    method create (line 40) | public static DynaBean create(Class<?> beanClass) {
    method create (line 52) | public static DynaBean create(Class<?> beanClass, Object... params) {
    method DynaBean (line 64) | public DynaBean(Class<?> beanClass, Object... params) {
    method DynaBean (line 73) | public DynaBean(Class<?> beanClass) {
    method DynaBean (line 82) | public DynaBean(Object bean) {
    method get (line 100) | @SuppressWarnings("unchecked")
    method containsProp (line 120) | public boolean containsProp(String fieldName) {
    method safeGet (line 136) | public <T> T safeGet(String fieldName) {
    method set (line 151) | @SuppressWarnings({"unchecked", "rawtypes"})
    method invoke (line 171) | public Object invoke(String methodName, Object... params) {
    method getBean (line 181) | @SuppressWarnings("unchecked")
    method getBeanClass (line 192) | @SuppressWarnings("unchecked")
    method hashCode (line 197) | @Override
    method equals (line 205) | @Override
    method toString (line 222) | @Override

FILE: hutool-core/src/main/java/cn/hutool/core/bean/NullWrapperBean.java
  class NullWrapperBean (line 10) | public class NullWrapperBean<T> {
    method NullWrapperBean (line 17) | public NullWrapperBean(Class<T> clazz) {
    method getWrappedClass (line 26) | public Class<T> getWrappedClass() {

FILE: hutool-core/src/main/java/cn/hutool/core/bean/PropDesc.java
  class PropDesc (line 20) | public class PropDesc {
    method PropDesc (line 64) | public PropDesc(Field field, Method getter, Method setter) {
    method initialize (line 78) | public void initialize() {
    method getFieldName (line 90) | public String getFieldName() {
    method getRawFieldName (line 100) | public String getRawFieldName() {
    method getField (line 109) | public Field getField() {
    method getFieldType (line 119) | public Type getFieldType() {
    method getFieldClass (line 132) | public Class<?> getFieldClass() {
    method getGetter (line 144) | public Method getGetter() {
    method getSetter (line 153) | public Method getSetter() {
    method isReadable (line 164) | public boolean isReadable(boolean checkTransient) {
    method getValue (line 188) | public Object getValue(Object bean) {
    method getValue (line 208) | public Object getValue(Object bean, Type targetType, boolean ignoreErr...
    method isWritable (line 234) | public boolean isWritable(boolean checkTransient) {
    method setValue (line 259) | public PropDesc setValue(Object bean, Object value) {
    method setValue (line 278) | public PropDesc setValue(Object bean, Object value, boolean ignoreNull...
    method setValue (line 293) | public PropDesc setValue(Object bean, Object value, boolean ignoreNull...
    method findPropType (line 336) | private Type findPropType(Method getter, Method setter) {
    method findPropClass (line 354) | private Class<?> findPropClass(Method getter, Method setter) {
    method isIgnoreSet (line 375) | private boolean isIgnoreSet() {
    method isIgnoreGet (line 390) | private boolean isIgnoreGet() {
    method isTransientForGet (line 401) | private boolean isTransientForGet() {
    method isTransientForSet (line 423) | private boolean isTransientForSet() {

FILE: hutool-core/src/main/java/cn/hutool/core/bean/RecordUtil.java
  class RecordUtil (line 20) | public class RecordUtil {
    method isRecord (line 34) | public static boolean isRecord(final Class<?> clazz) {
    method getRecordComponents (line 64) | @SuppressWarnings("unchecked")
    method newInstance (line 101) | public static Object newInstance(final Class<?> recordClass, final Val...

FILE: hutool-core/src/main/java/cn/hutool/core/bean/copier/AbsCopier.java
  class AbsCopier (line 14) | public abstract class AbsCopier<S, T> implements Copier<T> {
    method AbsCopier (line 23) | public AbsCopier(S source, T target, CopyOptions copyOptions) {

FILE: hutool-core/src/main/java/cn/hutool/core/bean/copier/BeanCopier.java
  class BeanCopier (line 25) | public class BeanCopier<T> implements Copier<T>, Serializable {
    method create (line 39) | public static <T> BeanCopier<T> create(Object source, T target, CopyOp...
    method create (line 53) | public static <T> BeanCopier<T> create(Object source, T target, Type d...
    method BeanCopier (line 65) | public BeanCopier(Object source, T target, Type targetType, CopyOption...
    method copy (line 90) | @Override

FILE: hutool-core/src/main/java/cn/hutool/core/bean/copier/BeanToBeanCopier.java
  class BeanToBeanCopier (line 19) | public class BeanToBeanCopier<S, T> extends AbsCopier<S, T> {
    method BeanToBeanCopier (line 34) | public BeanToBeanCopier(S source, T target, Type targetType, CopyOptio...
    method copy (line 39) | @Override

FILE: hutool-core/src/main/java/cn/hutool/core/bean/copier/BeanToMapCopier.java
  class BeanToMapCopier (line 16) | @SuppressWarnings("rawtypes")
    method BeanToMapCopier (line 30) | public BeanToMapCopier(Object source, Map target, Type targetType, Cop...
    method copy (line 35) | @Override

FILE: hutool-core/src/main/java/cn/hutool/core/bean/copier/CopyOptions.java
  class CopyOptions (line 34) | public class CopyOptions implements Serializable {
    method create (line 122) | public static CopyOptions create() {
    method create (line 134) | public static CopyOptions create(Class<?> editable, boolean ignoreNull...
    method CopyOptions (line 142) | public CopyOptions() {
    method CopyOptions (line 152) | public CopyOptions(Class<?> editable, boolean ignoreNullValue, String....
    method setEditable (line 165) | public CopyOptions setEditable(Class<?> editable) {
    method setIgnoreNullValue (line 176) | public CopyOptions setIgnoreNullValue(boolean ignoreNullVall) {
    method ignoreNullValue (line 187) | public CopyOptions ignoreNullValue() {
    method setPropertiesFilter (line 198) | public CopyOptions setPropertiesFilter(BiPredicate<Field, Object> prop...
    method setIgnoreProperties (line 209) | public CopyOptions setIgnoreProperties(String... ignoreProperties) {
    method setIgnoreProperties (line 223) | @SuppressWarnings("unchecked")
    method setIgnoreError (line 235) | public CopyOptions setIgnoreError(boolean ignoreError) {
    method ignoreError (line 246) | public CopyOptions ignoreError() {
    method setIgnoreCase (line 256) | public CopyOptions setIgnoreCase(boolean ignoreCase) {
    method ignoreCase (line 267) | public CopyOptions ignoreCase() {
    method setFieldMapping (line 278) | public CopyOptions setFieldMapping(Map<String, String> fieldMapping) {
    method setFieldNameEditor (line 292) | public CopyOptions setFieldNameEditor(Editor<String> fieldNameEditor) {
    method setFieldValueEditor (line 304) | public CopyOptions setFieldValueEditor(BiFunction<String, Object, Obje...
    method editFieldValue (line 317) | protected Object editFieldValue(String fieldName, Object fieldValue) {
    method setTransientSupport (line 329) | public CopyOptions setTransientSupport(boolean transientSupport) {
    method setOverride (line 341) | public CopyOptions setOverride(boolean override) {
    method setAutoTransCamelCase (line 361) | public CopyOptions setAutoTransCamelCase(final boolean autoTransCamelC...
    method setConverter (line 373) | public CopyOptions setConverter(TypeConverter converter) {
    method getFormatIfDate (line 382) | public String getFormatIfDate() {
    method setFormatIfDate (line 391) | public CopyOptions setFormatIfDate(String formatIfDate) {
    method convertField (line 405) | @SuppressWarnings({"unchecked", "rawtypes"})
    method editFieldName (line 422) | protected String editFieldName(String fieldName) {
    method testPropertyFilter (line 433) | protected boolean testPropertyFilter(Field field, Object value) {
    method testKeyFilter (line 443) | protected boolean testKeyFilter(Object key) {
    method findPropDesc (line 468) | protected PropDesc findPropDesc(final Map<String, PropDesc> targetProp...

FILE: hutool-core/src/main/java/cn/hutool/core/bean/copier/IJSONTypeConverter.java
  type IJSONTypeConverter (line 12) | public interface IJSONTypeConverter {
    method toBean (line 22) | <T> T toBean(Type type);

FILE: hutool-core/src/main/java/cn/hutool/core/bean/copier/MapToBeanCopier.java
  class MapToBeanCopier (line 19) | public class MapToBeanCopier<T> extends AbsCopier<Map<?, ?>, T> {
    method MapToBeanCopier (line 34) | public MapToBeanCopier(Map<?, ?> source, T target, Type targetType, Co...
    method copy (line 48) | @Override

FILE: hutool-core/src/main/java/cn/hutool/core/bean/copier/MapToMapCopier.java
  class MapToMapCopier (line 13) | @SuppressWarnings({"rawtypes", "unchecked"})
    method MapToMapCopier (line 27) | public MapToMapCopier(Map source, Map target, Type targetType, CopyOpt...
    method copy (line 32) | @Override

FILE: hutool-core/src/main/java/cn/hutool/core/bean/copier/ValueProvider.java
  type ValueProvider (line 14) | public interface ValueProvider<T>{
    method value (line 24) | Object value(T key, Type valueType);
    method containsKey (line 33) | boolean containsKey(T key);

FILE: hutool-core/src/main/java/cn/hutool/core/bean/copier/ValueProviderToBeanCopier.java
  class ValueProviderToBeanCopier (line 17) | public class ValueProviderToBeanCopier<T> extends AbsCopier<ValueProvide...
    method ValueProviderToBeanCopier (line 32) | public ValueProviderToBeanCopier(ValueProvider<String> source, T targe...
    method copy (line 37) | @Override

FILE: hutool-core/src/main/java/cn/hutool/core/bean/copier/provider/BeanValueProvider.java
  class BeanValueProvider (line 21) | public class BeanValueProvider implements ValueProvider<String> {
    method BeanValueProvider (line 34) | public BeanValueProvider(Object bean, boolean ignoreCase, boolean igno...
    method BeanValueProvider (line 46) | public BeanValueProvider(Object bean, boolean ignoreCase, boolean igno...
    method value (line 65) | @Override
    method containsKey (line 76) | @Override
    method getPropDesc (line 91) | private PropDesc getPropDesc(String key, Type valueType) {

FILE: hutool-core/src/main/java/cn/hutool/core/bean/copier/provider/DynaBeanValueProvider.java
  class DynaBeanValueProvider (line 15) | public class DynaBeanValueProvider implements ValueProvider<String> {
    method DynaBeanValueProvider (line 26) | public DynaBeanValueProvider(DynaBean dynaBean, boolean ignoreError) {
    method value (line 31) | @Override
    method containsKey (line 37) | @Override

FILE: hutool-core/src/main/java/cn/hutool/core/bean/copier/provider/MapValueProvider.java
  class MapValueProvider (line 15) | @SuppressWarnings("rawtypes")
    method MapValueProvider (line 25) | public MapValueProvider(final Map map) {
    method value (line 29) | @Override
    method containsKey (line 34) | @Override

FILE: hutool-core/src/main/java/cn/hutool/core/builder/Builder.java
  type Builder (line 12) | public interface Builder<T> extends Serializable{
    method build (line 18) | T build();

FILE: hutool-core/src/main/java/cn/hutool/core/builder/CompareToBuilder.java
  class CompareToBuilder (line 53) | public class CompareToBuilder implements Builder<Integer> {
    method CompareToBuilder (line 62) | public CompareToBuilder() {
    method reflectionCompare (line 88) | public static int reflectionCompare(final Object lhs, final Object rhs) {
    method reflectionCompare (line 120) | public static int reflectionCompare(final Object lhs, final Object rhs...
    method reflectionCompare (line 153) | public static int reflectionCompare(final Object lhs, final Object rhs...
    method reflectionCompare (line 186) | public static int reflectionCompare(final Object lhs, final Object rhs...
    method reflectionCompare (line 222) | public static int reflectionCompare(
    method reflectionAppend (line 259) | private static void reflectionAppend(
    method appendSuper (line 295) | public CompareToBuilder appendSuper(final int superCompareTo) {
    method append (line 323) | public CompareToBuilder append(final Object lhs, final Object rhs) {
    method append (line 352) | public CompareToBuilder append(final Object lhs, final Object rhs, fin...
    method append (line 416) | public CompareToBuilder append(final long lhs, final long rhs) {
    method append (line 432) | public CompareToBuilder append(final int lhs, final int rhs) {
    method append (line 448) | public CompareToBuilder append(final short lhs, final short rhs) {
    method append (line 464) | public CompareToBuilder append(final char lhs, final char rhs) {
    method append (line 480) | public CompareToBuilder append(final byte lhs, final byte rhs) {
    method append (line 501) | public CompareToBuilder append(final double lhs, final double rhs) {
    method append (line 522) | public CompareToBuilder append(final float lhs, final float rhs) {
    method append (line 538) | public CompareToBuilder append(final boolean lhs, final boolean rhs) {
    method append (line 574) | public CompareToBuilder append(final Object[] lhs, final Object[] rhs) {
    method append (line 601) | public CompareToBuilder append(final Object[] lhs, final Object[] rhs,...
    method append (line 641) | public CompareToBuilder append(final long[] lhs, final long[] rhs) {
    method append (line 681) | public CompareToBuilder append(final int[] lhs, final int[] rhs) {
    method append (line 721) | public CompareToBuilder append(final short[] lhs, final short[] rhs) {
    method append (line 761) | public CompareToBuilder append(final char[] lhs, final char[] rhs) {
    method append (line 801) | public CompareToBuilder append(final byte[] lhs, final byte[] rhs) {
    method append (line 841) | public CompareToBuilder append(final double[] lhs, final double[] rhs) {
    method append (line 881) | public CompareToBuilder append(final float[] lhs, final float[] rhs) {
    method append (line 921) | public CompareToBuilder append(final boolean[] lhs, final boolean[] rh...
    method toComparison (line 956) | public int toComparison() {
    method build (line 970) | @Override

FILE: hutool-core/src/main/java/cn/hutool/core/builder/EqualsBuilder.java
  class EqualsBuilder (line 45) | public class EqualsBuilder implements Builder<Boolean> {
    method getRegistry (line 64) | static Set<Pair<IDKey, IDKey>> getRegistry() {
    method getRegisterPair (line 77) | static Pair<IDKey, IDKey> getRegisterPair(final Object lhs, final Obje...
    method isRegistered (line 96) | static boolean isRegistered(final Object lhs, final Object rhs) {
    method register (line 114) | static void register(final Object lhs, final Object rhs) {
    method unregister (line 138) | static void unregister(final Object lhs, final Object rhs) {
    method EqualsBuilder (line 161) | public EqualsBuilder() {
    method reflectionEquals (line 175) | public static boolean reflectionEquals(final Object lhs, final Object ...
    method reflectionEquals (line 187) | public static boolean reflectionEquals(final Object lhs, final Object ...
    method reflectionEquals (line 212) | public static boolean reflectionEquals(final Object lhs, final Object ...
    method reflectionEquals (line 243) | public static boolean reflectionEquals(final Object lhs, final Object ...
    method reflectionAppend (line 307) | private static void reflectionAppend(
    method appendSuper (line 352) | public EqualsBuilder appendSuper(final boolean superEquals) {
    method append (line 370) | public EqualsBuilder append(final Object lhs, final Object rhs) {
    method append (line 398) | public EqualsBuilder append(final long lhs, final long rhs) {
    method append (line 413) | public EqualsBuilder append(final int lhs, final int rhs) {
    method append (line 428) | public EqualsBuilder append(final short lhs, final short rhs) {
    method append (line 443) | public EqualsBuilder append(final char lhs, final char rhs) {
    method append (line 458) | public EqualsBuilder append(final byte lhs, final byte rhs) {
    method append (line 479) | public EqualsBuilder append(final double lhs, final double rhs) {
    method append (line 499) | public EqualsBuilder append(final float lhs, final float rhs) {
    method append (line 513) | public EqualsBuilder append(final boolean lhs, final boolean rhs) {
    method isEquals (line 527) | public boolean isEquals() {
    method build (line 539) | @Override
    method setEquals (line 550) | protected EqualsBuilder setEquals(boolean isEquals) {
    method reset (line 560) | public void reset() {

FILE: hutool-core/src/main/java/cn/hutool/core/builder/GenericBuilder.java
  class GenericBuilder (line 64) | public class GenericBuilder<T> implements Builder<T> {
    method GenericBuilder (line 82) | public GenericBuilder(Supplier<T> instant) {
    method of (line 93) | public static <T> GenericBuilder<T> of(Supplier<T> instant) {
    method of (line 106) | public static <T, P1> GenericBuilder<T> of(Supplier1<T, P1> instant, P...
    method of (line 121) | public static <T, P1, P2> GenericBuilder<T> of(Supplier2<T, P1, P2> in...
    method of (line 138) | public static <T, P1, P2, P3> GenericBuilder<T> of(Supplier3<T, P1, P2...
    method of (line 157) | public static <T, P1, P2, P3, P4> GenericBuilder<T> of(Supplier4<T, P1...
    method of (line 178) | public static <T, P1, P2, P3, P4, P5> GenericBuilder<T> of(Supplier5<T...
    method with (line 189) | public GenericBuilder<T> with(Consumer<T> consumer) {
    method with (line 203) | public <P1> GenericBuilder<T> with(BiConsumer<T, P1> consumer, P1 p1) {
    method with (line 218) | public <P1, P2> GenericBuilder<T> with(Consumer3<T, P1, P2> consumer, ...
    method build (line 228) | @Override

FILE: hutool-core/src/main/java/cn/hutool/core/builder/HashCodeBuilder.java
  class HashCodeBuilder (line 86) | public class HashCodeBuilder implements Builder<Integer> {
    method getRegistry (line 133) | private static Set<IDKey> getRegistry() {
    method isRegistered (line 148) | private static boolean isRegistered(final Object value) {
    method reflectionAppend (line 169) | private static void reflectionAppend(final Object object, final Class<...
    method reflectionHashCode (line 236) | public static int reflectionHashCode(final int initialNonZeroOddNumber...
    method reflectionHashCode (line 280) | public static int reflectionHashCode(final int initialNonZeroOddNumber...
    method reflectionHashCode (line 333) | public static <T> int reflectionHashCode(final int initialNonZeroOddNu...
    method reflectionHashCode (line 382) | public static int reflectionHashCode(final Object object, final boolea...
    method reflectionHashCode (line 420) | public static int reflectionHashCode(final Object object, final Collec...
    method reflectionHashCode (line 459) | public static int reflectionHashCode(final Object object, final String...
    method register (line 472) | static void register(final Object value) {
    method unregister (line 493) | static void unregister(final Object value) {
    method HashCodeBuilder (line 522) | public HashCodeBuilder() {
    method HashCodeBuilder (line 544) | public HashCodeBuilder(final int initialOddNumber, final int multiplie...
    method append (line 572) | public HashCodeBuilder append(final boolean value) {
    method append (line 586) | public HashCodeBuilder append(final boolean[] array) {
    method append (line 608) | public HashCodeBuilder append(final byte value) {
    method append (line 624) | public HashCodeBuilder append(final byte[] array) {
    method append (line 644) | public HashCodeBuilder append(final char value) {
    method append (line 658) | public HashCodeBuilder append(final char[] array) {
    method append (line 678) | public HashCodeBuilder append(final double value) {
    method append (line 691) | public HashCodeBuilder append(final double[] array) {
    method append (line 711) | public HashCodeBuilder append(final float value) {
    method append (line 725) | public HashCodeBuilder append(final float[] array) {
    method append (line 745) | public HashCodeBuilder append(final int value) {
    method append (line 759) | public HashCodeBuilder append(final int[] array) {
    method append (line 783) | public HashCodeBuilder append(final long value) {
    method append (line 797) | public HashCodeBuilder append(final long[] array) {
    method append (line 817) | public HashCodeBuilder append(final Object object) {
    method append (line 861) | public HashCodeBuilder append(final Object[] array) {
    method append (line 881) | public HashCodeBuilder append(final short value) {
    method append (line 895) | public HashCodeBuilder append(final short[] array) {
    method appendSuper (line 916) | public HashCodeBuilder appendSuper(final int superHashCode) {
    method toHashCode (line 928) | public int toHashCode() {
    method build (line 939) | @Override
    method hashCode (line 953) | @Override

FILE: hutool-core/src/main/java/cn/hutool/core/builder/IDKey.java
  class IDKey (line 14) | final class IDKey implements Serializable{
    method IDKey (line 25) | public IDKey(final Object obj) {
    method hashCode (line 38) | @Override
    method equals (line 49) | @Override

FILE: hutool-core/src/main/java/cn/hutool/core/clone/CloneRuntimeException.java
  class CloneRuntimeException (line 10) | public class CloneRuntimeException extends RuntimeException{
    method CloneRuntimeException (line 13) | public CloneRuntimeException(Throwable e) {
    method CloneRuntimeException (line 17) | public CloneRuntimeException(String message) {
    method CloneRuntimeException (line 21) | public CloneRuntimeException(String messageTemplate, Object... params) {
    method CloneRuntimeException (line 25) | public CloneRuntimeException(String message, Throwable throwable) {
    method CloneRuntimeException (line 29) | public CloneRuntimeException(Throwable throwable, String messageTempla...

FILE: hutool-core/src/main/java/cn/hutool/core/clone/CloneSupport.java
  class CloneSupport (line 9) | public class CloneSupport<T> implements Cloneable<T>{
    method clone (line 11) | @SuppressWarnings("unchecked")

FILE: hutool-core/src/main/java/cn/hutool/core/clone/Cloneable.java
  type Cloneable (line 9) | public interface Cloneable<T> extends java.lang.Cloneable{
    method clone (line 15) | T clone();

FILE: hutool-core/src/main/java/cn/hutool/core/clone/DefaultCloneable.java
  type DefaultCloneable (line 12) | public interface DefaultCloneable<T> extends java.lang.Cloneable {
    method clone0 (line 19) | default T clone0() {

FILE: hutool-core/src/main/java/cn/hutool/core/codec/BCD.java
  class BCD (line 13) | @Deprecated
    method strToBcd (line 21) | public static byte[] strToBcd(String asc) {
    method ascToBcd (line 65) | public static byte[] ascToBcd(byte[] ascii) {
    method ascToBcd (line 76) | public static byte[] ascToBcd(byte[] ascii, int ascLength) {
    method bcdToStr (line 92) | public static String bcdToStr(byte[] bytes) {
    method ascToBcd (line 114) | private static byte ascToBcd(byte asc) {

FILE: hutool-core/src/main/java/cn/hutool/core/codec/Base16Codec.java
  class Base16Codec (line 14) | public class Base16Codec implements Encoder<byte[], char[]>, Decoder<Cha...
    method Base16Codec (line 26) | public Base16Codec(boolean lowerCase) {
    method encode (line 30) | @Override
    method decode (line 42) | @Override
    method toUnicodeHex (line 82) | public String toUnicodeHex(char ch) {
    method appendHex (line 96) | public void appendHex(StringBuilder builder, byte b) {
    method toDigit (line 111) | private static int toDigit(char ch, int index) {

FILE: hutool-core/src/main/java/cn/hutool/core/codec/Base32.java
  class Base32 (line 20) | public class Base32 {
    method encode (line 29) | public static String encode(final byte[] bytes) {
    method encode (line 39) | public static String encode(String source) {
    method encode (line 50) | public static String encode(String source, Charset charset) {
    method encodeHex (line 60) | public static String encodeHex(final byte[] bytes) {
    method encodeHex (line 70) | public static String encodeHex(String source) {
    method encodeHex (line 81) | public static String encodeHex(String source, Charset charset) {
    method decode (line 93) | public static byte[] decode(String base32) {
    method decodeStr (line 103) | public static String decodeStr(String source) {
    method decodeStr (line 114) | public static String decodeStr(String source, Charset charset) {
    method decodeHex (line 124) | public static byte[] decodeHex(String base32) {
    method decodeStrHex (line 134) | public static String decodeStrHex(String source) {
    method decodeStrHex (line 145) | public static String decodeStrHex(String source, Charset charset) {

FILE: hutool-core/src/main/java/cn/hutool/core/codec/Base32Codec.java
  class Base32Codec (line 18) | public class Base32Codec implements Encoder<byte[], String>, Decoder<Cha...
    method encode (line 22) | @Override
    method encode (line 34) | public String encode(byte[] data, boolean useHex) {
    method decode (line 39) | @Override
    method decode (line 51) | public byte[] decode(CharSequence encoded, boolean useHex) {
    class Base32Encoder (line 59) | public static class Base32Encoder implements Encoder<byte[], String> {
      method Base32Encoder (line 77) | public Base32Encoder(String alphabet, Character pad) {
      method encode (line 82) | @Override
    class Base32Decoder (line 138) | public static class Base32Decoder implements Decoder<CharSequence, byt...
      method Base32Decoder (line 151) | public Base32Decoder(String alphabet) {
      method decode (line 168) | @Override

FILE: hutool-core/src/main/java/cn/hutool/core/codec/Base58.java
  class Base58 (line 19) | public class Base58 {
    method encodeChecked (line 33) | public static String encodeChecked(Integer version, byte[] data) {
    method encode (line 43) | public static String encode(byte[] data) {
    method decodeChecked (line 56) | public static byte[] decodeChecked(CharSequence encoded) throws Valida...
    method decodeChecked (line 73) | public static byte[] decodeChecked(CharSequence encoded, boolean withV...
    method decode (line 84) | public static byte[] decode(CharSequence encoded) {
    method verifyAndRemoveChecksum (line 95) | private static byte[] verifyAndRemoveChecksum(byte[] data, boolean wit...
    method addChecksum (line 112) | private static byte[] addChecksum(Integer version, byte[] payload) {
    method checksum (line 134) | private static byte[] checksum(byte[] data) {
    method hash256 (line 145) | private static byte[] hash256(byte[] data) {

FILE: hutool-core/src/main/java/cn/hutool/core/codec/Base58Codec.java
  class Base58Codec (line 14) | public class Base58Codec implements Encoder<byte[], String>, Decoder<Cha...
    method encode (line 24) | @Override
    method decode (line 36) | @Override
    class Base58Encoder (line 46) | public static class Base58Encoder implements Encoder<byte[], String> {
      method Base58Encoder (line 59) | public Base58Encoder(char[] alphabet) {
      method encode (line 64) | @Override
    class Base58Decoder (line 104) | public static class Base58Decoder implements Decoder<CharSequence, byt...
      method Base58Decoder (line 115) | public Base58Decoder(String alphabet) {
      method decode (line 126) | @Override
    method divmod (line 176) | private static byte divmod(byte[] number, int firstDigit, int base, in...

FILE: hutool-core/src/main/java/cn/hutool/core/codec/Base62.java
  class Base62 (line 19) | public class Base62 {
    method encode (line 30) | public static String encode(CharSequence source) {
    method encode (line 41) | public static String encode(CharSequence source, Charset charset) {
    method encode (line 51) | public static String encode(byte[] source) {
    method encode (line 61) | public static String encode(InputStream in) {
    method encode (line 71) | public static String encode(File file) {
    method encodeInverted (line 81) | public static String encodeInverted(CharSequence source) {
    method encodeInverted (line 92) | public static String encodeInverted(CharSequence source, Charset chars...
    method encodeInverted (line 102) | public static String encodeInverted(byte[] source) {
    method encodeInverted (line 112) | public static String encodeInverted(InputStream in) {
    method encodeInverted (line 122) | public static String encodeInverted(File file) {
    method decodeStrGbk (line 133) | public static String decodeStrGbk(CharSequence source) {
    method decodeStr (line 143) | public static String decodeStr(CharSequence source) {
    method decodeStr (line 154) | public static String decodeStr(CharSequence source, Charset charset) {
    method decodeToFile (line 165) | public static File decodeToFile(CharSequence Base62, File destFile) {
    method decodeToStream (line 176) | public static void decodeToStream(CharSequence base62Str, OutputStream...
    method decode (line 186) | public static byte[] decode(CharSequence base62Str) {
    method decode (line 196) | public static byte[] decode(byte[] base62bytes) {
    method decodeStrInverted (line 206) | public static String decodeStrInverted(CharSequence source) {
    method decodeStrInverted (line 217) | public static String decodeStrInverted(CharSequence source, Charset ch...
    method decodeToFileInverted (line 228) | public static File decodeToFileInverted(CharSequence Base62, File dest...
    method decodeToStreamInverted (line 239) | public static void decodeToStreamInverted(CharSequence base62Str, Outp...
    method decodeInverted (line 249) | public static byte[] decodeInverted(CharSequence base62Str) {
    method decodeInverted (line 259) | public static byte[] decodeInverted(byte[] base62bytes) {

FILE: hutool-core/src/main/java/cn/hutool/core/codec/Base62Codec.java
  class Base62Codec (line 15) | public class Base62Codec implements Encoder<byte[], byte[]>, Decoder<byt...
    method encode (line 29) | @Override
    method encode (line 41) | public byte[] encode(byte[] data, boolean useInverted) {
    method decode (line 52) | @Override
    method decode (line 64) | public byte[] decode(byte[] encoded, boolean useInverted) {
    class Base62Encoder (line 74) | public static class Base62Encoder implements Encoder<byte[], byte[]> {
      method Base62Encoder (line 113) | public Base62Encoder(byte[] alphabet) {
      method encode (line 117) | @Override
    class Base62Decoder (line 129) | public static class Base62Decoder implements Decoder<byte[], byte[]> {
      method Base62Decoder (line 141) | public Base62Decoder(byte[] alphabet) {
      method decode (line 149) | @Override
    method translate (line 165) | private static byte[] translate(byte[] indices, byte[] dictionary) {
    method convert (line 183) | private static byte[] convert(byte[] message, int sourceBase, int targ...
    method estimateOutputLength (line 228) | private static int estimateOutputLength(int inputLength, int sourceBas...

FILE: hutool-core/src/main/java/cn/hutool/core/codec/Base64.java
  class Base64 (line 20) | public class Base64 {
    method encode (line 32) | public static byte[] encode(byte[] arr, boolean lineSep) {
    method encodeUrlSafe (line 50) | @Deprecated
    method encode (line 61) | public static String encode(CharSequence source) {
    method encodeUrlSafe (line 72) | public static String encodeUrlSafe(CharSequence source) {
    method encode (line 83) | public static String encode(CharSequence source, String charset) {
    method encodeWithoutPadding (line 95) | public static String encodeWithoutPadding(CharSequence source, String ...
    method encodeUrlSafe (line 108) | @Deprecated
    method encode (line 120) | public static String encode(CharSequence source, Charset charset) {
    method encodeUrlSafe (line 132) | public static String encodeUrlSafe(CharSequence source, Charset charse...
    method encode (line 142) | public static String encode(byte[] source) {
    method encodeWithoutPadding (line 156) | public static String encodeWithoutPadding(byte[] source) {
    method encodeUrlSafe (line 170) | public static String encodeUrlSafe(byte[] source) {
    method encode (line 184) | public static String encode(InputStream in) {
    method encodeUrlSafe (line 195) | public static String encodeUrlSafe(InputStream in) {
    method encode (line 206) | public static String encode(File file) {
    method encodeUrlSafe (line 217) | public static String encodeUrlSafe(File file) {
    method encodeStr (line 231) | public static String encodeStr(byte[] arr, boolean isMultiLine, boolea...
    method encode (line 244) | public static byte[] encode(byte[] arr, boolean isMultiLine, boolean i...
    method decodeStrGbk (line 257) | public static String decodeStrGbk(CharSequence source) {
    method decodeStr (line 267) | public static String decodeStr(CharSequence source) {
    method decodeStr (line 278) | public static String decodeStr(CharSequence source, String charset) {
    method decodeStr (line 289) | public static String decodeStr(CharSequence source, Charset charset) {
    method decodeToFile (line 301) | public static File decodeToFile(CharSequence base64, File destFile) {
    method decodeToStream (line 313) | public static void decodeToStream(CharSequence base64, OutputStream ou...
    method decode (line 323) | public static byte[] decode(CharSequence base64) {
    method decode (line 333) | public static byte[] decode(byte[] in) {
    method isBase64 (line 344) | public static boolean isBase64(CharSequence base64) {
    method isBase64 (line 366) | public static boolean isBase64(byte[] base64Bytes) {
    method isWhiteSpace (line 387) | private static boolean isWhiteSpace(byte byteToCheck) {

FILE: hutool-core/src/main/java/cn/hutool/core/codec/Base64Decoder.java
  class Base64Decoder (line 16) | public class Base64Decoder {
    method decodeStr (line 40) | public static String decodeStr(CharSequence source) {
    method decodeStr (line 51) | public static String decodeStr(CharSequence source, Charset charset) {
    method decode (line 61) | public static byte[] decode(CharSequence source) {
    method decode (line 71) | public static byte[] decode(byte[] in) {
    method decode (line 86) | public static byte[] decode(byte[] in, int pos, int length) {
    method isBase64Code (line 132) | public static boolean isBase64Code(byte octet) {
    method getNextValidDecodeByte (line 145) | private static byte getNextValidDecodeByte(byte[] in, MutableInt pos, ...

FILE: hutool-core/src/main/java/cn/hutool/core/codec/Base64Encoder.java
  class Base64Encoder (line 15) | public class Base64Encoder {
    method encode (line 54) | public static byte[] encode(byte[] arr, boolean lineSep) {
    method encodeUrlSafe (line 66) | public static byte[] encodeUrlSafe(byte[] arr, boolean lineSep) {
    method encode (line 76) | public static String encode(CharSequence source) {
    method encodeUrlSafe (line 87) | public static String encodeUrlSafe(CharSequence source) {
    method encode (line 98) | public static String encode(CharSequence source, Charset charset) {
    method encodeUrlSafe (line 110) | public static String encodeUrlSafe(CharSequence source, Charset charse...
    method encode (line 120) | public static String encode(byte[] source) {
    method encodeUrlSafe (line 131) | public static String encodeUrlSafe(byte[] source) {
    method encodeStr (line 145) | public static String encodeStr(byte[] arr, boolean isMultiLine, boolea...
    method encode (line 158) | public static byte[] encode(byte[] arr, boolean isMultiLine, boolean i...

FILE: hutool-core/src/main/java/cn/hutool/core/codec/Caesar.java
  class Caesar (line 11) | public class Caesar {
    method encode (line 23) | public static String encode(String message, int offset) {
    method decode (line 45) | public static String decode(String cipherText, int offset) {
    method encodeChar (line 69) | private static char encodeChar(char c, int offset) {
    method decodeChar (line 81) | private static char decodeChar(char c, int offset) {

FILE: hutool-core/src/main/java/cn/hutool/core/codec/Decoder.java
  type Decoder (line 11) | public interface Decoder<T, R> {
    method decode (line 19) | R decode(T encoded);

FILE: hutool-core/src/main/java/cn/hutool/core/codec/Encoder.java
  type Encoder (line 11) | public interface Encoder<T, R> {
    method encode (line 19) | R encode(T data);

FILE: hutool-core/src/main/java/cn/hutool/core/codec/Hashids.java
  class Hashids (line 36) | public class Hashids implements Encoder<long[], String>, Decoder<String,...
    method create (line 77) | public static Hashids create(final char[] salt) {
    method create (line 88) | public static Hashids create(final char[] salt, final int minLength) {
    method create (line 100) | public static Hashids create(final char[] salt, final char[] alphabet,...
    method Hashids (line 112) | public Hashids(final char[] salt, final char[] alphabet, final int min...
    method encodeFromHex (line 167) | public String encodeFromHex(final String hexNumbers) {
    method encode (line 194) | @Override
    method decodeToHex (line 290) | public String decodeToHex(final String hash) {
    method decode (line 309) | @Override
    method translate (line 390) | private StringBuilder translate(final long n, final char[] alphabet,
    method translate (line 404) | private long translate(final char[] hash, final char[] alphabet) {
    method deriveNewAlphabet (line 422) | private char[] deriveNewAlphabet(final char[] alphabet, final char[] s...
    method validateAndFilterAlphabet (line 446) | private char[] validateAndFilterAlphabet(final char[] alphabet, final ...
    method filterSeparators (line 480) | @SuppressWarnings("SameParameterValue")
    method shuffle (line 495) | private char[] shuffle(final char[] alphabet, final char[] salt) {

FILE: hutool-core/src/main/java/cn/hutool/core/codec/Morse.java
  class Morse (line 18) | public class Morse {
    method registerMorse (line 29) | private static void registerMorse(Character abc, String dict) {
    method Morse (line 101) | public Morse() {
    method Morse (line 112) | public Morse(char dit, char dah, char split) {
    method encode (line 124) | public String encode(String text) {
    method decode (line 147) | public String decode(String morse) {

FILE: hutool-core/src/main/java/cn/hutool/core/codec/PercentCodec.java
  class PercentCodec (line 35) | public class PercentCodec implements Serializable {
    method of (line 44) | public static PercentCodec of(PercentCodec codec) {
    method of (line 54) | public static PercentCodec of(CharSequence chars) {
    method PercentCodec (line 80) | public PercentCodec() {
    method PercentCodec (line 89) | public PercentCodec(BitSet safeCharacters) {
    method addSafe (line 100) | public PercentCodec addSafe(char c) {
    method removeSafe (line 112) | public PercentCodec removeSafe(char c) {
    method or (line 123) | public PercentCodec or(PercentCodec codec) {
    method orNew (line 134) | public PercentCodec orNew(PercentCodec codec) {
    method setEncodeSpaceAsPlus (line 146) | public PercentCodec setEncodeSpaceAsPlus(boolean encodeSpaceAsPlus) {
    method encode (line 159) | public String encode(CharSequence path, Charset charset, char... custo...

FILE: hutool-core/src/main/java/cn/hutool/core/codec/PunyCode.java
  class PunyCode (line 18) | public class PunyCode {
    method encodeDomain (line 37) | public static String encodeDomain(String domain) throws UtilException {
    method encode (line 58) | public static String encode(CharSequence input) throws UtilException {
    method encode (line 70) | public static String encode(CharSequence input, boolean withPrefix) th...
    method decodeDomain (line 157) | public static String decodeDomain(String domain) throws UtilException {
    method decode (line 178) | public static String decode(String input) throws UtilException {
    method adapt (line 238) | private static int adapt(int delta, int numpoints, boolean first) {
    method isBasic (line 253) | private static boolean isBasic(char c) {
    method digit2codepoint (line 273) | private static int digit2codepoint(int d) throws UtilException {
    method codepoint2digit (line 302) | private static int codepoint2digit(int c) throws UtilException {

FILE: hutool-core/src/main/java/cn/hutool/core/codec/Rot.java
  class Rot (line 12) | public class Rot {
    method encode13 (line 27) | public static String encode13(String message) {
    method encode13 (line 38) | public static String encode13(String message, boolean isEncodeNumber) {
    method encode (line 50) | public static String encode(String message, int offset, boolean isEnco...
    method decode13 (line 67) | public static String decode13(String rot) {
    method decode13 (line 78) | public static String decode13(String rot, boolean isDecodeNumber) {
    method decode (line 90) | public static String decode(String rot, int offset, boolean isDecodeNu...
    method encodeChar (line 110) | private static char encodeChar(char c, int offset, boolean isDecodeNum...
    method decodeChar (line 142) | private static char decodeChar(char c, int offset, boolean isDecodeNum...

FILE: hutool-core/src/main/java/cn/hutool/core/collection/ArrayIter.java
  class ArrayIter (line 14) | public class ArrayIter<E> implements IterableIter<E>, ResettableIter<E>,...
    method ArrayIter (line 41) | public ArrayIter(E[] array) {
    method ArrayIter (line 52) | public ArrayIter(Object array) {
    method ArrayIter (line 64) | public ArrayIter(Object array, int startIndex) {
    method ArrayIter (line 77) | public ArrayIter(final Object array, final int startIndex, final int e...
    method hasNext (line 90) | @Override
    method next (line 95) | @Override
    method remove (line 109) | @Override
    method getArray (line 122) | public Object getArray() {
    method reset (line 129) | @Override

FILE: hutool-core/src/main/java/cn/hutool/core/collection/AvgPartition.java
  class AvgPartition (line 22) | public class AvgPartition<T> extends Partition<T> {
    method AvgPartition (line 34) | public AvgPartition(List<T> list, int limit) {
    method get (line 41) | @Override
    method size (line 55) | @Override

FILE: hutool-core/src/main/java/cn/hutool/core/collection/BoundedPriorityQueue.java
  class BoundedPriorityQueue (line 16) | public class BoundedPriorityQueue<E> extends PriorityQueue<E>{
    method BoundedPriorityQueue (line 23) | public BoundedPriorityQueue(int capacity) {
    method BoundedPriorityQueue (line 32) | public BoundedPriorityQueue(int capacity, final Comparator<? super E> ...
    method offer (line 54) | @Override
    method addAll (line 73) | public boolean addAll(E[] c) {
    method toList (line 80) | public ArrayList<E> toList() {
    method iterator (line 86) | @Override

FILE: hutool-core/src/main/java/cn/hutool/core/collection/CollStreamUtil.java
  class CollStreamUtil (line 27) | public class CollStreamUtil {
    method toIdentityMap (line 39) | public static <V, K> Map<K, V> toIdentityMap(Collection<V> collection,...
    method toIdentityMap (line 55) | public static <V, K> Map<K, V> toIdentityMap(Collection<V> collection,...
    method toMap (line 74) | public static <E, K, V> Map<K, V> toMap(Collection<E> collection, Func...
    method toMap (line 88) | public static <E, K, V> Map<K, V> toMap(Collection<E> collection, Func...
    method groupByKey (line 107) | public static <E, K> Map<K, List<E>> groupByKey(Collection<E> collecti...
    method groupByKey (line 122) | public static <E, K> Map<K, List<E>> groupByKey(Collection<E> collecti...
    method groupBy2Key (line 141) | public static <E, K, U> Map<K, Map<U, List<E>>> groupBy2Key(Collection...
    method groupBy2Key (line 159) | public static <E, K, U> Map<K, Map<U, List<E>>> groupBy2Key(Collection...
    method group2Map (line 179) | public static <E, T, U> Map<T, Map<U, E>> group2Map(Collection<E> coll...
    method group2Map (line 196) | public static <E, T, U> Map<T, Map<U, E>> group2Map(Collection<E> coll...
    method groupKeyValue (line 216) | public static <E, K, V> Map<K, List<V>> groupKeyValue(Collection<E> co...
    method groupKeyValue (line 234) | public static <E, K, V> Map<K, List<V>> groupKeyValue(Collection<E> co...
    method groupBy (line 254) | public static <E, K, D> Map<K, D> groupBy(Collection<E> collection, Fu...
    method groupBy (line 275) | public static <E, K, D> Map<K, D> groupBy(Collection<E> collection, Fu...
    method toList (line 292) | public static <E, T> List<T> toList(Collection<E> collection, Function...
    method toList (line 307) | public static <E, T> List<T> toList(Collection<E> collection, Function...
    method toSet (line 327) | public static <E, T> Set<T> toSet(Collection<E> collection, Function<E...
    method toSet (line 342) | public static <E, T> Set<T> toSet(Collection<E> collection, Function<E...
    method merge (line 365) | public static <K, X, Y, V> Map<K, V> merge(Map<K, X> map1, Map<K, Y> m...

FILE: hutool-core/src/main/java/cn/hutool/core/collection/CollUtil.java
  class CollUtil (line 40) | public class CollUtil {
    method emptyIfNull (line 51) | public static <T> Set<T> emptyIfNull(Set<T> set) {
    method emptyIfNull (line 64) | public static <T> List<T> emptyIfNull(List<T> list) {
    method union (line 79) | public static <T> Collection<T> union(Collection<T> coll1, Collection<...
    method union (line 116) | @SafeVarargs
    method unionDistinct (line 140) | @SafeVarargs
    method unionAll (line 177) | @SafeVarargs
    method intersection (line 225) | public static <T> Collection<T> intersection(Collection<T> coll1, Coll...
    method intersection (line 256) | @SafeVarargs
    method intersectionDistinct (line 284) | @SafeVarargs
    method disjunction (line 328) | public static <T> Collection<T> disjunction(Collection<T> coll1, Colle...
    method subtract (line 363) | public static <T> Collection<T> subtract(Collection<T> coll1, Collecti...
    method subtractToList (line 397) | public static <T> List<T> subtractToList(Collection<T> coll1, Collecti...
    method subtractToList (line 424) | public static <T> List<T> subtractToList(Collection<T> coll1, Collecti...
    method contains (line 463) | public static boolean contains(Collection<?> collection, Object value) {
    method safeContains (line 475) | public static boolean safeContains(Collection<?> collection, Object va...
    method contains (line 493) | public static <T> boolean contains(Collection<T> collection, Predicate...
    method containsAny (line 514) | public static boolean containsAny(Collection<?> coll1, Collection<?> c...
    method containsAll (line 544) | @SuppressWarnings("SuspiciousMethodCalls")
    method countMap (line 598) | public static <T> Map<T, Integer> countMap(Iterable<T> collection) {
    method join (line 613) | public static <T> String join(Iterable<T> iterable, CharSequence conju...
    method join (line 630) | public static <T> String join(Iterable<T> iterable, CharSequence conju...
    method join (line 648) | public static <T> String join(Iterable<T> iterable, CharSequence conju...
    method join (line 665) | @Deprecated
    method popPart (line 679) | public static <T> List<T> popPart(Stack<T> surplusAlaDatas, int partSi...
    method popPart (line 708) | public static <T> List<T> popPart(Deque<T> surplusAlaDatas, int partSi...
    method anyMatch (line 736) | public static <T>boolean anyMatch(Collection<T> collection,Predicate<T...
    method allMatch (line 751) | public static <T>boolean allMatch(Collection<T> collection,Predicate<T...
    method newHashSet (line 767) | @SafeVarargs
    method newLinkedHashSet (line 780) | @SafeVarargs
    method set (line 793) | @SafeVarargs
    method newHashSet (line 811) | public static <T> HashSet<T> newHashSet(Collection<T> collection) {
    method newHashSet (line 823) | public static <T> HashSet<T> newHashSet(boolean isSorted, Collection<T...
    method newHashSet (line 836) | public static <T> HashSet<T> newHashSet(boolean isSorted, Iterator<T> ...
    method newHashSet (line 856) | public static <T> HashSet<T> newHashSet(boolean isSorted, Enumeration<...
    method list (line 877) | public static <T> List<T> list(boolean isLinked) {
    method list (line 890) | @SafeVarargs
    method list (line 904) | public static <T> List<T> list(boolean isLinked, Collection<T> collect...
    method list (line 918) | public static <T> List<T> list(boolean isLinked, Iterable<T> iterable) {
    method list (line 932) | public static <T> List<T> list(boolean isLinked, Iterator<T> iter) {
    method list (line 946) | public static <T> List<T> list(boolean isLinked, Enumeration<T> enumer...
    method newArrayList (line 958) | @SafeVarargs
    method toList (line 971) | @SafeVarargs
    method newArrayList (line 983) | public static <T> ArrayList<T> newArrayList(Collection<T> collection) {
    method newArrayList (line 996) | public static <T> ArrayList<T> newArrayList(Iterable<T> iterable) {
    method newArrayList (line 1009) | public static <T> ArrayList<T> newArrayList(Iterator<T> iterator) {
    method newArrayList (line 1022) | public static <T> ArrayList<T> newArrayList(Enumeration<T> enumeration) {
    method newLinkedList (line 1036) | @SafeVarargs
    method newCopyOnWriteArrayList (line 1048) | public static <T> CopyOnWriteArrayList<T> newCopyOnWriteArrayList(Coll...
    method newBlockingQueue (line 1062) | public static <T> BlockingQueue<T> newBlockingQueue(int capacity, bool...
    method create (line 1080) | public static <T> Collection<T> create(Class<?> collectionType) {
    method create (line 1093) | @SuppressWarnings({"unchecked", "rawtypes"})
    method distinct (line 1148) | public static <T> ArrayList<T> distinct(Collection<T> collection) {
    method distinct (line 1170) | public static <T, K> List<T> distinct(Collection<T> collection, Functi...
    method sub (line 1194) | public static <T> List<T> sub(List<T> list, int start, int end) {
    method sub (line 1210) | public static <T> List<T> sub(List<T> list, int start, int end, int st...
    method sub (line 1223) | public static <T> List<T> sub(Collection<T> collection, int start, int...
    method sub (line 1238) | public static <T> List<T> sub(Collection<T> collection, int start, int...
    method splitList (line 1261) | @Deprecated
    method split (line 1274) | public static <T> List<List<T>> split(Collection<T> collection, int si...
    method edit (line 1307) | public static <T> Collection<T> edit(Collection<T> collection, Editor<...
    method filterNew (line 1341) | public static <T> Collection<T> filterNew(Collection<T> collection, Fi...
    method removeAny (line 1358) | @SuppressWarnings("unchecked")
    method filter (line 1374) | public static <T extends Collection<E>, E> T filter(T collection, fina...
    method removeNull (line 1387) | public static <T extends Collection<E>, E> T removeNull(T collection) {
    method removeEmpty (line 1400) | public static <T extends Collection<E>, E extends CharSequence> T remo...
    method removeBlank (line 1413) | public static <T extends Collection<E>, E extends CharSequence> T remo...
    method removeWithAddIf (line 1429) | public static <T extends Collection<E>, E> T removeWithAddIf(T targetC...
    method removeWithAddIf (line 1453) | public static <T extends Collection<E>, E> List<E> removeWithAddIf(T t...
    method extract (line 1467) | public static List<Object> extract(Iterable<?> collection, Editor<Obje...
    method extract (line 1482) | public static List<Object> extract(Iterable<?> collection, Editor<Obje...
    method map (line 1498) | public static <T, R> List<R> map(Iterable<T> collection, Function<? su...
    method getFieldValues (line 1527) | public static List<Object> getFieldValues(Iterable<?> collection, fina...
    method getFieldValues (line 1541) | public static List<Object> getFieldValues(Iterable<?> collection, fina...
    method getFieldValues (line 1562) | public static <T> List<T> getFieldValues(Iterable<?> collection, final...
    method fieldValueMap (line 1578) | public static <K, V> Map<K, V> fieldValueMap(Iterable<V> iterable, Str...
    method fieldValueAsMap (line 1593) | public static <K, V> Map<K, V> fieldValueAsMap(Iterable<?> iterable, S...
    method findOne (line 1606) | public static <T> T findOne(Iterable<T> collection, Filter<T> filter) {
    method findOneByField (line 1630) | public static <T> T findOneByField(Iterable<T> collection, final Strin...
    method count (line 1652) | public static <T> int count(Iterable<T> iterable, Matcher<T> matcher) {
    method indexOf (line 1674) | public static <T> int indexOf(Collection<T> collection, Matcher<T> mat...
    method lastIndexOf (line 1697) | public static <T> int lastIndexOf(Collection<T> collection, Matcher<T>...
    method indexOfAll (line 1725) | public static <T> int[] indexOfAll(Collection<T> collection, Matcher<T...
    method isEmpty (line 1747) | public static boolean isEmpty(Collection<?> collection) {
    method defaultIfEmpty (line 1761) | public static <T extends Collection<E>, E> T defaultIfEmpty(T collecti...
    method defaultIfEmpty (line 1775) | public static <T extends Collection<E>, E> T defaultIfEmpty(T collecti...
    method isEmpty (line 1786) | public static boolean isEmpty(Iterable<?> iterable) {
    method isEmpty (line 1797) | public static boolean isEmpty(Iterator<?> Iterator) {
    method isEmpty (line 1807) | public static boolean isEmpty(Enumeration<?> enumeration) {
    method isEmpty (line 1819) | public static boolean isEmpty(Map<?, ?> map) {
    method isNotEmpty (line 1831) | public static boolean isNotEmpty(Collection<?> collection) {
    method isNotEmpty (line 1842) | public static boolean isNotEmpty(Iterable<?> iterable) {
    method isNotEmpty (line 1853) | public static boolean isNotEmpty(Iterator<?> Iterator) {
    method isNotEmpty (line 1863) | public static boolean isNotEmpty(Enumeration<?> enumeration) {
    method hasNull (line 1875) | public static boolean hasNull(Iterable<?> iterable) {
    method isNotEmpty (line 1887) | public static boolean isNotEmpty(Map<?, ?> map) {
    method zip (line 1908) | public static Map<String, String> zip(String keys, String values, Stri...
    method zip (line 1925) | public static Map<String, String> zip(String keys, String values, Stri...
    method zip (line 1943) | public static <K, V> Map<K, V> zip(Collection<K> keys, Collection<V> v...
    method toMap (line 1970) | public static <K, V> HashMap<K, V> toMap(Iterable<Entry<K, V>> entryIt...
    method toMap (line 1998) | public static HashMap<Object, Object> toMap(Object[] array) {
    method toTreeSet (line 2010) | public static <T> TreeSet<T> toTreeSet(Collection<T> collection, Compa...
    method asEnumeration (line 2025) | public static <E> Enumeration<E> asEnumeration(Iterator<E> iter) {
    method asIterator (line 2039) | public static <E> Iterator<E> asIterator(Enumeration<E> e) {
    method asIterable (line 2051) | public static <E> Iterable<E> asIterable(final Iterator<E> iter) {
    method toCollection (line 2064) | public static <E> Collection<E> toCollection(Iterable<E> iterable) {
    method toListMap (line 2099) | public static <K, V> Map<K, List<V>> toListMap(Iterable<? extends Map<...
    method toMapList (line 2133) | public static <K, V> List<Map<K, V>> toMapList(Map<K, ? extends Iterab...
    method toMap (line 2149) | public static <K, V> Map<K, V> toMap(Iterable<V> values, Map<K, V> map...
    method toMap (line 2167) | public static <K, V, E> Map<K, V> toMap(Iterable<E> values, Map<K, V> ...
    method addIfAbsent (line 2190) | public static <T, S extends T> boolean addIfAbsent(Collection<T> colle...
    method addAll (line 2207) | public static <T> Collection<T> addAll(Collection<T> collection, Objec...
    method addAll (line 2222) | @SuppressWarnings({"unchecked", "rawtypes"})
    method addAll (line 2272) | public static <T> Collection<T> addAll(Collection<T> collection, Itera...
    method addAll (line 2289) | public static <T> Collection<T> addAll(Collection<T> collection, Itera...
    method addAll (line 2304) | public static <T> Collection<T> addAll(Collection<T> collection, Enume...
    method addAll (line 2322) | public static <T> Collection<T> addAll(Collection<T> collection, T[] v...
    method addAllIfNotContains (line 2337) | public static <T> List<T> addAllIfNotContains(List<T> list, List<T> ot...
    method get (line 2356) | public static <T> T get(Collection<T> collection, int index) {
    method getAny (line 2392) | @SuppressWarnings("unchecked")
    method getFirst (line 2425) | public static <T> T getFirst(Iterable<T> iterable) {
    method getFirst (line 2438) | public static <T> T getFirst(Iterator<T> iterator) {
    method getLast (line 2450) | public static <T> T getLast(Collection<T> collection) {
    method getElementType (line 2463) | @Deprecated
    method getElementType (line 2477) | @Deprecated
    method valuesOfKeys (line 2493) | @SuppressWarnings("unchecked")
    method valuesOfKeys (line 2509) | public static <K, V> ArrayList<V> valuesOfKeys(Map<K, V> map, Iterable...
    method valuesOfKeys (line 2524) | public static <K, V> ArrayList<V> valuesOfKeys(Map<K, V> map, Iterator...
    method sortPageAll (line 2541) | @SafeVarargs
    method page (line 2564) | public static <T> List<T> page(int pageNo, int pageSize, List<T> list) {
    method sort (line 2576) | public static <T> List<T> sort(Collection<T> collection, Comparator<? ...
    method sort (line 2591) | public static <T> List<T> sort(List<T> list, Comparator<? super T> c) {
    method sortByProperty (line 2604) | public static <T> List<T> sortByProperty(Collection<T> collection, Str...
    method sortByProperty (line 2617) | public static <T> List<T> sortByProperty(List<T> list, String property) {
    method sortByPinyin (line 2628) | public static List<String> sortByPinyin(Collection<String> collection) {
    method sortByPinyin (line 2639) | public static List<String> sortByPinyin(List<String> list) {
    method sort (line 2653) | public static <K, V> TreeMap<K, V> sort(Map<K, V> map, Comparator<? su...
    method sortToMap (line 2669) | public static <K, V> LinkedHashMap<K, V> sortToMap(Collection<Map.Entr...
    method sortByEntry (line 2690) | public static <K, V> LinkedHashMap<K, V> sortByEntry(Map<K, V> map, Co...
    method sortEntryToList (line 2702) | @SuppressWarnings({"unchecked", "rawtypes"})
    method forEach (line 2728) | public static <T> void forEach(Iterable<T> iterable, Consumer<T> consu...
    method forEach (line 2742) | public static <T> void forEach(Iterator<T> iterator, Consumer<T> consu...
    method forEach (line 2760) | public static <T> void forEach(Enumeration<T> enumeration, Consumer<T>...
    method forEach (line 2780) | public static <K, V> void forEach(Map<K, V> map, KVConsumer<K, V> kvCo...
    method group (line 2799) | public static <T> List<List<T>> group(Collection<T> collection, Hash32...
    method groupByField (line 2838) | public static <T> List<List<T>> groupByField(Collection<T> collection,...
    method reverse (line 2868) | public static <T> List<T> reverse(List<T> list) {
    method reverseNew (line 2880) | public static <T> List<T> reverseNew(List<T> list) {
    method setOrAppend (line 2894) | public static <T> List<T> setOrAppend(List<T> list, int index, T eleme...
    method keySet (line 2906) | public static <K> Set<K> keySet(Collection<Map<K, ?>> mapCollection) {
    method values (line 2926) | public static <V> List<V> values(Collection<Map<?, V>> mapCollection) {
    method max (line 2944) | public static <T extends Comparable<? super T>> T max(Collection<T> co...
    method min (line 2957) | public static <T extends Comparable<? super T>> T min(Collection<T> co...
    method unmodifiable (line 2969) | public static <T> Collection<T> unmodifiable(Collection<? extends T> c) {
    method empty (line 2989) | @SuppressWarnings("unchecked")
    method clear (line 3017) | public static void clear(Collection<?>... collections) {
    method padLeft (line 3034) | public static <T> void padLeft(List<T> list, int minLen, T padObj) {
    method padRight (line 3054) | public static <T> void padRight(Collection<T> list, int minLen, T padO...
    method trans (line 3071) | public static <F, T> Collection<T> trans(Collection<F> collection, Fun...
    method setValueByMap (line 3088) | public static <E, K, V> void setValueByMap(Iterable<E> iterable, Map<K...
    type Consumer (line 3101) | @FunctionalInterface
      method accept (line 3109) | void accept(T value, int index);
    type KVConsumer (line 3119) | @FunctionalInterface
      method accept (line 3128) | void accept(K key, V value, int index);
    method size (line 3147) | public static int size(final Object object) {
    method isEqualList (line 3188) | public static boolean isEqualList(final Collection<?> list1, final Col...

FILE: hutool-core/src/main/java/cn/hutool/core/collection/CollectionUtil.java
  class CollectionUtil (line 9) | public class CollectionUtil extends CollUtil{

FILE: hutool-core/src/main/java/cn/hutool/core/collection/ComputeIter.java
  class ComputeIter (line 16) | public abstract class ComputeIter<T> implements Iterator<T> {
    method computeNext (line 30) | protected abstract T computeNext();
    method hasNext (line 32) | @Override
    method next (line 54) | @Override
    method finish (line 69) | public void finish(){
    method resetState (line 77) | public void resetState() {

FILE: hutool-core/src/main/java/cn/hutool/core/collection/ConcurrentHashSet.java
  class ConcurrentHashSet (line 17) | public class ConcurrentHashSet<E> extends AbstractSet<E> implements java...
    method ConcurrentHashSet (line 29) | public ConcurrentHashSet() {
    method ConcurrentHashSet (line 39) | public ConcurrentHashSet(int initialCapacity) {
    method ConcurrentHashSet (line 49) | public ConcurrentHashSet(int initialCapacity, float loadFactor) {
    method ConcurrentHashSet (line 60) | public ConcurrentHashSet(int initialCapacity, float loadFactor, int co...
    method ConcurrentHashSet (line 68) | public ConcurrentHashSet(Iterable<E> iter) {
    method iterator (line 82) | @Override
    method size (line 87) | @Override
    method isEmpty (line 92) | @Override
    method contains (line 97) | @Override
    method add (line 103) | @Override
    method remove (line 108) | @Override
    method clear (line 113) | @Override

FILE: hutool-core/src/main/java/cn/hutool/core/collection/CopiedIter.java
  class CopiedIter (line 23) | public class CopiedIter<E> implements IterableIter<E>, Serializable {
    method copyOf (line 35) | public static <E> CopiedIter<E> copyOf(Iterator<E> iterator) {
    method CopiedIter (line 44) | public CopiedIter(Iterator<E> iterator) {
    method hasNext (line 49) | @Override
    method next (line 54) | @Override
    method remove (line 64) | @Override

FILE: hutool-core/src/main/java/cn/hutool/core/collection/EnumerationIter.java
  class EnumerationIter (line 14) | public class EnumerationIter<E> implements IterableIter<E>, Serializable{
    method EnumerationIter (line 23) | public EnumerationIter(Enumeration<E> enumeration) {
    method hasNext (line 27) | @Override
    method next (line 32) | @Override
    method remove (line 37) | @Override

FILE: hutool-core/src/main/java/cn/hutool/core/collection/FilterIter.java
  class FilterIter (line 16) | public class FilterIter<E> implements Iterator<E> {
    method FilterIter (line 36) | public FilterIter(final Iterator<? extends E> iterator, final Filter<?...
    method hasNext (line 41) | @Override
    method next (line 46) | @Override
    method remove (line 55) | @Override
    method getIterator (line 68) | public Iterator<? extends E> getIterator() {
    method getFilter (line 77) | public Filter<? super E> getFilter() {
    method setNextObject (line 84) | private boolean setNextObject() {

FILE: hutool-core/src/main/java/cn/hutool/core/collection/IterChain.java
  class IterChain (line 17) | public class IterChain<T> implements Iterator<T>, Chain<Iterator<T>, Ite...
    method IterChain (line 25) | public IterChain() {
    method IterChain (line 32) | @SafeVarargs
    method addChain (line 39) | @Override
    method hasNext (line 52) | @Override
    method next (line 69) | @Override
    method remove (line 78) | @Override
    method iterator (line 87) | @Override

FILE: hutool-core/src/main/java/cn/hutool/core/collection/IterUtil.java
  class IterUtil (line 37) | public class IterUtil {
    method getIter (line 47) | public static <T> Iterator<T> getIter(Iterable<T> iterable) {
    method isEmpty (line 57) | public static boolean isEmpty(Iterable<?> iterable) {
    method isEmpty (line 67) | public static boolean isEmpty(Iterator<?> Iterator) {
    method isNotEmpty (line 77) | public static boolean isNotEmpty(Iterable<?> iterable) {
    method isNotEmpty (line 87) | public static boolean isNotEmpty(Iterator<?> Iterator) {
    method hasNull (line 97) | public static boolean hasNull(Iterable<?> iter) {
    method hasNull (line 107) | public static boolean hasNull(Iterator<?> iter) {
    method isAllNull (line 127) | public static boolean isAllNull(Iterable<?> iter) {
    method isAllNull (line 138) | public static boolean isAllNull(Iterator<?> iter) {
    method countMap (line 154) | public static <T> Map<T, Integer> countMap(Iterator<T> iter) {
    method fieldValueMap (line 177) | @SuppressWarnings("unchecked")
    method fieldValueAsMap (line 193) | @SuppressWarnings("unchecked")
    method fieldValueList (line 210) | public static <V> List<Object> fieldValueList(Iterable<V> iterable, St...
    method fieldValueList (line 223) | public static <V> List<Object> fieldValueList(Iterator<V> iter, String...
    method join (line 244) | public static <T> String join(Iterator<T> iterator, CharSequence conju...
    method join (line 260) | public static <T> String join(Iterator<T> iterator, CharSequence conju...
    method join (line 279) | public static <T> String join(Iterator<T> iterator, CharSequence conju...
    method toMap (line 295) | public static <K, V> HashMap<K, V> toMap(Iterable<Entry<K, V>> entryIt...
    method toMap (line 317) | public static <K, V> Map<K, V> toMap(Iterable<K> keys, Iterable<V> val...
    method toMap (line 334) | public static <K, V> Map<K, V> toMap(Iterable<K> keys, Iterable<V> val...
    method toMap (line 350) | public static <K, V> Map<K, V> toMap(Iterator<K> keys, Iterator<V> val...
    method toMap (line 367) | public static <K, V> Map<K, V> toMap(Iterator<K> keys, Iterator<V> val...
    method toListMap (line 387) | public static <K, V> Map<K, List<V>> toListMap(Iterable<V> iterable, F...
    method toListMap (line 403) | public static <T, K, V> Map<K, List<V>> toListMap(Iterable<T> iterable...
    method toListMap (line 420) | public static <T, K, V> Map<K, List<V>> toListMap(Map<K, List<V>> resu...
    method toMap (line 445) | public static <K, V> Map<K, V> toMap(Iterable<V> iterable, Function<V,...
    method toMap (line 461) | public static <T, K, V> Map<K, V> toMap(Iterable<T> iterable, Function...
    method toMap (line 478) | public static <T, K, V> Map<K, V> toMap(Map<K, V> resultMap, Iterable<...
    method toList (line 502) | public static <E> List<E> toList(Iterable<E> iter) {
    method toList (line 518) | public static <E> List<E> toList(Iterator<E> iter) {
    method asIterator (line 531) | public static <E> Iterator<E> asIterator(Enumeration<E> e) {
    method asIterable (line 542) | public static <E> Iterable<E> asIterable(final Iterator<E> iter) {
    method get (line 555) | public static <E> E get(final Iterator<E> iterator, int index) throws ...
    method getFirst (line 577) | public static <T> T getFirst(Iterable<T> iterable) {
    method getFirstNoneNull (line 594) | public static <T> T getFirstNoneNull(Iterable<T> iterable) {
    method getFirst (line 608) | public static <T> T getFirst(Iterator<T> iterator) {
    method getFirstNoneNull (line 620) | public static <T> T getFirstNoneNull(Iterator<T> iterator) {
    method firstMatch (line 633) | public static <T> T firstMatch(Iterator<T> iterator, Matcher<T> matche...
    method getElementType (line 653) | public static Class<?> getElementType(Iterable<?> iterable) {
    method getElementType (line 664) | public static Class<?> getElementType(Iterator<?> iterator) {
    method edit (line 687) | public static <T> List<T> edit(Iterable<T> iter, Editor<T> editor) {
    method filter (line 718) | public static <T extends Iterable<E>, E> T filter(T iter, Filter<E> fi...
    method filter (line 742) | public static <E> Iterator<E> filter(Iterator<E> iter, Filter<E> filte...
    method filterToList (line 764) | public static <E> List<E> filterToList(Iterator<E> iter, Filter<E> fil...
    method filtered (line 777) | public static <E> FilterIter<E> filtered(final Iterator<? extends E> i...
    method toMap (line 793) | public static <K, V> Map<K, V> toMap(Iterator<V> iterator, Map<K, V> m...
    method toMap (line 811) | public static <K, V, E> Map<K, V> toMap(Iterator<E> iterator, Map<K, V...
    method empty (line 840) | public static <T> Iterator<T> empty() {
    method trans (line 854) | public static <F, T> Iterator<T> trans(Iterator<F> iterator, Function<...
    method size (line 865) | public static int size(Iterable<?> iterable) {
    method size (line 884) | public static int size(Iterator<?> iterator) {
    method isEqualList (line 908) | public static boolean isEqualList(Iterable<?> list1, Iterable<?> list2) {
    method clear (line 936) | public static void clear(Iterator<?> iterator) {
    method forEach (line 954) | public static <E> void forEach(final Iterator<E> iterator, final Consu...
    method toStr (line 973) | public static <E> String toStr(final Iterator<E> iterator) {
    method toStr (line 986) | public static <E> String toStr(final Iterator<E> iterator, final Funct...
    method toStr (line 1002) | public static <E> String toStr(final Iterator<E> iterator,
    method getIter (line 1031) | public static Iterator<?> getIter(final Object obj) {

FILE: hutool-core/src/main/java/cn/hutool/core/collection/IterableIter.java
  
Condensed preview — 2426 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (8,816K chars).
[
  {
    "path": ".editorconfig",
    "chars": 346,
    "preview": "# http://editorconfig.org\n# 配置修改自:https://gitee.com/596392912/mica/blob/master/.editorconfig\n\nroot = true\n\n[*]\nindent_st"
  },
  {
    "path": ".gitee/ISSUE_TEMPLATE.zh-CN.md",
    "chars": 173,
    "preview": "### 版本情况\n\nJDK版本:    openjdk_8_201\nhutool版本: 5.X.X(请确保最新尝试是否还有问题)\n\n### 问题描述(包括截图)\n\n1. 复现代码\n\n```java\nConsole.log(\"报错了\");\n`"
  },
  {
    "path": ".gitee/PULL_REQUEST_TEMPLATE.zh-CN.md",
    "chars": 631,
    "preview": "#### 说明\n\n1. 请确认你提交的PR是到'v5-dev'分支,否则我会手动修改代码并关闭PR。\n2. 请确认没有更改代码风格(如tab缩进)\n3. 新特性添加请确认注释完备,如有必要,请在src/test/java下添加Junit测试"
  },
  {
    "path": ".github/FUNDING.yml",
    "chars": 114,
    "preview": "# These are supported funding model platforms\n\ngithub: [looly]\ncustom: ['https://gitee.com/chinabugotech/hutool']\n"
  },
  {
    "path": ".github/ISSUE_TEMPLATE.md",
    "chars": 173,
    "preview": "### 版本情况\n\nJDK版本:    openjdk_8_201\nhutool版本: 5.X.X(请确保最新尝试是否还有问题)\n\n### 问题描述(包括截图)\n\n1. 复现代码\n\n```java\nConsole.log(\"报错了\");\n`"
  },
  {
    "path": ".github/PULL_REQUEST_TEMPLATE.md",
    "chars": 629,
    "preview": "#### 说明\n\n1. 请确认你提交的PR是到'v5-dev'分支,否则我会手动修改代码并关闭PR。\n2. 请确认没有更改代码风格(如tab缩进)\n3. 新特性添加请确认注释完备,如有必要,请在src/test/java下添加Junit测试"
  },
  {
    "path": ".github/codeql-analysis.yml",
    "chars": 2498,
    "preview": "# For most projects, this workflow file will not need changing; you simply need\n# to commit it to your repository.\n#\n# Y"
  },
  {
    "path": ".gitignore",
    "chars": 295,
    "preview": "# Eclipse\n.project\n.classpath\n.settings/\n\n# Maven\ntarget/\ndependency-reduced-pom.xml\npom.xml.versionsBackup\n.factorypath"
  },
  {
    "path": ".travis.yml",
    "chars": 398,
    "preview": "language: java\n\nsudo: false # faster builds\n\ninstall: true\n\njdk:\n  - openjdk8\n\nnotifications:\n  email: false\n\ncache:\n  d"
  },
  {
    "path": "CHANGELOG.md",
    "chars": 68851,
    "preview": "\n# 🚀Changelog\n----------------------------------------------------------------------------------------------------------"
  },
  {
    "path": "CHANGELOG_5.0-5.7.md",
    "chars": 81701,
    "preview": "\n# 🚀Changelog\n\n# 5.7.22 (2022-03-01)\n\n### 🐣新特性\n* 【poi    】     ExcelUtil.readBySax增加对POI-5.2.0的兼容性(issue#I4TJF4@Gitee)\n*"
  },
  {
    "path": "LICENSE",
    "chars": 7163,
    "preview": "                     木兰宽松许可证, 第2版\n\n   木兰宽松许可证, 第2版\n   2020年1月 http://license.coscl.org.cn/MulanPSL2\n\n\n   您对“软件”的复制、使用、修改"
  },
  {
    "path": "README-EN.md",
    "chars": 11670,
    "preview": "<p align=\"center\">\n    <a href=\"https://hutool.cn/\"><img src=\"https://cdn.jsdelivr.net/gh/looly/hutool-site/images/logo."
  },
  {
    "path": "README.md",
    "chars": 8157,
    "preview": "<p align=\"center\">\n    <a href=\"https://hutool.cn/\"><img src=\"https://cdn.jsdelivr.net/gh/looly/hutool-site/images/logo."
  },
  {
    "path": "SECURITY.md",
    "chars": 389,
    "preview": "# Security Policy\n\n## Supported Versions(支持的版本)\n\n| Version | Supported          |\n| ------- | ------------------ |\n| 5.x"
  },
  {
    "path": "bin/check_dependency_updates.sh",
    "chars": 169,
    "preview": "#!/bin/bash\n\n#--------------------------------------\n# Check dependency, thanks to t-io\n#-------------------------------"
  },
  {
    "path": "bin/cobertura.sh",
    "chars": 47,
    "preview": "#!/bin/bash\n\nexec mvn -T 1 cobertura:cobertura\n"
  },
  {
    "path": "bin/commit.sh",
    "chars": 60,
    "preview": "#!/bin/bash\n\ngit add .\ngit commit -am \"$1\"\n\nbin/push_dev.sh\n"
  },
  {
    "path": "bin/deploy.sh",
    "chars": 41,
    "preview": "#!/bin/bash\n\nmvn clean deploy -P release\n"
  },
  {
    "path": "bin/fast_install.sh",
    "chars": 144,
    "preview": "#!/bin/bash\n\nexec mvn -T 1C clean source:jar javadoc:javadoc install -Dmaven.test.skip=true -Dmaven.javadoc.skip=true -D"
  },
  {
    "path": "bin/install.sh",
    "chars": 120,
    "preview": "#!/bin/bash\n\nexec mvn -T 1C clean source:jar javadoc:javadoc install -Dmaven.test.skip=false -Dmaven.javadoc.skip=false\n"
  },
  {
    "path": "bin/javadoc.sh",
    "chars": 249,
    "preview": "#!/bin/bash\n\n#exec mvn javadoc:javadoc\n\n# 多模块聚合文档,生成在target/site/apidocs\nexec mvn javadoc:aggregate\n\nbin_home=\"$(dirname"
  },
  {
    "path": "bin/logo.sh",
    "chars": 405,
    "preview": "#!/bin/bash\n\necho '========================================'\necho '    __  __        __                 __ '\necho '   / "
  },
  {
    "path": "bin/package.sh",
    "chars": 120,
    "preview": "#!/bin/bash\n\nexec mvn -T 1C clean source:jar javadoc:javadoc package -Dmaven.test.skip=false -Dmaven.javadoc.skip=false\n"
  },
  {
    "path": "bin/push_dev.sh",
    "chars": 296,
    "preview": "#!/bin/bash\n\necho -e \"\\033[32mCheckout to v5-dev\\033[0m\"\ngit checkout v5-dev\n\necho -e \"\\033[32mPush to Github(origin) v5"
  },
  {
    "path": "bin/push_master.sh",
    "chars": 404,
    "preview": "#!/bin/bash\n\necho -e \"\\033[32mCheckout to v5-master\\033[0m\"\ngit checkout v5-master\n\necho -e \"\\033[32mMerge v5-dev branch"
  },
  {
    "path": "bin/replaceVersion.sh",
    "chars": 780,
    "preview": "#!/bin/bash\n\n#-----------------------------------------------------------\n# 此脚本用于每次升级Hutool时替换相应位置的版本号\n#----------------"
  },
  {
    "path": "bin/simple_install.sh",
    "chars": 91,
    "preview": "#!/bin/bash\n\nexec mvn -T 1C clean install -Dmaven.test.skip=true -Dmaven.javadoc.skip=true\n"
  },
  {
    "path": "bin/sync.sh",
    "chars": 100,
    "preview": "#!/bin/bash\n\ngit checkout v5-dev\ngit pull osc v5-dev\ngit pull origin v5-dev\ngit pull gitcode v5-dev\n"
  },
  {
    "path": "bin/test.sh",
    "chars": 28,
    "preview": "#!/bin/bash\n\nexec mvn test \n"
  },
  {
    "path": "bin/update_version.sh",
    "chars": 411,
    "preview": "#!/bin/bash\n\n#------------------------------------------------\n# 升级Hutool版本,包括:\n# 1. 升级pom.xml中的版本号\n# 2. 替换README.md和doc"
  },
  {
    "path": "bin/version.txt",
    "chars": 7,
    "preview": "5.8.44\n"
  },
  {
    "path": "docs/.nojekyll",
    "chars": 0,
    "preview": ""
  },
  {
    "path": "docs/apidocs/index.html",
    "chars": 1878,
    "preview": "<!DOCTYPE html>\r\n<html lang=\"zh\">\r\n\r\n<head>\r\n\t<meta charset=\"UTF-8\">\r\n\t<meta name=\"viewport\" content=\"width=device-width"
  },
  {
    "path": "docs/js/version.js",
    "chars": 22,
    "preview": "var version = '5.8.44'"
  },
  {
    "path": "hutool-ai/pom.xml",
    "chars": 1316,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project xmlns=\"http://maven.apache.org/POM/4.0.0\"\n\t\t xmlns:xsi=\"http://www.w3.or"
  },
  {
    "path": "hutool-ai/src/main/java/cn/hutool/ai/AIException.java",
    "chars": 2007,
    "preview": "/*\n * Copyright (c) 2025 Hutool Team and hutool.cn\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");"
  },
  {
    "path": "hutool-ai/src/main/java/cn/hutool/ai/AIServiceFactory.java",
    "chars": 2253,
    "preview": "/*\n * Copyright (c) 2025 Hutool Team and hutool.cn\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");"
  },
  {
    "path": "hutool-ai/src/main/java/cn/hutool/ai/AIUtil.java",
    "chars": 3682,
    "preview": "/*\n * Copyright (c) 2025 Hutool Team and hutool.cn\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");"
  },
  {
    "path": "hutool-ai/src/main/java/cn/hutool/ai/ModelName.java",
    "chars": 1180,
    "preview": "/*\n * Copyright (c) 2025 Hutool Team and hutool.cn\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");"
  },
  {
    "path": "hutool-ai/src/main/java/cn/hutool/ai/Models.java",
    "chars": 7588,
    "preview": "/*\n * Copyright (c) 2025 Hutool Team and hutool.cn\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");"
  },
  {
    "path": "hutool-ai/src/main/java/cn/hutool/ai/core/AIConfig.java",
    "chars": 2637,
    "preview": "/*\n * Copyright (c) 2025 Hutool Team and hutool.cn\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");"
  },
  {
    "path": "hutool-ai/src/main/java/cn/hutool/ai/core/AIConfigBuilder.java",
    "chars": 3880,
    "preview": "/*\n * Copyright (c) 2025 Hutool Team and hutool.cn\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");"
  },
  {
    "path": "hutool-ai/src/main/java/cn/hutool/ai/core/AIConfigRegistry.java",
    "chars": 1459,
    "preview": "/*\n * Copyright (c) 2025 Hutool Team and hutool.cn\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");"
  },
  {
    "path": "hutool-ai/src/main/java/cn/hutool/ai/core/AIService.java",
    "chars": 1898,
    "preview": "/*\n * Copyright (c) 2025 Hutool Team and hutool.cn\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");"
  },
  {
    "path": "hutool-ai/src/main/java/cn/hutool/ai/core/AIServiceProvider.java",
    "chars": 1031,
    "preview": "/*\n * Copyright (c) 2025 Hutool Team and hutool.cn\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");"
  },
  {
    "path": "hutool-ai/src/main/java/cn/hutool/ai/core/BaseAIService.java",
    "chars": 4935,
    "preview": "/*\n * Copyright (c) 2025 Hutool Team and hutool.cn\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");"
  },
  {
    "path": "hutool-ai/src/main/java/cn/hutool/ai/core/BaseConfig.java",
    "chars": 2678,
    "preview": "/*\n * Copyright (c) 2025 Hutool Team and hutool.cn\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");"
  },
  {
    "path": "hutool-ai/src/main/java/cn/hutool/ai/core/Message.java",
    "chars": 1433,
    "preview": "/*\n * Copyright (c) 2025 Hutool Team and hutool.cn\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");"
  },
  {
    "path": "hutool-ai/src/main/java/cn/hutool/ai/core/package-info.java",
    "chars": 696,
    "preview": "/*\n * Copyright (c) 2025 Hutool Team and hutool.cn\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");"
  },
  {
    "path": "hutool-ai/src/main/java/cn/hutool/ai/model/deepseek/DeepSeekCommon.java",
    "chars": 743,
    "preview": "/*\n * Copyright (c) 2025 Hutool Team and hutool.cn\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");"
  },
  {
    "path": "hutool-ai/src/main/java/cn/hutool/ai/model/deepseek/DeepSeekConfig.java",
    "chars": 1212,
    "preview": "/*\n * Copyright (c) 2025 Hutool Team and hutool.cn\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");"
  },
  {
    "path": "hutool-ai/src/main/java/cn/hutool/ai/model/deepseek/DeepSeekProvider.java",
    "chars": 1040,
    "preview": "/*\n * Copyright (c) 2025 Hutool Team and hutool.cn\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");"
  },
  {
    "path": "hutool-ai/src/main/java/cn/hutool/ai/model/deepseek/DeepSeekService.java",
    "chars": 1277,
    "preview": "/*\n * Copyright (c) 2025 Hutool Team and hutool.cn\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");"
  },
  {
    "path": "hutool-ai/src/main/java/cn/hutool/ai/model/deepseek/DeepSeekServiceImpl.java",
    "chars": 4235,
    "preview": "/*\n * Copyright (c) 2025 Hutool Team and hutool.cn\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");"
  },
  {
    "path": "hutool-ai/src/main/java/cn/hutool/ai/model/deepseek/package-info.java",
    "chars": 713,
    "preview": "/*\n * Copyright (c) 2025 Hutool Team and hutool.cn\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");"
  },
  {
    "path": "hutool-ai/src/main/java/cn/hutool/ai/model/doubao/DoubaoCommon.java",
    "chars": 2235,
    "preview": "/*\n * Copyright (c) 2025 Hutool Team and hutool.cn\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");"
  },
  {
    "path": "hutool-ai/src/main/java/cn/hutool/ai/model/doubao/DoubaoConfig.java",
    "chars": 1220,
    "preview": "/*\n * Copyright (c) 2025 Hutool Team and hutool.cn\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");"
  },
  {
    "path": "hutool-ai/src/main/java/cn/hutool/ai/model/doubao/DoubaoProvider.java",
    "chars": 1028,
    "preview": "/*\n * Copyright (c) 2025 Hutool Team and hutool.cn\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");"
  },
  {
    "path": "hutool-ai/src/main/java/cn/hutool/ai/model/doubao/DoubaoService.java",
    "chars": 7136,
    "preview": "/*\n * Copyright (c) 2025 Hutool Team and hutool.cn\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");"
  },
  {
    "path": "hutool-ai/src/main/java/cn/hutool/ai/model/doubao/DoubaoServiceImpl.java",
    "chars": 14155,
    "preview": "/*\n * Copyright (c) 2025 Hutool Team and hutool.cn\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");"
  },
  {
    "path": "hutool-ai/src/main/java/cn/hutool/ai/model/doubao/package-info.java",
    "chars": 709,
    "preview": "/*\n * Copyright (c) 2025 Hutool Team and hutool.cn\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");"
  },
  {
    "path": "hutool-ai/src/main/java/cn/hutool/ai/model/gemini/GeminiCommon.java",
    "chars": 2329,
    "preview": "/*\n * Copyright (c) 2025 Hutool Team and hutool.cn\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");"
  },
  {
    "path": "hutool-ai/src/main/java/cn/hutool/ai/model/gemini/GeminiConfig.java",
    "chars": 1267,
    "preview": "/*\n * Copyright (c) 2025 Hutool Team and hutool.cn\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");"
  },
  {
    "path": "hutool-ai/src/main/java/cn/hutool/ai/model/gemini/GeminiProvider.java",
    "chars": 1028,
    "preview": "/*\n * Copyright (c) 2025 Hutool Team and hutool.cn\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");"
  },
  {
    "path": "hutool-ai/src/main/java/cn/hutool/ai/model/gemini/GeminiService.java",
    "chars": 2647,
    "preview": "/*\n * Copyright (c) 2025 Hutool Team and hutool.cn\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");"
  },
  {
    "path": "hutool-ai/src/main/java/cn/hutool/ai/model/gemini/GeminiServiceImpl.java",
    "chars": 18570,
    "preview": "/*\n * Copyright (c) 2025 Hutool Team and hutool.cn\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");"
  },
  {
    "path": "hutool-ai/src/main/java/cn/hutool/ai/model/gemini/package-info.java",
    "chars": 709,
    "preview": "/*\n * Copyright (c) 2025 Hutool Team and hutool.cn\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");"
  },
  {
    "path": "hutool-ai/src/main/java/cn/hutool/ai/model/grok/GrokCommon.java",
    "chars": 964,
    "preview": "/*\n * Copyright (c) 2025 Hutool Team and hutool.cn\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");"
  },
  {
    "path": "hutool-ai/src/main/java/cn/hutool/ai/model/grok/GrokConfig.java",
    "chars": 1178,
    "preview": "/*\n * Copyright (c) 2025 Hutool Team and hutool.cn\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");"
  },
  {
    "path": "hutool-ai/src/main/java/cn/hutool/ai/model/grok/GrokProvider.java",
    "chars": 1017,
    "preview": "/*\n * Copyright (c) 2025 Hutool Team and hutool.cn\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");"
  },
  {
    "path": "hutool-ai/src/main/java/cn/hutool/ai/model/grok/GrokService.java",
    "chars": 4349,
    "preview": "/*\n * Copyright (c) 2025 Hutool Team and hutool.cn\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");"
  },
  {
    "path": "hutool-ai/src/main/java/cn/hutool/ai/model/grok/GrokServiceImpl.java",
    "chars": 8651,
    "preview": "/*\n * Copyright (c) 2025 Hutool Team and hutool.cn\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");"
  },
  {
    "path": "hutool-ai/src/main/java/cn/hutool/ai/model/grok/package-info.java",
    "chars": 705,
    "preview": "/*\n * Copyright (c) 2025 Hutool Team and hutool.cn\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");"
  },
  {
    "path": "hutool-ai/src/main/java/cn/hutool/ai/model/hutool/HutoolCommon.java",
    "chars": 2335,
    "preview": "/*\n * Copyright (c) 2025 Hutool Team and hutool.cn\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");"
  },
  {
    "path": "hutool-ai/src/main/java/cn/hutool/ai/model/hutool/HutoolConfig.java",
    "chars": 1195,
    "preview": "/*\n * Copyright (c) 2025 Hutool Team and hutool.cn\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");"
  },
  {
    "path": "hutool-ai/src/main/java/cn/hutool/ai/model/hutool/HutoolProvider.java",
    "chars": 1029,
    "preview": "/*\n * Copyright (c) 2025 Hutool Team and hutool.cn\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");"
  },
  {
    "path": "hutool-ai/src/main/java/cn/hutool/ai/model/hutool/HutoolService.java",
    "chars": 3836,
    "preview": "/*\n * Copyright (c) 2025 Hutool Team and hutool.cn\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");"
  },
  {
    "path": "hutool-ai/src/main/java/cn/hutool/ai/model/hutool/HutoolServiceImpl.java",
    "chars": 11788,
    "preview": "/*\n * Copyright (c) 2025 Hutool Team and hutool.cn\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");"
  },
  {
    "path": "hutool-ai/src/main/java/cn/hutool/ai/model/hutool/package-info.java",
    "chars": 709,
    "preview": "/*\n * Copyright (c) 2025 Hutool Team and hutool.cn\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");"
  },
  {
    "path": "hutool-ai/src/main/java/cn/hutool/ai/model/ollama/OllamaCommon.java",
    "chars": 1459,
    "preview": "/*\n * Copyright (c) 2025 Hutool Team and hutool.cn\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");"
  },
  {
    "path": "hutool-ai/src/main/java/cn/hutool/ai/model/ollama/OllamaConfig.java",
    "chars": 1310,
    "preview": "/*\n * Copyright (c) 2025 Hutool Team and hutool.cn\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");"
  },
  {
    "path": "hutool-ai/src/main/java/cn/hutool/ai/model/ollama/OllamaProvider.java",
    "chars": 1040,
    "preview": "/*\n * Copyright (c) 2025 Hutool Team and hutool.cn\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");"
  },
  {
    "path": "hutool-ai/src/main/java/cn/hutool/ai/model/ollama/OllamaService.java",
    "chars": 2866,
    "preview": "/*\n * Copyright (c) 2025 Hutool Team and hutool.cn\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");"
  },
  {
    "path": "hutool-ai/src/main/java/cn/hutool/ai/model/ollama/OllamaServiceImpl.java",
    "chars": 8593,
    "preview": "/*\n * Copyright (c) 2025 Hutool Team and hutool.cn\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");"
  },
  {
    "path": "hutool-ai/src/main/java/cn/hutool/ai/model/ollama/package-info.java",
    "chars": 1237,
    "preview": "/*\n * Copyright (c) 2025 Hutool Team and hutool.cn\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");"
  },
  {
    "path": "hutool-ai/src/main/java/cn/hutool/ai/model/openai/OpenaiCommon.java",
    "chars": 1568,
    "preview": "/*\n * Copyright (c) 2025 Hutool Team and hutool.cn\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");"
  },
  {
    "path": "hutool-ai/src/main/java/cn/hutool/ai/model/openai/OpenaiConfig.java",
    "chars": 1192,
    "preview": "/*\n * Copyright (c) 2025 Hutool Team and hutool.cn\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");"
  },
  {
    "path": "hutool-ai/src/main/java/cn/hutool/ai/model/openai/OpenaiProvider.java",
    "chars": 1028,
    "preview": "/*\n * Copyright (c) 2025 Hutool Team and hutool.cn\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");"
  },
  {
    "path": "hutool-ai/src/main/java/cn/hutool/ai/model/openai/OpenaiService.java",
    "chars": 6847,
    "preview": "/*\n * Copyright (c) 2025 Hutool Team and hutool.cn\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");"
  },
  {
    "path": "hutool-ai/src/main/java/cn/hutool/ai/model/openai/OpenaiServiceImpl.java",
    "chars": 11680,
    "preview": "/*\n * Copyright (c) 2025 Hutool Team and hutool.cn\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");"
  },
  {
    "path": "hutool-ai/src/main/java/cn/hutool/ai/model/openai/package-info.java",
    "chars": 709,
    "preview": "/*\n * Copyright (c) 2025 Hutool Team and hutool.cn\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");"
  },
  {
    "path": "hutool-ai/src/main/java/cn/hutool/ai/model/package-info.java",
    "chars": 703,
    "preview": "/*\n * Copyright (c) 2025 Hutool Team and hutool.cn\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");"
  },
  {
    "path": "hutool-ai/src/main/java/cn/hutool/ai/package-info.java",
    "chars": 731,
    "preview": "/*\n * Copyright (c) 2025 Hutool Team and hutool.cn\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");"
  },
  {
    "path": "hutool-ai/src/main/resources/META-INF/services/cn.hutool.ai.core.AIConfig",
    "chars": 273,
    "preview": "cn.hutool.ai.model.hutool.HutoolConfig\ncn.hutool.ai.model.deepseek.DeepSeekConfig\ncn.hutool.ai.model.openai.OpenaiConfig"
  },
  {
    "path": "hutool-ai/src/main/resources/META-INF/services/cn.hutool.ai.core.AIServiceProvider",
    "chars": 287,
    "preview": "cn.hutool.ai.model.hutool.HutoolProvider\ncn.hutool.ai.model.deepseek.DeepSeekProvider\ncn.hutool.ai.model.openai.OpenaiPr"
  },
  {
    "path": "hutool-ai/src/test/java/AIServiceFactoryTest.java",
    "chars": 1407,
    "preview": "/*\n * Copyright (c) 2025 Hutool Team and hutool.cn\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");"
  },
  {
    "path": "hutool-ai/src/test/java/AIUtilTest.java",
    "chars": 3421,
    "preview": "/*\n * Copyright (c) 2025 Hutool Team and hutool.cn\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");"
  },
  {
    "path": "hutool-ai/src/test/java/cn/hutool/ai/model/deepseek/DeepSeekServiceTest.java",
    "chars": 2919,
    "preview": "/*\n * Copyright (c) 2025 Hutool Team and hutool.cn\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");"
  },
  {
    "path": "hutool-ai/src/test/java/cn/hutool/ai/model/doubao/DoubaoServiceTest.java",
    "chars": 11276,
    "preview": "/*\n * Copyright (c) 2025 Hutool Team and hutool.cn\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");"
  },
  {
    "path": "hutool-ai/src/test/java/cn/hutool/ai/model/gemini/GeminiServiceTest.java",
    "chars": 9523,
    "preview": "/*\n * Copyright (c) 2025 Hutool Team and hutool.cn\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");"
  },
  {
    "path": "hutool-ai/src/test/java/cn/hutool/ai/model/grok/GrokServiceTest.java",
    "chars": 5808,
    "preview": "/*\n * Copyright (c) 2025 Hutool Team and hutool.cn\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");"
  },
  {
    "path": "hutool-ai/src/test/java/cn/hutool/ai/model/hutool/HutoolServiceTest.java",
    "chars": 5325,
    "preview": "/*\n * Copyright (c) 2025 Hutool Team and hutool.cn\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");"
  },
  {
    "path": "hutool-ai/src/test/java/cn/hutool/ai/model/ollama/OllamaServiceTest.java",
    "chars": 6801,
    "preview": "/*\n * Copyright (c) 2025 Hutool Team and hutool.cn\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");"
  },
  {
    "path": "hutool-ai/src/test/java/cn/hutool/ai/model/openai/OpenaiProxyServiceTest.java",
    "chars": 9492,
    "preview": "/*\n * Copyright (c) 2025 Hutool Team and hutool.cn\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");"
  },
  {
    "path": "hutool-ai/src/test/java/cn/hutool/ai/model/openai/OpenaiServiceTest.java",
    "chars": 9252,
    "preview": "/*\n * Copyright (c) 2025 Hutool Team and hutool.cn\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");"
  },
  {
    "path": "hutool-all/pom.xml",
    "chars": 4537,
    "preview": "<?xml version='1.0' encoding='utf-8'?>\n<project xmlns=\"http://maven.apache.org/POM/4.0.0\"\n\t\t xmlns:xsi=\"http://www.w3.or"
  },
  {
    "path": "hutool-all/src/main/java/cn/hutool/Hutool.java",
    "chars": 1862,
    "preview": "/*\n * Copyright (C) 2017 hutool.cn\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not "
  },
  {
    "path": "hutool-all/src/main/java/cn/hutool/package-info.java",
    "chars": 351,
    "preview": "/**\n * <p>\n * Hutool是一个小而全的Java工具类库,通过静态方法封装,降低相关API的学习成本,提高工作效率,使Java拥有函数式语言般的优雅,让Java语言也可以“甜甜的”。\n * </p>\n *\n * <p>\n * "
  },
  {
    "path": "hutool-aop/pom.xml",
    "chars": 1339,
    "preview": "<?xml version='1.0' encoding='utf-8'?>\n<project xmlns=\"http://maven.apache.org/POM/4.0.0\"\n\t\t xmlns:xsi=\"http://www.w3.or"
  },
  {
    "path": "hutool-aop/src/main/java/cn/hutool/aop/ProxyUtil.java",
    "chars": 2020,
    "preview": "package cn.hutool.aop;\n\nimport java.lang.reflect.InvocationHandler;\nimport java.lang.reflect.Proxy;\n\nimport cn.hutool.ao"
  },
  {
    "path": "hutool-aop/src/main/java/cn/hutool/aop/aspects/Aspect.java",
    "chars": 975,
    "preview": "package cn.hutool.aop.aspects;\n\nimport java.lang.reflect.Method;\n\n/**\n * 切面接口\n *\n * @author looly\n * @author ted.L\n * @s"
  },
  {
    "path": "hutool-aop/src/main/java/cn/hutool/aop/aspects/SimpleAspect.java",
    "chars": 667,
    "preview": "package cn.hutool.aop.aspects;\n\nimport java.io.Serializable;\nimport java.lang.reflect.Method;\n\n/**\n * 简单切面类,不做任何操作<br>\n "
  },
  {
    "path": "hutool-aop/src/main/java/cn/hutool/aop/aspects/TimeIntervalAspect.java",
    "chars": 774,
    "preview": "package cn.hutool.aop.aspects;\n\nimport cn.hutool.core.date.TimeInterval;\nimport cn.hutool.core.lang.Console;\n\nimport jav"
  },
  {
    "path": "hutool-aop/src/main/java/cn/hutool/aop/aspects/package-info.java",
    "chars": 81,
    "preview": "/**\n * 切面实现,提供一些基本的切面实现\n *\n * @author looly\n *\n */\npackage cn.hutool.aop.aspects;"
  },
  {
    "path": "hutool-aop/src/main/java/cn/hutool/aop/interceptor/CglibInterceptor.java",
    "chars": 1522,
    "preview": "package cn.hutool.aop.interceptor;\n\nimport cn.hutool.aop.aspects.Aspect;\nimport net.sf.cglib.proxy.MethodInterceptor;\nim"
  },
  {
    "path": "hutool-aop/src/main/java/cn/hutool/aop/interceptor/JdkInterceptor.java",
    "chars": 1464,
    "preview": "package cn.hutool.aop.interceptor;\n\nimport cn.hutool.aop.aspects.Aspect;\nimport cn.hutool.core.util.ClassUtil;\nimport cn"
  },
  {
    "path": "hutool-aop/src/main/java/cn/hutool/aop/interceptor/SpringCglibInterceptor.java",
    "chars": 1589,
    "preview": "package cn.hutool.aop.interceptor;\n\nimport cn.hutool.aop.aspects.Aspect;\nimport org.springframework.cglib.proxy.MethodIn"
  },
  {
    "path": "hutool-aop/src/main/java/cn/hutool/aop/interceptor/package-info.java",
    "chars": 76,
    "preview": "/**\n * 代理拦截器实现\n *\n * @author looly\n *\n */\npackage cn.hutool.aop.interceptor;"
  },
  {
    "path": "hutool-aop/src/main/java/cn/hutool/aop/package-info.java",
    "chars": 79,
    "preview": "/**\n * JDK动态代理封装,提供非IOC下的切面支持\n *\n * @author looly\n *\n */\npackage cn.hutool.aop;"
  },
  {
    "path": "hutool-aop/src/main/java/cn/hutool/aop/proxy/CglibProxyFactory.java",
    "chars": 1759,
    "preview": "package cn.hutool.aop.proxy;\n\nimport cn.hutool.aop.aspects.Aspect;\nimport cn.hutool.aop.interceptor.CglibInterceptor;\nim"
  },
  {
    "path": "hutool-aop/src/main/java/cn/hutool/aop/proxy/JdkProxyFactory.java",
    "chars": 607,
    "preview": "package cn.hutool.aop.proxy;\n\nimport cn.hutool.aop.ProxyUtil;\nimport cn.hutool.aop.aspects.Aspect;\nimport cn.hutool.aop."
  },
  {
    "path": "hutool-aop/src/main/java/cn/hutool/aop/proxy/ProxyFactory.java",
    "chars": 1658,
    "preview": "package cn.hutool.aop.proxy;\n\nimport cn.hutool.aop.aspects.Aspect;\nimport cn.hutool.core.util.ReflectUtil;\nimport cn.hut"
  },
  {
    "path": "hutool-aop/src/main/java/cn/hutool/aop/proxy/SpringCglibProxyFactory.java",
    "chars": 1759,
    "preview": "package cn.hutool.aop.proxy;\n\nimport cn.hutool.aop.aspects.Aspect;\nimport cn.hutool.aop.interceptor.SpringCglibIntercept"
  },
  {
    "path": "hutool-aop/src/main/java/cn/hutool/aop/proxy/package-info.java",
    "chars": 67,
    "preview": "/**\n * 代理实现\n *\n * @author looly\n *\n */\npackage cn.hutool.aop.proxy;"
  },
  {
    "path": "hutool-aop/src/main/resources/META-INF/services/cn.hutool.aop.proxy.ProxyFactory",
    "chars": 117,
    "preview": "cn.hutool.aop.proxy.CglibProxyFactory\ncn.hutool.aop.proxy.SpringCglibProxyFactory\ncn.hutool.aop.proxy.JdkProxyFactory"
  },
  {
    "path": "hutool-aop/src/test/java/cn/hutool/aop/test/AopTest.java",
    "chars": 1423,
    "preview": "package cn.hutool.aop.test;\n\nimport cn.hutool.aop.ProxyUtil;\nimport cn.hutool.aop.aspects.TimeIntervalAspect;\nimport cn."
  },
  {
    "path": "hutool-aop/src/test/java/cn/hutool/aop/test/IssueI74EX7Test.java",
    "chars": 2458,
    "preview": "/*\n * Copyright (c) 2023 looly(loolly@aliyun.com)\n * Hutool is licensed under Mulan PSL v2.\n * You can use this software"
  },
  {
    "path": "hutool-aop/src/test/java/cn/hutool/aop/test/IssueIBF20ZTest.java",
    "chars": 1221,
    "preview": "package cn.hutool.aop.test;\n\nimport cn.hutool.aop.proxy.ProxyFactory;\nimport cn.hutool.core.thread.ThreadUtil;\nimport or"
  },
  {
    "path": "hutool-bloomFilter/pom.xml",
    "chars": 855,
    "preview": "<?xml version='1.0' encoding='utf-8'?>\n<project xmlns=\"http://maven.apache.org/POM/4.0.0\"\n\t\t xmlns:xsi=\"http://www.w3.or"
  },
  {
    "path": "hutool-bloomFilter/src/main/java/cn/hutool/bloomfilter/BitMapBloomFilter.java",
    "chars": 1625,
    "preview": "package cn.hutool.bloomfilter;\n\nimport cn.hutool.bloomfilter.filter.DefaultFilter;\nimport cn.hutool.bloomfilter.filter.E"
  },
  {
    "path": "hutool-bloomFilter/src/main/java/cn/hutool/bloomfilter/BitSetBloomFilter.java",
    "chars": 3681,
    "preview": "package cn.hutool.bloomfilter;\n\nimport cn.hutool.core.io.FileUtil;\nimport cn.hutool.core.io.IoUtil;\nimport cn.hutool.cor"
  },
  {
    "path": "hutool-bloomFilter/src/main/java/cn/hutool/bloomfilter/BloomFilter.java",
    "chars": 669,
    "preview": "package cn.hutool.bloomfilter;\n\nimport java.io.Serializable;\n\n/**\n * Bloom filter 是由 Howard Bloom 在 1970 年提出的二进制向量数据结构,它"
  },
  {
    "path": "hutool-bloomFilter/src/main/java/cn/hutool/bloomfilter/BloomFilterUtil.java",
    "chars": 614,
    "preview": "package cn.hutool.bloomfilter;\n\n/**\n * 布隆过滤器工具\n *\n * @author looly\n * @since 4.1.5\n */\npublic class BloomFilterUtil {\n\n\t"
  },
  {
    "path": "hutool-bloomFilter/src/main/java/cn/hutool/bloomfilter/bitMap/BitMap.java",
    "chars": 389,
    "preview": "package cn.hutool.bloomfilter.bitMap;\n\n/**\n * BitMap接口,用于将某个int或long值映射到一个数组中,从而判定某个值是否存在\n *\n * @author looly\n *\n */\npub"
  },
  {
    "path": "hutool-bloomFilter/src/main/java/cn/hutool/bloomfilter/bitMap/IntMap.java",
    "chars": 931,
    "preview": "package cn.hutool.bloomfilter.bitMap;\n\nimport java.io.Serializable;\n\n/**\n * 过滤器BitMap在32位机器上.这个类能发生更好的效果.一般情况下建议使用此类\n *\n"
  },
  {
    "path": "hutool-bloomFilter/src/main/java/cn/hutool/bloomfilter/bitMap/LongMap.java",
    "chars": 923,
    "preview": "package cn.hutool.bloomfilter.bitMap;\n\nimport java.io.Serializable;\n\n/**\n * 过滤器BitMap在64位机器上.这个类能发生更好的效果.一般机器不建议使用\n *\n *"
  },
  {
    "path": "hutool-bloomFilter/src/main/java/cn/hutool/bloomfilter/bitMap/package-info.java",
    "chars": 80,
    "preview": "/**\n * BitMap实现\n *\n * @author looly\n *\n */\npackage cn.hutool.bloomfilter.bitMap;"
  },
  {
    "path": "hutool-bloomFilter/src/main/java/cn/hutool/bloomfilter/filter/AbstractFilter.java",
    "chars": 1688,
    "preview": "package cn.hutool.bloomfilter.filter;\n\nimport cn.hutool.bloomfilter.BloomFilter;\nimport cn.hutool.bloomfilter.bitMap.Bit"
  },
  {
    "path": "hutool-bloomFilter/src/main/java/cn/hutool/bloomfilter/filter/DefaultFilter.java",
    "chars": 441,
    "preview": "package cn.hutool.bloomfilter.filter;\n\nimport cn.hutool.core.util.HashUtil;\n\n/**\n * 默认Bloom过滤器,使用Java自带的Hash算法\n *\n * @au"
  },
  {
    "path": "hutool-bloomFilter/src/main/java/cn/hutool/bloomfilter/filter/ELFFilter.java",
    "chars": 362,
    "preview": "package cn.hutool.bloomfilter.filter;\n\nimport cn.hutool.core.util.HashUtil;\n\npublic class ELFFilter extends FuncFilter {"
  },
  {
    "path": "hutool-bloomFilter/src/main/java/cn/hutool/bloomfilter/filter/FNVFilter.java",
    "chars": 356,
    "preview": "package cn.hutool.bloomfilter.filter;\n\nimport cn.hutool.core.util.HashUtil;\n\npublic class FNVFilter extends FuncFilter {"
  },
  {
    "path": "hutool-bloomFilter/src/main/java/cn/hutool/bloomfilter/filter/FuncFilter.java",
    "chars": 883,
    "preview": "package cn.hutool.bloomfilter.filter;\n\nimport cn.hutool.bloomfilter.BloomFilter;\n\nimport java.util.function.Function;\n\n/"
  },
  {
    "path": "hutool-bloomFilter/src/main/java/cn/hutool/bloomfilter/filter/HfFilter.java",
    "chars": 353,
    "preview": "package cn.hutool.bloomfilter.filter;\n\n\nimport cn.hutool.core.util.HashUtil;\n\npublic class HfFilter extends FuncFilter {"
  },
  {
    "path": "hutool-bloomFilter/src/main/java/cn/hutool/bloomfilter/filter/HfIpFilter.java",
    "chars": 360,
    "preview": "package cn.hutool.bloomfilter.filter;\n\nimport cn.hutool.core.util.HashUtil;\n\npublic class HfIpFilter extends FuncFilter "
  },
  {
    "path": "hutool-bloomFilter/src/main/java/cn/hutool/bloomfilter/filter/JSFilter.java",
    "chars": 352,
    "preview": "package cn.hutool.bloomfilter.filter;\n\nimport cn.hutool.core.util.HashUtil;\n\npublic class JSFilter extends FuncFilter {\n"
  },
  {
    "path": "hutool-bloomFilter/src/main/java/cn/hutool/bloomfilter/filter/PJWFilter.java",
    "chars": 356,
    "preview": "package cn.hutool.bloomfilter.filter;\n\nimport cn.hutool.core.util.HashUtil;\n\npublic class PJWFilter extends FuncFilter {"
  },
  {
    "path": "hutool-bloomFilter/src/main/java/cn/hutool/bloomfilter/filter/RSFilter.java",
    "chars": 352,
    "preview": "package cn.hutool.bloomfilter.filter;\n\nimport cn.hutool.core.util.HashUtil;\n\npublic class RSFilter extends FuncFilter {\n"
  },
  {
    "path": "hutool-bloomFilter/src/main/java/cn/hutool/bloomfilter/filter/SDBMFilter.java",
    "chars": 360,
    "preview": "package cn.hutool.bloomfilter.filter;\n\nimport cn.hutool.core.util.HashUtil;\n\npublic class SDBMFilter extends FuncFilter "
  },
  {
    "path": "hutool-bloomFilter/src/main/java/cn/hutool/bloomfilter/filter/TianlFilter.java",
    "chars": 364,
    "preview": "package cn.hutool.bloomfilter.filter;\n\nimport cn.hutool.core.util.HashUtil;\n\npublic class TianlFilter extends FuncFilter"
  },
  {
    "path": "hutool-bloomFilter/src/main/java/cn/hutool/bloomfilter/filter/package-info.java",
    "chars": 86,
    "preview": "/**\n * 各种Hash算法的过滤器实现\n *\n * @author looly\n *\n */\npackage cn.hutool.bloomfilter.filter;"
  },
  {
    "path": "hutool-bloomFilter/src/main/java/cn/hutool/bloomfilter/package-info.java",
    "chars": 85,
    "preview": "/**\n * 布隆过滤,提供一些Hash算法的布隆过滤\n *\n * @author looly\n *\n */\npackage cn.hutool.bloomfilter;"
  },
  {
    "path": "hutool-bloomFilter/src/test/java/cn/hutool/bloomfilter/AbstractFilterTest.java",
    "chars": 971,
    "preview": "package cn.hutool.bloomfilter;\n\nimport cn.hutool.bloomfilter.bitMap.BitMap;\nimport cn.hutool.bloomfilter.filter.DefaultF"
  },
  {
    "path": "hutool-bloomFilter/src/test/java/cn/hutool/bloomfilter/BitMapBloomFilterTest.java",
    "chars": 1080,
    "preview": "package cn.hutool.bloomfilter;\n\nimport static org.junit.jupiter.api.Assertions.*;\nimport org.junit.jupiter.api.Disabled;"
  },
  {
    "path": "hutool-bloomFilter/src/test/java/cn/hutool/bloomfilter/BitSetBloomFilterTest.java",
    "chars": 1005,
    "preview": "package cn.hutool.bloomfilter;\n\nimport org.junit.jupiter.api.Test;\n\nimport static org.junit.jupiter.api.Assertions.*;\n\np"
  },
  {
    "path": "hutool-bom/pom.xml",
    "chars": 5733,
    "preview": "<?xml version='1.0' encoding='utf-8'?>\n<project xmlns=\"http://maven.apache.org/POM/4.0.0\"\n\t\t xmlns:xsi=\"http://www.w3.or"
  },
  {
    "path": "hutool-cache/pom.xml",
    "chars": 839,
    "preview": "<?xml version='1.0' encoding='utf-8'?>\n<project xmlns=\"http://maven.apache.org/POM/4.0.0\"\n\t\t xmlns:xsi=\"http://www.w3.or"
  },
  {
    "path": "hutool-cache/src/main/java/cn/hutool/cache/Cache.java",
    "chars": 3399,
    "preview": "package cn.hutool.cache;\n\nimport cn.hutool.cache.impl.CacheObj;\nimport cn.hutool.core.lang.func.Func0;\n\nimport java.io.S"
  },
  {
    "path": "hutool-cache/src/main/java/cn/hutool/cache/CacheListener.java",
    "chars": 305,
    "preview": "package cn.hutool.cache;\n\n/**\n * 缓存监听,用于实现缓存操作时的回调监听,例如缓存对象的移除事件等\n *\n * @param <K> 缓存键\n * @param <V> 缓存值\n * @author lool"
  },
  {
    "path": "hutool-cache/src/main/java/cn/hutool/cache/CacheUtil.java",
    "chars": 3249,
    "preview": "package cn.hutool.cache;\n\nimport cn.hutool.cache.impl.FIFOCache;\nimport cn.hutool.cache.impl.LFUCache;\nimport cn.hutool."
  },
  {
    "path": "hutool-cache/src/main/java/cn/hutool/cache/GlobalPruneTimer.java",
    "chars": 1518,
    "preview": "package cn.hutool.cache;\n\nimport cn.hutool.core.thread.ThreadUtil;\nimport cn.hutool.core.util.StrUtil;\n\nimport java.util"
  },
  {
    "path": "hutool-cache/src/main/java/cn/hutool/cache/file/AbstractFileCache.java",
    "chars": 2556,
    "preview": "package cn.hutool.cache.file;\n\nimport java.io.File;\nimport java.io.Serializable;\n\nimport cn.hutool.cache.Cache;\nimport c"
  },
  {
    "path": "hutool-cache/src/main/java/cn/hutool/cache/file/LFUFileCache.java",
    "chars": 1269,
    "preview": "package cn.hutool.cache.file;\n\nimport java.io.File;\n\nimport cn.hutool.cache.Cache;\nimport cn.hutool.cache.impl.LFUCache;"
  },
  {
    "path": "hutool-cache/src/main/java/cn/hutool/cache/file/LRUFileCache.java",
    "chars": 1257,
    "preview": "package cn.hutool.cache.file;\n\nimport java.io.File;\n\nimport cn.hutool.cache.Cache;\nimport cn.hutool.cache.impl.LRUCache;"
  },
  {
    "path": "hutool-cache/src/main/java/cn/hutool/cache/file/package-info.java",
    "chars": 75,
    "preview": "/**\n * 提供针对文件的缓存实现\n *\n * @author looly\n *\n */\npackage cn.hutool.cache.file;"
  },
  {
    "path": "hutool-cache/src/main/java/cn/hutool/cache/impl/AbstractCache.java",
    "chars": 6159,
    "preview": "package cn.hutool.cache.impl;\n\nimport cn.hutool.cache.Cache;\nimport cn.hutool.cache.CacheListener;\nimport cn.hutool.core"
  },
  {
    "path": "hutool-cache/src/main/java/cn/hutool/cache/impl/CacheObj.java",
    "chars": 2160,
    "preview": "package cn.hutool.cache.impl;\n\nimport cn.hutool.core.date.DateUtil;\n\nimport java.io.Serializable;\nimport java.util.Date;"
  },
  {
    "path": "hutool-cache/src/main/java/cn/hutool/cache/impl/CacheObjIterator.java",
    "chars": 1373,
    "preview": "package cn.hutool.cache.impl;\n\nimport java.io.Serializable;\nimport java.util.Iterator;\nimport java.util.NoSuchElementExc"
  },
  {
    "path": "hutool-cache/src/main/java/cn/hutool/cache/impl/CacheValuesIterator.java",
    "chars": 839,
    "preview": "package cn.hutool.cache.impl;\n\nimport java.io.Serializable;\nimport java.util.Iterator;\n\n/**\n *  {@link cn.hutool.cache.i"
  },
  {
    "path": "hutool-cache/src/main/java/cn/hutool/cache/impl/FIFOCache.java",
    "chars": 1547,
    "preview": "package cn.hutool.cache.impl;\n\nimport java.util.Iterator;\nimport java.util.LinkedHashMap;\n\n/**\n * FIFO(first in first ou"
  },
  {
    "path": "hutool-cache/src/main/java/cn/hutool/cache/impl/LFUCache.java",
    "chars": 1872,
    "preview": "package cn.hutool.cache.impl;\n\nimport java.util.HashMap;\nimport java.util.Iterator;\n\n/**\n * LFU(least frequently used) 最"
  },
  {
    "path": "hutool-cache/src/main/java/cn/hutool/cache/impl/LRUCache.java",
    "chars": 1754,
    "preview": "package cn.hutool.cache.impl;\n\nimport cn.hutool.core.lang.mutable.Mutable;\nimport cn.hutool.core.map.FixedLinkedHashMap;"
  },
  {
    "path": "hutool-cache/src/main/java/cn/hutool/cache/impl/NoCache.java",
    "chars": 1868,
    "preview": "package cn.hutool.cache.impl;\n\nimport cn.hutool.cache.Cache;\nimport cn.hutool.core.exceptions.ExceptionUtil;\nimport cn.h"
  },
  {
    "path": "hutool-cache/src/main/java/cn/hutool/cache/impl/ReentrantCache.java",
    "chars": 3688,
    "preview": "package cn.hutool.cache.impl;\n\nimport cn.hutool.core.collection.CopiedIter;\nimport cn.hutool.core.lang.func.Func0;\nimpor"
  },
  {
    "path": "hutool-cache/src/main/java/cn/hutool/cache/impl/StampedCache.java",
    "chars": 3839,
    "preview": "package cn.hutool.cache.impl;\n\nimport cn.hutool.core.collection.CopiedIter;\n\nimport java.util.Iterator;\nimport java.util"
  },
  {
    "path": "hutool-cache/src/main/java/cn/hutool/cache/impl/TimedCache.java",
    "chars": 1673,
    "preview": "package cn.hutool.cache.impl;\n\nimport cn.hutool.cache.GlobalPruneTimer;\nimport cn.hutool.core.lang.mutable.Mutable;\n\nimp"
  },
  {
    "path": "hutool-cache/src/main/java/cn/hutool/cache/impl/WeakCache.java",
    "chars": 1206,
    "preview": "package cn.hutool.cache.impl;\n\nimport cn.hutool.cache.CacheListener;\nimport cn.hutool.core.lang.Opt;\nimport cn.hutool.co"
  },
  {
    "path": "hutool-cache/src/main/java/cn/hutool/cache/impl/package-info.java",
    "chars": 72,
    "preview": "/**\n * 提供各种缓存实现\n *\n * @author looly\n *\n */\npackage cn.hutool.cache.impl;"
  },
  {
    "path": "hutool-cache/src/main/java/cn/hutool/cache/package-info.java",
    "chars": 90,
    "preview": "/**\n * 提供简易的缓存实现,此模块参考了jodd工具中的Cache模块\n *\n * @author looly\n *\n */\npackage cn.hutool.cache;"
  },
  {
    "path": "hutool-cache/src/test/java/cn/hutool/cache/CacheConcurrentTest.java",
    "chars": 2862,
    "preview": "package cn.hutool.cache;\n\nimport cn.hutool.cache.impl.FIFOCache;\nimport cn.hutool.cache.impl.LRUCache;\nimport cn.hutool."
  },
  {
    "path": "hutool-cache/src/test/java/cn/hutool/cache/CacheTest.java",
    "chars": 5133,
    "preview": "package cn.hutool.cache;\n\nimport cn.hutool.cache.impl.TimedCache;\nimport cn.hutool.core.date.DateUnit;\nimport cn.hutool."
  },
  {
    "path": "hutool-cache/src/test/java/cn/hutool/cache/FileCacheTest.java",
    "chars": 352,
    "preview": "package cn.hutool.cache;\n\nimport static org.junit.jupiter.api.Assertions.*;\nimport org.junit.jupiter.api.Test;\n\nimport c"
  },
  {
    "path": "hutool-cache/src/test/java/cn/hutool/cache/Issue3618Test.java",
    "chars": 461,
    "preview": "package cn.hutool.cache;\n\nimport cn.hutool.cache.impl.FIFOCache;\nimport static org.junit.jupiter.api.Assertions.*;\nimpor"
  },
  {
    "path": "hutool-cache/src/test/java/cn/hutool/cache/IssueI8MEIXTest.java",
    "chars": 619,
    "preview": "package cn.hutool.cache;\n\nimport cn.hutool.cache.impl.TimedCache;\nimport cn.hutool.core.lang.Console;\nimport cn.hutool.c"
  },
  {
    "path": "hutool-cache/src/test/java/cn/hutool/cache/LRUCacheTest.java",
    "chars": 2402,
    "preview": "package cn.hutool.cache;\n\nimport cn.hutool.cache.impl.LRUCache;\nimport cn.hutool.core.thread.ThreadUtil;\nimport cn.hutoo"
  },
  {
    "path": "hutool-cache/src/test/java/cn/hutool/cache/WeakCacheTest.java",
    "chars": 1090,
    "preview": "package cn.hutool.cache;\n\nimport cn.hutool.cache.impl.WeakCache;\nimport cn.hutool.core.lang.Console;\nimport org.junit.ju"
  },
  {
    "path": "hutool-captcha/pom.xml",
    "chars": 847,
    "preview": "<?xml version='1.0' encoding='utf-8'?>\n<project xmlns=\"http://maven.apache.org/POM/4.0.0\"\n\t\t xmlns:xsi=\"http://www.w3.or"
  },
  {
    "path": "hutool-captcha/src/main/java/cn/hutool/captcha/AbstractCaptcha.java",
    "chars": 5351,
    "preview": "package cn.hutool.captcha;\n\nimport cn.hutool.captcha.generator.CodeGenerator;\nimport cn.hutool.captcha.generator.RandomG"
  },
  {
    "path": "hutool-captcha/src/main/java/cn/hutool/captcha/CaptchaUtil.java",
    "chars": 5695,
    "preview": "package cn.hutool.captcha;\n\nimport cn.hutool.captcha.generator.CodeGenerator;\n\n/**\n * 图形验证码工具\n *\n * @author looly\n * @si"
  },
  {
    "path": "hutool-captcha/src/main/java/cn/hutool/captcha/CircleCaptcha.java",
    "chars": 3271,
    "preview": "package cn.hutool.captcha;\n\nimport cn.hutool.captcha.generator.CodeGenerator;\nimport cn.hutool.captcha.generator.RandomG"
  },
  {
    "path": "hutool-captcha/src/main/java/cn/hutool/captcha/GifCaptcha.java",
    "chars": 5741,
    "preview": "package cn.hutool.captcha;\n\n\nimport cn.hutool.captcha.generator.CodeGenerator;\nimport cn.hutool.captcha.generator.Random"
  },
  {
    "path": "hutool-captcha/src/main/java/cn/hutool/captcha/ICaptcha.java",
    "chars": 534,
    "preview": "package cn.hutool.captcha;\n\nimport java.io.OutputStream;\nimport java.io.Serializable;\n\n/**\n * 验证码接口,提供验证码对象接口定义\n *\n * @a"
  },
  {
    "path": "hutool-captcha/src/main/java/cn/hutool/captcha/LineCaptcha.java",
    "chars": 3328,
    "preview": "package cn.hutool.captcha;\n\nimport cn.hutool.captcha.generator.CodeGenerator;\nimport cn.hutool.captcha.generator.RandomG"
  },
  {
    "path": "hutool-captcha/src/main/java/cn/hutool/captcha/ShearCaptcha.java",
    "chars": 5601,
    "preview": "package cn.hutool.captcha;\n\nimport cn.hutool.captcha.generator.CodeGenerator;\nimport cn.hutool.captcha.generator.RandomG"
  },
  {
    "path": "hutool-captcha/src/main/java/cn/hutool/captcha/generator/AbstractGenerator.java",
    "chars": 850,
    "preview": "package cn.hutool.captcha.generator;\n\nimport cn.hutool.core.util.RandomUtil;\n\n/**\n * 随机字符验证码生成器<br>\n * 可以通过传入的基础集合和长度随机生"
  },
  {
    "path": "hutool-captcha/src/main/java/cn/hutool/captcha/generator/CodeGenerator.java",
    "chars": 438,
    "preview": "package cn.hutool.captcha.generator;\n\nimport java.io.Serializable;\n\n/**\n * 验证码文字生成器\n *\n * @author looly\n * @since 4.1.2\n"
  },
  {
    "path": "hutool-captcha/src/main/java/cn/hutool/captcha/generator/MathGenerator.java",
    "chars": 2649,
    "preview": "package cn.hutool.captcha.generator;\n\nimport cn.hutool.core.math.Calculator;\nimport cn.hutool.core.util.CharUtil;\nimport"
  },
  {
    "path": "hutool-captcha/src/main/java/cn/hutool/captcha/generator/RandomGenerator.java",
    "chars": 917,
    "preview": "package cn.hutool.captcha.generator;\n\nimport cn.hutool.core.util.RandomUtil;\nimport cn.hutool.core.util.StrUtil;\n\n/**\n *"
  },
  {
    "path": "hutool-captcha/src/main/java/cn/hutool/captcha/generator/package-info.java",
    "chars": 93,
    "preview": "/**\n * 验证码生成策略实现\n *\n * @author looly\n * @since 4.1.2\n */\npackage cn.hutool.captcha.generator;"
  },
  {
    "path": "hutool-captcha/src/main/java/cn/hutool/captcha/package-info.java",
    "chars": 68,
    "preview": "/**\n * 图片验证码实现\n *\n * @author looly\n *\n */\npackage cn.hutool.captcha;"
  }
]

// ... and 2226 more files (download for full content)

About this extraction

This page contains the full source code of the chinabugotech/hutool GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 2426 files (7.5 MB), approximately 2.1M tokens, and a symbol index with 20842 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.

Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.

Copied to clipboard!