知优码

您现在的位置是:首页 > 开源项目 > 项目经验

项目经验

java将InputStream的内容写OutputStream

2021-01-11项目经验
java将InputStream的内容写OutputStream

一、概述

今天,我发现我找不到使用InputStream将内容写入OutputStream的任何简单方法显然,字节缓冲区代码并不难编写,但是我怀疑我只是缺少了一些可以使我的生活更轻松的东西(并且代码更清晰)。

那么,给定InputStream inOutputStream out,是否有更简单的方法编写以下内容?

byte[] buffer = new byte[1024];
int len = in.read(buffer);
while (len != -1) {
    out.write(buffer, 0, len);
    len = in.read(buffer);
}

二、详解

Java 9

从Java 9开始,InputStream提供了一种transferTo带有以下签名的方法:

public long transferTo(OutputStream out) throws IOException

如文档所述,transferTo将:

从此输入流中读取所有字节,然后按读取顺序将字节写入给定的输出流。返回时,此输入流将在流的末尾。此方法不会关闭任何一个流。

此方法可能会无限期阻止从输入流读取或写入输出流。输入和/或输出流异步关闭或线程在传输期间中断的情况下的行为是高度特定于输入和输出流的,因此未指定

因此,为了编写Java内容的InputStream一个OutputStream,你可以这样写:

input.transferTo(output);