From 2337e3a36798d7234ac8850b121019afb81cc043 Mon Sep 17 00:00:00 2001 From: Looly Date: Sun, 14 Mar 2021 09:42:49 +0800 Subject: [PATCH] add method --- .../main/java/cn/hutool/core/io/IoUtil.java | 40 ++++++++++++++++++- 1 file changed, 39 insertions(+), 1 deletion(-) diff --git a/hutool-core/src/main/java/cn/hutool/core/io/IoUtil.java b/hutool-core/src/main/java/cn/hutool/core/io/IoUtil.java index fe645a3bd..37176fded 100644 --- a/hutool-core/src/main/java/cn/hutool/core/io/IoUtil.java +++ b/hutool-core/src/main/java/cn/hutool/core/io/IoUtil.java @@ -386,7 +386,17 @@ public class IoUtil extends NioUtil { * @since 5.5.3 */ public static FastByteArrayOutputStream read(InputStream in, boolean isClose) throws IORuntimeException { - final FastByteArrayOutputStream out = new FastByteArrayOutputStream(); + final FastByteArrayOutputStream out; + if(in instanceof FileInputStream){ + // 文件流的长度是可预见的,此时直接读取效率更高 + try { + out = new FastByteArrayOutputStream(in.available()); + } catch (IOException e) { + throw new IORuntimeException(e); + } + } else{ + out = new FastByteArrayOutputStream(); + } try { copy(in, out); } finally { @@ -794,9 +804,23 @@ public class IoUtil extends NioUtil { * @since 4.0.10 */ public static BufferedInputStream toBuffered(InputStream in) { + Assert.notNull(in, "InputStream must be not null!"); return (in instanceof BufferedInputStream) ? (BufferedInputStream) in : new BufferedInputStream(in); } + /** + * 转换为{@link BufferedInputStream} + * + * @param in {@link InputStream} + * @param bufferSize buffer size + * @return {@link BufferedInputStream} + * @since 5.6.1 + */ + public static BufferedInputStream toBuffered(InputStream in, int bufferSize) { + Assert.notNull(in, "InputStream must be not null!"); + return (in instanceof BufferedInputStream) ? (BufferedInputStream) in : new BufferedInputStream(in, bufferSize); + } + /** * 转换为{@link BufferedOutputStream} * @@ -805,9 +829,23 @@ public class IoUtil extends NioUtil { * @since 4.0.10 */ public static BufferedOutputStream toBuffered(OutputStream out) { + Assert.notNull(out, "OutputStream must be not null!"); return (out instanceof BufferedOutputStream) ? (BufferedOutputStream) out : new BufferedOutputStream(out); } + /** + * 转换为{@link BufferedOutputStream} + * + * @param out {@link OutputStream} + * @param bufferSize buffer size + * @return {@link BufferedOutputStream} + * @since 5.6.1 + */ + public static BufferedOutputStream toBuffered(OutputStream out, int bufferSize) { + Assert.notNull(out, "OutputStream must be not null!"); + return (out instanceof BufferedOutputStream) ? (BufferedOutputStream) out : new BufferedOutputStream(out, bufferSize); + } + /** * 将{@link InputStream}转换为支持mark标记的流
* 若原流支持mark标记,则返回原流,否则使用{@link BufferedInputStream} 包装之