当前位置: 首页 > 面试题库 >

将Java InputStream的内容写入OutputStream的简单方法

解高昂
2023-03-14
问题内容

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

那么,给定an InputStream inan OutputStream 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);


 类似资料:
  • 问题内容: 我将为直接输出到OutputStream的XML解析Java类编写junit测试。例如,将产生类似于写入XmlWriter实例内部的输出流的内容。问题是如何测试这种行为。一种解决方案当然是让OutputStream成为FileOutputStream,然后通过打开写入的文件来读取结果,但这不是很好。 问题答案: 使用ByteArrayOutputStream,然后使用toByteArr

  • 问题内容: 我需要将的内容放入。(希望我有一个替代品,但我没有)这样做的最佳方法是什么? 我不能使用ByteBuffer的方法,因为它可以是只读缓冲区。 在使用此ByteBuffer和具有我可以直接使用的常规数组之间,我也可能会穿插写入OutputStream 。 问题答案: 查看Channels.newChannel(OutputStream)。给定一个OutputStream的通道。使用Wri

  • 问题内容: 在Ruby中,您可以使用读取文件。我在Python中知道的最短和最清晰的是 还有其他方法可以使它更短(最好是一行)并且更具可读性吗? 注意:最初,我将问题表述为“在一行代码中执行此操作”。正如S.Lott所指出的,更短并不一定意味着更具可读性。因此,我改写我的问题只是为了阐明我的意思。我认为Ruby代码更好,更易读,这不一定是因为它是一行还是两行(尽管也很重要),还因为它是一个类方法,

  • 本文向大家介绍nodejs简单读写excel内容的方法示例,包括了nodejs简单读写excel内容的方法示例的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了nodejs简单读写excel内容的方法。分享给大家供大家参考,具体如下: 支持读写Excel的node.js模块 node-xlsx: 基于Node.js解析excel文件数据及生成excel文件,仅支持xlsx格式文件; exce

  • 问题内容: 这段代码曾经很好(在某种意义上,编译器没有抱怨): 从Swift 5.0开始,这会产生警告: 警告:不建议使用“ withUnsafeBytes”:请改用 我试着用所提出的方法,但我似乎无法缠斗到这最终需要。 如何以不推荐的方式编写此函数? 问题答案: 诀窍是使用函数: 尽管此功能适用于Swift 5.0,但显然存在一些问题。参见相关论坛讨论。

  • 因此,当我发出get()时,我得到的是一个dict,dict的“Body”成员是“StreamingBody”类型,并且根据如何使用bot3将S3对象保存到文件,我看到了如何从这个流中分块读取,但我想知道是否有更简单的方法,la boto。