mirror of
https://gitee.com/dromara/hutool.git
synced 2025-05-20 23:19:37 +08:00
Prepare release
This commit is contained in:
commit
ce0b104324
@ -1,6 +1,15 @@
|
|||||||
|
|
||||||
# Changelog
|
# Changelog
|
||||||
|
|
||||||
|
-------------------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
# 5.5.4 (2020-12-16)
|
||||||
|
|
||||||
|
### 新特性
|
||||||
|
### Bug修复
|
||||||
|
* 【core 】 修复IoUtil.readBytes的问题
|
||||||
|
|
||||||
|
|
||||||
-------------------------------------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
# 5.5.3 (2020-12-11)
|
# 5.5.3 (2020-12-11)
|
||||||
|
@ -125,19 +125,19 @@ Each module can be introduced individually, or all modules can be introduced by
|
|||||||
<dependency>
|
<dependency>
|
||||||
<groupId>cn.hutool</groupId>
|
<groupId>cn.hutool</groupId>
|
||||||
<artifactId>hutool-all</artifactId>
|
<artifactId>hutool-all</artifactId>
|
||||||
<version>5.5.3</version>
|
<version>5.5.4</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
```
|
```
|
||||||
|
|
||||||
### Gradle
|
### Gradle
|
||||||
```
|
```
|
||||||
compile 'cn.hutool:hutool-all:5.5.3'
|
compile 'cn.hutool:hutool-all:5.5.4'
|
||||||
```
|
```
|
||||||
|
|
||||||
## Download
|
## Download
|
||||||
|
|
||||||
- [Maven1](https://repo1.maven.org/maven2/cn/hutool/hutool-all/5.5.3/)
|
- [Maven1](https://repo1.maven.org/maven2/cn/hutool/hutool-all/5.5.4/)
|
||||||
- [Maven2](http://repo2.maven.org/maven2/cn/hutool/hutool-all/5.5.3/)
|
- [Maven2](http://repo2.maven.org/maven2/cn/hutool/hutool-all/5.5.4/)
|
||||||
|
|
||||||
> note:
|
> 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.
|
> Hutool 5.x supports JDK8+ and is not tested on Android platforms, and cannot guarantee that all tool classes or tool methods are available.
|
||||||
|
@ -123,21 +123,21 @@ Hutool的存在就是为了减少代码搜索成本,避免网络上参差不
|
|||||||
<dependency>
|
<dependency>
|
||||||
<groupId>cn.hutool</groupId>
|
<groupId>cn.hutool</groupId>
|
||||||
<artifactId>hutool-all</artifactId>
|
<artifactId>hutool-all</artifactId>
|
||||||
<version>5.5.3</version>
|
<version>5.5.4</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
```
|
```
|
||||||
|
|
||||||
### Gradle
|
### Gradle
|
||||||
```
|
```
|
||||||
compile 'cn.hutool:hutool-all:5.5.3'
|
compile 'cn.hutool:hutool-all:5.5.4'
|
||||||
```
|
```
|
||||||
|
|
||||||
### 非Maven项目
|
### 非Maven项目
|
||||||
|
|
||||||
点击以下任一链接,下载`hutool-all-X.X.X.jar`即可:
|
点击以下任一链接,下载`hutool-all-X.X.X.jar`即可:
|
||||||
|
|
||||||
- [Maven中央库1](https://repo1.maven.org/maven2/cn/hutool/hutool-all/5.5.3/)
|
- [Maven中央库1](https://repo1.maven.org/maven2/cn/hutool/hutool-all/5.5.4/)
|
||||||
- [Maven中央库2](http://repo2.maven.org/maven2/cn/hutool/hutool-all/5.5.3/)
|
- [Maven中央库2](http://repo2.maven.org/maven2/cn/hutool/hutool-all/5.5.4/)
|
||||||
|
|
||||||
> 注意
|
> 注意
|
||||||
> Hutool 5.x支持JDK8+,对Android平台没有测试,不能保证所有工具类或工具方法可用。
|
> Hutool 5.x支持JDK8+,对Android平台没有测试,不能保证所有工具类或工具方法可用。
|
||||||
|
@ -1 +1 @@
|
|||||||
5.5.3
|
5.5.4
|
||||||
|
@ -1 +1 @@
|
|||||||
var version = '5.5.3'
|
var version = '5.5.4'
|
@ -9,7 +9,7 @@
|
|||||||
<parent>
|
<parent>
|
||||||
<groupId>cn.hutool</groupId>
|
<groupId>cn.hutool</groupId>
|
||||||
<artifactId>hutool-parent</artifactId>
|
<artifactId>hutool-parent</artifactId>
|
||||||
<version>5.5.3</version>
|
<version>5.5.4</version>
|
||||||
</parent>
|
</parent>
|
||||||
|
|
||||||
<artifactId>hutool-all</artifactId>
|
<artifactId>hutool-all</artifactId>
|
||||||
|
@ -9,7 +9,7 @@
|
|||||||
<parent>
|
<parent>
|
||||||
<groupId>cn.hutool</groupId>
|
<groupId>cn.hutool</groupId>
|
||||||
<artifactId>hutool-parent</artifactId>
|
<artifactId>hutool-parent</artifactId>
|
||||||
<version>5.5.3</version>
|
<version>5.5.4</version>
|
||||||
</parent>
|
</parent>
|
||||||
|
|
||||||
<artifactId>hutool-aop</artifactId>
|
<artifactId>hutool-aop</artifactId>
|
||||||
|
@ -7,7 +7,7 @@
|
|||||||
<parent>
|
<parent>
|
||||||
<groupId>cn.hutool</groupId>
|
<groupId>cn.hutool</groupId>
|
||||||
<artifactId>hutool-parent</artifactId>
|
<artifactId>hutool-parent</artifactId>
|
||||||
<version>5.5.3</version>
|
<version>5.5.4</version>
|
||||||
</parent>
|
</parent>
|
||||||
|
|
||||||
<artifactId>hutool-bloomFilter</artifactId>
|
<artifactId>hutool-bloomFilter</artifactId>
|
||||||
|
@ -7,7 +7,7 @@
|
|||||||
<parent>
|
<parent>
|
||||||
<groupId>cn.hutool</groupId>
|
<groupId>cn.hutool</groupId>
|
||||||
<artifactId>hutool-parent</artifactId>
|
<artifactId>hutool-parent</artifactId>
|
||||||
<version>5.5.3</version>
|
<version>5.5.4</version>
|
||||||
</parent>
|
</parent>
|
||||||
|
|
||||||
<artifactId>hutool-bom</artifactId>
|
<artifactId>hutool-bom</artifactId>
|
||||||
|
@ -7,7 +7,7 @@
|
|||||||
<parent>
|
<parent>
|
||||||
<groupId>cn.hutool</groupId>
|
<groupId>cn.hutool</groupId>
|
||||||
<artifactId>hutool-parent</artifactId>
|
<artifactId>hutool-parent</artifactId>
|
||||||
<version>5.5.3</version>
|
<version>5.5.4</version>
|
||||||
</parent>
|
</parent>
|
||||||
|
|
||||||
<artifactId>hutool-cache</artifactId>
|
<artifactId>hutool-cache</artifactId>
|
||||||
|
@ -7,7 +7,7 @@
|
|||||||
<parent>
|
<parent>
|
||||||
<groupId>cn.hutool</groupId>
|
<groupId>cn.hutool</groupId>
|
||||||
<artifactId>hutool-parent</artifactId>
|
<artifactId>hutool-parent</artifactId>
|
||||||
<version>5.5.3</version>
|
<version>5.5.4</version>
|
||||||
</parent>
|
</parent>
|
||||||
|
|
||||||
<artifactId>hutool-captcha</artifactId>
|
<artifactId>hutool-captcha</artifactId>
|
||||||
|
@ -17,7 +17,7 @@
|
|||||||
<parent>
|
<parent>
|
||||||
<groupId>cn.hutool</groupId>
|
<groupId>cn.hutool</groupId>
|
||||||
<artifactId>hutool-parent</artifactId>
|
<artifactId>hutool-parent</artifactId>
|
||||||
<version>5.5.3</version>
|
<version>5.5.4</version>
|
||||||
</parent>
|
</parent>
|
||||||
|
|
||||||
<artifactId>hutool-core</artifactId>
|
<artifactId>hutool-core</artifactId>
|
||||||
|
@ -14,17 +14,17 @@ import java.nio.charset.Charset;
|
|||||||
* Base64工具类,提供Base64的编码和解码方案<br>
|
* Base64工具类,提供Base64的编码和解码方案<br>
|
||||||
* base64编码是用64(2的6次方)个ASCII字符来表示256(2的8次方)个ASCII字符,<br>
|
* base64编码是用64(2的6次方)个ASCII字符来表示256(2的8次方)个ASCII字符,<br>
|
||||||
* 也就是三位二进制数组经过编码后变为四位的ASCII字符显示,长度比原来增加1/3。
|
* 也就是三位二进制数组经过编码后变为四位的ASCII字符显示,长度比原来增加1/3。
|
||||||
*
|
|
||||||
* @author Looly
|
|
||||||
*
|
*
|
||||||
|
* @author Looly
|
||||||
*/
|
*/
|
||||||
public class Base64 {
|
public class Base64 {
|
||||||
|
|
||||||
// -------------------------------------------------------------------- encode
|
// -------------------------------------------------------------------- encode
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 编码为Base64,非URL安全的
|
* 编码为Base64,非URL安全的
|
||||||
*
|
*
|
||||||
* @param arr 被编码的数组
|
* @param arr 被编码的数组
|
||||||
* @param lineSep 在76个char之后是CRLF还是EOF
|
* @param lineSep 在76个char之后是CRLF还是EOF
|
||||||
* @return 编码后的bytes
|
* @return 编码后的bytes
|
||||||
*/
|
*/
|
||||||
@ -34,8 +34,8 @@ public class Base64 {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* 编码为Base64,URL安全的
|
* 编码为Base64,URL安全的
|
||||||
*
|
*
|
||||||
* @param arr 被编码的数组
|
* @param arr 被编码的数组
|
||||||
* @param lineSep 在76个char之后是CRLF还是EOF
|
* @param lineSep 在76个char之后是CRLF还是EOF
|
||||||
* @return 编码后的bytes
|
* @return 编码后的bytes
|
||||||
* @since 3.0.6
|
* @since 3.0.6
|
||||||
@ -46,7 +46,7 @@ public class Base64 {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* base64编码
|
* base64编码
|
||||||
*
|
*
|
||||||
* @param source 被编码的base64字符串
|
* @param source 被编码的base64字符串
|
||||||
* @return 被加密后的字符串
|
* @return 被加密后的字符串
|
||||||
*/
|
*/
|
||||||
@ -56,7 +56,7 @@ public class Base64 {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* base64编码,URL安全
|
* base64编码,URL安全
|
||||||
*
|
*
|
||||||
* @param source 被编码的base64字符串
|
* @param source 被编码的base64字符串
|
||||||
* @return 被加密后的字符串
|
* @return 被加密后的字符串
|
||||||
* @since 3.0.6
|
* @since 3.0.6
|
||||||
@ -67,8 +67,8 @@ public class Base64 {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* base64编码
|
* base64编码
|
||||||
*
|
*
|
||||||
* @param source 被编码的base64字符串
|
* @param source 被编码的base64字符串
|
||||||
* @param charset 字符集
|
* @param charset 字符集
|
||||||
* @return 被加密后的字符串
|
* @return 被加密后的字符串
|
||||||
*/
|
*/
|
||||||
@ -79,7 +79,8 @@ public class Base64 {
|
|||||||
/**
|
/**
|
||||||
* base64编码,不进行padding(末尾不会填充'=')
|
* base64编码,不进行padding(末尾不会填充'=')
|
||||||
*
|
*
|
||||||
* @param source 被编码的base64字符串
|
* @param source 被编码的base64字符串
|
||||||
|
* @param charset 编码
|
||||||
* @return 被加密后的字符串
|
* @return 被加密后的字符串
|
||||||
* @since 5.5.2
|
* @since 5.5.2
|
||||||
*/
|
*/
|
||||||
@ -89,8 +90,8 @@ public class Base64 {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* base64编码,URL安全
|
* base64编码,URL安全
|
||||||
*
|
*
|
||||||
* @param source 被编码的base64字符串
|
* @param source 被编码的base64字符串
|
||||||
* @param charset 字符集
|
* @param charset 字符集
|
||||||
* @return 被加密后的字符串
|
* @return 被加密后的字符串
|
||||||
* @since 3.0.6
|
* @since 3.0.6
|
||||||
@ -101,8 +102,8 @@ public class Base64 {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* base64编码
|
* base64编码
|
||||||
*
|
*
|
||||||
* @param source 被编码的base64字符串
|
* @param source 被编码的base64字符串
|
||||||
* @param charset 字符集
|
* @param charset 字符集
|
||||||
* @return 被加密后的字符串
|
* @return 被加密后的字符串
|
||||||
*/
|
*/
|
||||||
@ -112,8 +113,8 @@ public class Base64 {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* base64编码,URL安全的
|
* base64编码,URL安全的
|
||||||
*
|
*
|
||||||
* @param source 被编码的base64字符串
|
* @param source 被编码的base64字符串
|
||||||
* @param charset 字符集
|
* @param charset 字符集
|
||||||
* @return 被加密后的字符串
|
* @return 被加密后的字符串
|
||||||
* @since 3.0.6
|
* @since 3.0.6
|
||||||
@ -124,7 +125,7 @@ public class Base64 {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* base64编码
|
* base64编码
|
||||||
*
|
*
|
||||||
* @param source 被编码的base64字符串
|
* @param source 被编码的base64字符串
|
||||||
* @return 被加密后的字符串
|
* @return 被加密后的字符串
|
||||||
*/
|
*/
|
||||||
@ -145,7 +146,7 @@ public class Base64 {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* base64编码,URL安全的
|
* base64编码,URL安全的
|
||||||
*
|
*
|
||||||
* @param source 被编码的base64字符串
|
* @param source 被编码的base64字符串
|
||||||
* @return 被加密后的字符串
|
* @return 被加密后的字符串
|
||||||
* @since 3.0.6
|
* @since 3.0.6
|
||||||
@ -156,7 +157,7 @@ public class Base64 {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* base64编码
|
* base64编码
|
||||||
*
|
*
|
||||||
* @param in 被编码base64的流(一般为图片流或者文件流)
|
* @param in 被编码base64的流(一般为图片流或者文件流)
|
||||||
* @return 被加密后的字符串
|
* @return 被加密后的字符串
|
||||||
* @since 4.0.9
|
* @since 4.0.9
|
||||||
@ -167,7 +168,7 @@ public class Base64 {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* base64编码,URL安全的
|
* base64编码,URL安全的
|
||||||
*
|
*
|
||||||
* @param in 被编码base64的流(一般为图片流或者文件流)
|
* @param in 被编码base64的流(一般为图片流或者文件流)
|
||||||
* @return 被加密后的字符串
|
* @return 被加密后的字符串
|
||||||
* @since 4.0.9
|
* @since 4.0.9
|
||||||
@ -178,7 +179,7 @@ public class Base64 {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* base64编码
|
* base64编码
|
||||||
*
|
*
|
||||||
* @param file 被编码base64的文件
|
* @param file 被编码base64的文件
|
||||||
* @return 被加密后的字符串
|
* @return 被加密后的字符串
|
||||||
* @since 4.0.9
|
* @since 4.0.9
|
||||||
@ -189,7 +190,7 @@ public class Base64 {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* base64编码,URL安全的
|
* base64编码,URL安全的
|
||||||
*
|
*
|
||||||
* @param file 被编码base64的文件
|
* @param file 被编码base64的文件
|
||||||
* @return 被加密后的字符串
|
* @return 被加密后的字符串
|
||||||
* @since 4.0.9
|
* @since 4.0.9
|
||||||
@ -200,11 +201,11 @@ public class Base64 {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* 编码为Base64<br>
|
* 编码为Base64<br>
|
||||||
* 如果isMultiLine为<code>true</code>,则每76个字符一个换行符,否则在一行显示
|
* 如果isMultiLine为{@code true},则每76个字符一个换行符,否则在一行显示
|
||||||
*
|
*
|
||||||
* @param arr 被编码的数组
|
* @param arr 被编码的数组
|
||||||
* @param isMultiLine 在76个char之后是CRLF还是EOF
|
* @param isMultiLine 在76个char之后是CRLF还是EOF
|
||||||
* @param isUrlSafe 是否使用URL安全字符,一般为<code>false</code>
|
* @param isUrlSafe 是否使用URL安全字符,一般为{@code false}
|
||||||
* @return 编码后的bytes
|
* @return 编码后的bytes
|
||||||
*/
|
*/
|
||||||
public static byte[] encode(byte[] arr, boolean isMultiLine, boolean isUrlSafe) {
|
public static byte[] encode(byte[] arr, boolean isMultiLine, boolean isUrlSafe) {
|
||||||
@ -212,9 +213,10 @@ public class Base64 {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// -------------------------------------------------------------------- decode
|
// -------------------------------------------------------------------- decode
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* base64解码
|
* base64解码
|
||||||
*
|
*
|
||||||
* @param source 被解码的base64字符串
|
* @param source 被解码的base64字符串
|
||||||
* @return 被加密后的字符串
|
* @return 被加密后的字符串
|
||||||
* @since 4.3.2
|
* @since 4.3.2
|
||||||
@ -225,7 +227,7 @@ public class Base64 {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* base64解码
|
* base64解码
|
||||||
*
|
*
|
||||||
* @param source 被解码的base64字符串
|
* @param source 被解码的base64字符串
|
||||||
* @return 被加密后的字符串
|
* @return 被加密后的字符串
|
||||||
*/
|
*/
|
||||||
@ -235,8 +237,8 @@ public class Base64 {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* base64解码
|
* base64解码
|
||||||
*
|
*
|
||||||
* @param source 被解码的base64字符串
|
* @param source 被解码的base64字符串
|
||||||
* @param charset 字符集
|
* @param charset 字符集
|
||||||
* @return 被加密后的字符串
|
* @return 被加密后的字符串
|
||||||
*/
|
*/
|
||||||
@ -246,8 +248,8 @@ public class Base64 {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* base64解码
|
* base64解码
|
||||||
*
|
*
|
||||||
* @param source 被解码的base64字符串
|
* @param source 被解码的base64字符串
|
||||||
* @param charset 字符集
|
* @param charset 字符集
|
||||||
* @return 被加密后的字符串
|
* @return 被加密后的字符串
|
||||||
*/
|
*/
|
||||||
@ -257,8 +259,8 @@ public class Base64 {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* base64解码
|
* base64解码
|
||||||
*
|
*
|
||||||
* @param base64 被解码的base64字符串
|
* @param base64 被解码的base64字符串
|
||||||
* @param destFile 目标文件
|
* @param destFile 目标文件
|
||||||
* @return 目标文件
|
* @return 目标文件
|
||||||
* @since 4.0.9
|
* @since 4.0.9
|
||||||
@ -269,9 +271,9 @@ public class Base64 {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* base64解码
|
* base64解码
|
||||||
*
|
*
|
||||||
* @param base64 被解码的base64字符串
|
* @param base64 被解码的base64字符串
|
||||||
* @param out 写出到的流
|
* @param out 写出到的流
|
||||||
* @param isCloseOut 是否关闭输出流
|
* @param isCloseOut 是否关闭输出流
|
||||||
* @since 4.0.9
|
* @since 4.0.9
|
||||||
*/
|
*/
|
||||||
@ -281,7 +283,7 @@ public class Base64 {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* base64解码
|
* base64解码
|
||||||
*
|
*
|
||||||
* @param base64 被解码的base64字符串
|
* @param base64 被解码的base64字符串
|
||||||
* @return 被加密后的字符串
|
* @return 被加密后的字符串
|
||||||
*/
|
*/
|
||||||
@ -291,11 +293,11 @@ public class Base64 {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* base64解码
|
* base64解码
|
||||||
*
|
*
|
||||||
* @param source 被解码的base64字符串
|
* @param source 被解码的base64字符串
|
||||||
* @param charset 字符集
|
* @param charset 字符集
|
||||||
* @return 被加密后的字符串
|
* @return 被加密后的字符串
|
||||||
*@deprecated 编码参数无意义,作废
|
* @deprecated 编码参数无意义,作废
|
||||||
*/
|
*/
|
||||||
@Deprecated
|
@Deprecated
|
||||||
public static byte[] decode(CharSequence source, String charset) {
|
public static byte[] decode(CharSequence source, String charset) {
|
||||||
@ -304,11 +306,11 @@ public class Base64 {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* base64解码
|
* base64解码
|
||||||
*
|
*
|
||||||
* @param source 被解码的base64字符串
|
* @param source 被解码的base64字符串
|
||||||
* @param charset 字符集
|
* @param charset 字符集
|
||||||
* @return 被加密后的字符串
|
* @return 被加密后的字符串
|
||||||
*@deprecated 编码参数无意义,作废
|
* @deprecated 编码参数无意义,作废
|
||||||
*/
|
*/
|
||||||
@Deprecated
|
@Deprecated
|
||||||
public static byte[] decode(CharSequence source, Charset charset) {
|
public static byte[] decode(CharSequence source, Charset charset) {
|
||||||
@ -317,7 +319,7 @@ public class Base64 {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* 解码Base64
|
* 解码Base64
|
||||||
*
|
*
|
||||||
* @param in 输入
|
* @param in 输入
|
||||||
* @return 解码后的bytes
|
* @return 解码后的bytes
|
||||||
*/
|
*/
|
||||||
|
@ -43,7 +43,7 @@ import java.util.zip.Checksum;
|
|||||||
*
|
*
|
||||||
* @author xiaoleilu
|
* @author xiaoleilu
|
||||||
*/
|
*/
|
||||||
public class IoUtil extends NioUtil{
|
public class IoUtil extends NioUtil {
|
||||||
|
|
||||||
// -------------------------------------------------------------------------------------- Copy start
|
// -------------------------------------------------------------------------------------- Copy start
|
||||||
|
|
||||||
@ -330,7 +330,7 @@ public class IoUtil extends NioUtil{
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 从流中读取内容
|
* 从流中读取内容,读取完成后关闭流
|
||||||
*
|
*
|
||||||
* @param in 输入流
|
* @param in 输入流
|
||||||
* @param charsetName 字符集
|
* @param charsetName 字符集
|
||||||
@ -338,7 +338,7 @@ public class IoUtil extends NioUtil{
|
|||||||
* @throws IORuntimeException IO异常
|
* @throws IORuntimeException IO异常
|
||||||
*/
|
*/
|
||||||
public static String read(InputStream in, String charsetName) throws IORuntimeException {
|
public static String read(InputStream in, String charsetName) throws IORuntimeException {
|
||||||
FastByteArrayOutputStream out = read(in);
|
final FastByteArrayOutputStream out = read(in);
|
||||||
return StrUtil.isBlank(charsetName) ? out.toString() : out.toString(charsetName);
|
return StrUtil.isBlank(charsetName) ? out.toString() : out.toString(charsetName);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -362,8 +362,27 @@ public class IoUtil extends NioUtil{
|
|||||||
* @throws IORuntimeException IO异常
|
* @throws IORuntimeException IO异常
|
||||||
*/
|
*/
|
||||||
public static FastByteArrayOutputStream read(InputStream in) throws IORuntimeException {
|
public static FastByteArrayOutputStream read(InputStream in) throws IORuntimeException {
|
||||||
|
return read(in, true);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 从流中读取内容,读到输出流中,读取完毕后并不关闭流
|
||||||
|
*
|
||||||
|
* @param in 输入流
|
||||||
|
* @param isClose 读取完毕后是否关闭流
|
||||||
|
* @return 输出流
|
||||||
|
* @throws IORuntimeException IO异常
|
||||||
|
* @since 5.5.3
|
||||||
|
*/
|
||||||
|
public static FastByteArrayOutputStream read(InputStream in, boolean isClose) throws IORuntimeException {
|
||||||
final FastByteArrayOutputStream out = new FastByteArrayOutputStream();
|
final FastByteArrayOutputStream out = new FastByteArrayOutputStream();
|
||||||
copy(in, out);
|
try {
|
||||||
|
copy(in, out);
|
||||||
|
} finally {
|
||||||
|
if (isClose) {
|
||||||
|
close(in);
|
||||||
|
}
|
||||||
|
}
|
||||||
return out;
|
return out;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -417,26 +436,31 @@ public class IoUtil extends NioUtil{
|
|||||||
/**
|
/**
|
||||||
* 从流中读取bytes
|
* 从流中读取bytes
|
||||||
*
|
*
|
||||||
* @param in {@link InputStream}
|
* @param in {@link InputStream}
|
||||||
* @param isCloseStream 是否关闭输入流
|
* @param isCLose 是否关闭输入流
|
||||||
* @return bytes
|
* @return bytes
|
||||||
* @throws IORuntimeException IO异常
|
* @throws IORuntimeException IO异常
|
||||||
* @since 5.0.4
|
* @since 5.0.4
|
||||||
*/
|
*/
|
||||||
public static byte[] readBytes(InputStream in, boolean isCloseStream) throws IORuntimeException {
|
public static byte[] readBytes(InputStream in, boolean isCLose) throws IORuntimeException {
|
||||||
final InputStream availableStream = toAvailableStream(in);
|
if (in instanceof FileInputStream) {
|
||||||
try{
|
// 文件流的长度是可预见的,此时直接读取效率更高
|
||||||
final int available = availableStream.available();
|
final byte[] result;
|
||||||
if(available > 0){
|
try {
|
||||||
byte[] result = new byte[available];
|
final int available = in.available();
|
||||||
//noinspection ResultOfMethodCallIgnored
|
result = new byte[available];
|
||||||
availableStream.read(result);
|
final int readLength = in.read(result);
|
||||||
return result;
|
if (readLength != available) {
|
||||||
|
throw new IOException(StrUtil.format("File length is [{}] but read [{}]!", available, readLength));
|
||||||
|
}
|
||||||
|
} catch (IOException e) {
|
||||||
|
throw new IORuntimeException(e);
|
||||||
}
|
}
|
||||||
} catch (IOException e){
|
return result;
|
||||||
throw new IORuntimeException(e);
|
|
||||||
}
|
}
|
||||||
return new byte[0];
|
|
||||||
|
// 未知bytes总量的流
|
||||||
|
return read(in, isCLose).toByteArray();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -804,6 +828,7 @@ public class IoUtil extends NioUtil{
|
|||||||
* 将指定{@link InputStream} 转换为{@link InputStream#available()}方法可用的流。<br>
|
* 将指定{@link InputStream} 转换为{@link InputStream#available()}方法可用的流。<br>
|
||||||
* 在Socket通信流中,服务端未返回数据情况下{@link InputStream#available()}方法始终为{@code 0}<br>
|
* 在Socket通信流中,服务端未返回数据情况下{@link InputStream#available()}方法始终为{@code 0}<br>
|
||||||
* 因此,在读取前需要调用{@link InputStream#read()}读取一个字节(未返回会阻塞),一旦读取到了,{@link InputStream#available()}方法就正常了。<br>
|
* 因此,在读取前需要调用{@link InputStream#read()}读取一个字节(未返回会阻塞),一旦读取到了,{@link InputStream#available()}方法就正常了。<br>
|
||||||
|
* 需要注意的是,在网络流中,是按照块来传输的,所以 {@link InputStream#available()} 读取到的并非最终长度,而是此次块的长度。<br>
|
||||||
* 此方法返回对象的规则为:
|
* 此方法返回对象的规则为:
|
||||||
*
|
*
|
||||||
* <ul>
|
* <ul>
|
||||||
@ -816,7 +841,7 @@ public class IoUtil extends NioUtil{
|
|||||||
* @since 5.5.3
|
* @since 5.5.3
|
||||||
*/
|
*/
|
||||||
public static InputStream toAvailableStream(InputStream in) {
|
public static InputStream toAvailableStream(InputStream in) {
|
||||||
if(in instanceof FileInputStream){
|
if (in instanceof FileInputStream) {
|
||||||
// FileInputStream本身支持available方法。
|
// FileInputStream本身支持available方法。
|
||||||
return in;
|
return in;
|
||||||
}
|
}
|
||||||
|
@ -383,6 +383,21 @@ public class PathUtil {
|
|||||||
return IoUtil.getReader(getInputStream(path), charset);
|
return IoUtil.getReader(getInputStream(path), charset);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 读取文件的所有内容为byte数组
|
||||||
|
*
|
||||||
|
* @param path 文件
|
||||||
|
* @return byte数组
|
||||||
|
* @since 5.5.4
|
||||||
|
*/
|
||||||
|
public static byte[] readBytes(Path path){
|
||||||
|
try {
|
||||||
|
return Files.readAllBytes(path);
|
||||||
|
} catch (IOException e) {
|
||||||
|
throw new IORuntimeException(e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 获得输出流
|
* 获得输出流
|
||||||
*
|
*
|
||||||
|
@ -563,6 +563,7 @@ public class ZipUtil {
|
|||||||
* 获取压缩包中的指定文件流
|
* 获取压缩包中的指定文件流
|
||||||
*
|
*
|
||||||
* @param zipFile 压缩文件
|
* @param zipFile 压缩文件
|
||||||
|
* @param charset 编码
|
||||||
* @param path 需要提取文件的文件名或路径
|
* @param path 需要提取文件的文件名或路径
|
||||||
* @return 压缩文件流,如果未找到返回{@code null}
|
* @return 压缩文件流,如果未找到返回{@code null}
|
||||||
* @since 5.5.2
|
* @since 5.5.2
|
||||||
|
14
hutool-core/src/test/java/cn/hutool/core/io/IoUtilTest.java
Normal file
14
hutool-core/src/test/java/cn/hutool/core/io/IoUtilTest.java
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
package cn.hutool.core.io;
|
||||||
|
|
||||||
|
import cn.hutool.core.io.resource.ResourceUtil;
|
||||||
|
import org.junit.Assert;
|
||||||
|
import org.junit.Test;
|
||||||
|
|
||||||
|
public class IoUtilTest {
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void readBytesTest(){
|
||||||
|
final byte[] bytes = IoUtil.readBytes(ResourceUtil.getStream("hutool.jpg"));
|
||||||
|
Assert.assertEquals(22807, bytes.length);
|
||||||
|
}
|
||||||
|
}
|
@ -7,7 +7,7 @@
|
|||||||
<parent>
|
<parent>
|
||||||
<groupId>cn.hutool</groupId>
|
<groupId>cn.hutool</groupId>
|
||||||
<artifactId>hutool-parent</artifactId>
|
<artifactId>hutool-parent</artifactId>
|
||||||
<version>5.5.3</version>
|
<version>5.5.4</version>
|
||||||
</parent>
|
</parent>
|
||||||
|
|
||||||
<artifactId>hutool-cron</artifactId>
|
<artifactId>hutool-cron</artifactId>
|
||||||
|
@ -9,7 +9,7 @@
|
|||||||
<parent>
|
<parent>
|
||||||
<groupId>cn.hutool</groupId>
|
<groupId>cn.hutool</groupId>
|
||||||
<artifactId>hutool-parent</artifactId>
|
<artifactId>hutool-parent</artifactId>
|
||||||
<version>5.5.3</version>
|
<version>5.5.4</version>
|
||||||
</parent>
|
</parent>
|
||||||
|
|
||||||
<artifactId>hutool-crypto</artifactId>
|
<artifactId>hutool-crypto</artifactId>
|
||||||
|
@ -9,7 +9,7 @@
|
|||||||
<parent>
|
<parent>
|
||||||
<groupId>cn.hutool</groupId>
|
<groupId>cn.hutool</groupId>
|
||||||
<artifactId>hutool-parent</artifactId>
|
<artifactId>hutool-parent</artifactId>
|
||||||
<version>5.5.3</version>
|
<version>5.5.4</version>
|
||||||
</parent>
|
</parent>
|
||||||
|
|
||||||
<artifactId>hutool-db</artifactId>
|
<artifactId>hutool-db</artifactId>
|
||||||
|
@ -7,7 +7,7 @@
|
|||||||
<parent>
|
<parent>
|
||||||
<groupId>cn.hutool</groupId>
|
<groupId>cn.hutool</groupId>
|
||||||
<artifactId>hutool-parent</artifactId>
|
<artifactId>hutool-parent</artifactId>
|
||||||
<version>5.5.3</version>
|
<version>5.5.4</version>
|
||||||
</parent>
|
</parent>
|
||||||
|
|
||||||
<artifactId>hutool-dfa</artifactId>
|
<artifactId>hutool-dfa</artifactId>
|
||||||
|
@ -9,7 +9,7 @@
|
|||||||
<parent>
|
<parent>
|
||||||
<groupId>cn.hutool</groupId>
|
<groupId>cn.hutool</groupId>
|
||||||
<artifactId>hutool-parent</artifactId>
|
<artifactId>hutool-parent</artifactId>
|
||||||
<version>5.5.3</version>
|
<version>5.5.4</version>
|
||||||
</parent>
|
</parent>
|
||||||
|
|
||||||
<artifactId>hutool-extra</artifactId>
|
<artifactId>hutool-extra</artifactId>
|
||||||
|
@ -9,7 +9,7 @@
|
|||||||
<parent>
|
<parent>
|
||||||
<groupId>cn.hutool</groupId>
|
<groupId>cn.hutool</groupId>
|
||||||
<artifactId>hutool-parent</artifactId>
|
<artifactId>hutool-parent</artifactId>
|
||||||
<version>5.5.3</version>
|
<version>5.5.4</version>
|
||||||
</parent>
|
</parent>
|
||||||
|
|
||||||
<artifactId>hutool-http</artifactId>
|
<artifactId>hutool-http</artifactId>
|
||||||
|
@ -9,7 +9,7 @@
|
|||||||
<parent>
|
<parent>
|
||||||
<groupId>cn.hutool</groupId>
|
<groupId>cn.hutool</groupId>
|
||||||
<artifactId>hutool-parent</artifactId>
|
<artifactId>hutool-parent</artifactId>
|
||||||
<version>5.5.3</version>
|
<version>5.5.4</version>
|
||||||
</parent>
|
</parent>
|
||||||
|
|
||||||
<artifactId>hutool-json</artifactId>
|
<artifactId>hutool-json</artifactId>
|
||||||
|
@ -9,7 +9,7 @@
|
|||||||
<parent>
|
<parent>
|
||||||
<groupId>cn.hutool</groupId>
|
<groupId>cn.hutool</groupId>
|
||||||
<artifactId>hutool-parent</artifactId>
|
<artifactId>hutool-parent</artifactId>
|
||||||
<version>5.5.3</version>
|
<version>5.5.4</version>
|
||||||
</parent>
|
</parent>
|
||||||
|
|
||||||
<artifactId>hutool-log</artifactId>
|
<artifactId>hutool-log</artifactId>
|
||||||
|
@ -8,7 +8,7 @@
|
|||||||
<parent>
|
<parent>
|
||||||
<groupId>cn.hutool</groupId>
|
<groupId>cn.hutool</groupId>
|
||||||
<artifactId>hutool-parent</artifactId>
|
<artifactId>hutool-parent</artifactId>
|
||||||
<version>5.5.3</version>
|
<version>5.5.4</version>
|
||||||
</parent>
|
</parent>
|
||||||
|
|
||||||
<artifactId>hutool-poi</artifactId>
|
<artifactId>hutool-poi</artifactId>
|
||||||
|
@ -8,7 +8,7 @@
|
|||||||
<parent>
|
<parent>
|
||||||
<groupId>cn.hutool</groupId>
|
<groupId>cn.hutool</groupId>
|
||||||
<artifactId>hutool-parent</artifactId>
|
<artifactId>hutool-parent</artifactId>
|
||||||
<version>5.5.3</version>
|
<version>5.5.4</version>
|
||||||
</parent>
|
</parent>
|
||||||
|
|
||||||
<artifactId>hutool-script</artifactId>
|
<artifactId>hutool-script</artifactId>
|
||||||
|
@ -9,7 +9,7 @@
|
|||||||
<parent>
|
<parent>
|
||||||
<groupId>cn.hutool</groupId>
|
<groupId>cn.hutool</groupId>
|
||||||
<artifactId>hutool-parent</artifactId>
|
<artifactId>hutool-parent</artifactId>
|
||||||
<version>5.5.3</version>
|
<version>5.5.4</version>
|
||||||
</parent>
|
</parent>
|
||||||
|
|
||||||
<artifactId>hutool-setting</artifactId>
|
<artifactId>hutool-setting</artifactId>
|
||||||
|
@ -9,7 +9,7 @@
|
|||||||
<parent>
|
<parent>
|
||||||
<groupId>cn.hutool</groupId>
|
<groupId>cn.hutool</groupId>
|
||||||
<artifactId>hutool-parent</artifactId>
|
<artifactId>hutool-parent</artifactId>
|
||||||
<version>5.5.3</version>
|
<version>5.5.4</version>
|
||||||
</parent>
|
</parent>
|
||||||
|
|
||||||
<artifactId>hutool-socket</artifactId>
|
<artifactId>hutool-socket</artifactId>
|
||||||
|
@ -9,7 +9,7 @@
|
|||||||
<parent>
|
<parent>
|
||||||
<groupId>cn.hutool</groupId>
|
<groupId>cn.hutool</groupId>
|
||||||
<artifactId>hutool-parent</artifactId>
|
<artifactId>hutool-parent</artifactId>
|
||||||
<version>5.5.3</version>
|
<version>5.5.4</version>
|
||||||
</parent>
|
</parent>
|
||||||
|
|
||||||
<artifactId>hutool-system</artifactId>
|
<artifactId>hutool-system</artifactId>
|
||||||
|
2
pom.xml
2
pom.xml
@ -8,7 +8,7 @@
|
|||||||
|
|
||||||
<groupId>cn.hutool</groupId>
|
<groupId>cn.hutool</groupId>
|
||||||
<artifactId>hutool-parent</artifactId>
|
<artifactId>hutool-parent</artifactId>
|
||||||
<version>5.5.3</version>
|
<version>5.5.4</version>
|
||||||
<name>hutool</name>
|
<name>hutool</name>
|
||||||
<description>Hutool是一个小而全的Java工具类库,通过静态方法封装,降低相关API的学习成本,提高工作效率,使Java拥有函数式语言般的优雅,让Java语言也可以“甜甜的”。</description>
|
<description>Hutool是一个小而全的Java工具类库,通过静态方法封装,降低相关API的学习成本,提高工作效率,使Java拥有函数式语言般的优雅,让Java语言也可以“甜甜的”。</description>
|
||||||
<url>https://github.com/looly/hutool</url>
|
<url>https://github.com/looly/hutool</url>
|
||||||
|
Loading…
Reference in New Issue
Block a user