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

使用FileChannel编写任何InputStream吗?

尹钱青
2023-03-14
问题内容

我可以将任何InputStream写入FileChannel吗?

我正在使用java.nio.channels.FileChannel打开文件并锁定它,然后将InputStream写入输出文件。InputStream可以由另一个文件,URL,套接字或其他任何文件打开。我编写了以下代码:

FileOutputStream outputStream = new FileOutputStream(outputFile);
FileChannel outputChannel = outputStream.getChannel();
FileLock lock = outputChannel.lock();
try {
    outputChannel.transferFrom(???);
} finally {
    lock.release();
    outputChannel.close();
    outputStream.close();
}

但是,outputChannel.transferFrom(…)的第一个参数请求一个ReadableByteChannel对象。由于我使用InputStream作为输入,因此它没有inputStream.getChannel()方法来创建所需的频道。

有什么方法可以从InputStream获取ReadableByteChannel吗?


问题答案:
Channels.newChannel(InputStream in)

http://docs.oracle.com/javase/7/docs/api/java/nio/channels/Channels.html



 类似资料:
  • 问题内容: 我使用下面的方法来写到: 我想知道这是否是使用NIO的正确方法。我已经阅读了一个方法,该方法带有三个参数: ReadableByteChannel src 好仓 长计 在我的情况下,我只有,而没有and和,有什么方法可以使用此方法来创建文件? 此外,对于Image,还有什么更好的方法可以仅从和NIO 创建映像? 任何信息对我来说都是非常有用的。在SO中也有类似的问题,但是我找不到适合我

  • 前面几节课我们先介绍了 Gradle,然后学习了 Groovy 的基础语法,紧接着介绍了 Android 项目中 Gradle 的配置。我们从配置中可以看出 Gradle 的构建都是基于任务(Task) 的,有了前面几节的基础,今天这节课我们来学习一下,怎么样去定义一个 Gradle 的任务(Task) ,以及Task的生命周期。 1. 声明 Task 关于 Task 的声明,我们其实在第三节《构

  • 问题内容: 我有一个要写入HttpServletResponse的InputStream。有这种方法,由于使用byte []而需要花费很长时间 我想知道在速度和效率方面,什么是最好的方法? 问题答案: 只需编写块,而不是先将其完全复制到Java内存中即可。下面的基本示例以10KB的块为单位编写。这样,您最终只能获得10KB的一致内存使用量,而不是完整的内容长度。最终用户也将更快地获取部分内容。 作

  • 问题内容: 我有以下代码来创建和更新xml文件: 这将生成以下xml文件: 问题是:是否可以使用此方法/技术添加CDATA以在下面创建xml代码? 问题答案: 得到它了!我从这个很棒的解决方案改编了代码: 生成的XML文件:

  • 我是Java编程的新手,对IO API感到困惑。对于系统API,读/写整个块比随机字节更快。Java能实现这个特性吗?或者如何在Java IO期间优化性能?我很感激你的任何评论,非常感谢!

  • 主要内容:1 打开一个文件通道,2 从文件通道读取数据,3 将数据写入文件通道,4 关闭文件通道,5 FileChannel的position()方法,6 FileChannel的size()方法,7 FileChannel的truncate()方法,8 FileChannel的force()方法Java NIO FileChannel是连接到文件的通道。使用文件通道,您可以从文件读取数据,也可以将数据写入文件。Java NIO FileChannel类是NIO的一种替代方法,它可以使用标准Ja