在JDK 9中将InputStream传输到OutputStream

可以使Java中的有时例行任务变得更加轻松的JDK 9的次要补充之一是方法InputStream.transferTo(OutputStream)的增加 。 顾名思义,此方法允许将字节轻松地从调用该方法的对象表示的输入流传输(复制)到提供给该方法的输出流。 或者,如该方法的Javadoc注释所述, InputStream.transferTo(OutputStream) “从此输入流中读取所有字节,并按读取顺序将这些字节写入给定的输出流中。”

关于JavaDoc的更多评论,包括以下语句的InputStream.transferTo(OutputStream)方法:

  • “此方法不会关闭任何一个流。”
  • “强烈建议在发生I / O错误时立即关闭两个流。”

处理上面显示的两个问题的最简单方法是在InputStream.transferTo(OutputStream)方法的Javadoc注释中表达的方法是在try-with-resources语句中实例化源InputStream和目标OutputStream 。 下一个代码清单中显示了一个示例。

StreamsTransfer.java :使用InputStream.transferTo(OutputStream)

package dustin.examples.iostreams;import static java.lang.System.out;import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;/*** Demonstrate InputStream.transferTo(OutputStream) added in JDK 9.*/
public class StreamsTransfer
{/*** Demonstrate use of InputStream.transferTo(OutputStream) using* FileInputStream and FileOutputStream implementations of* InputStream and OutputStream respectively.** @param arguments Command-line arguments: one expected,*    which is the name of the input file.*/public static void main(final String[] arguments){if (arguments.length < 1){out.println("USAGE StreamsTransfer <fileName>");System.exit(-1);}final String fileName = arguments[0];try (final InputStream is = new FileInputStream(fileName);final OutputStream os = new FileOutputStream(fileName + ".copy")){is.transferTo(os);}catch (IOException exception){out.println("Exception encountered: " + exception);}}
}

上面的代码清单中的try-with-resources语句打开两个资源( InputStreamOutputStream实例),因此确保始终关闭它们。 本示例中使用的InputStream实现是FileInputStream ,本示例中使用的OutputStream实现是FileOutputStream 。

尽管可以使用不同的机制 (例如,使用重载的Files.copy方法之一) 在Java中更轻松地完成上述示例中实现的文件复制,但是上面代码清单中所示的方法仅用于简单说明,并且可以可以归纳为InputStreamOutputStream任何实现。 再举一个例子,Josh Bloch在Effective Java ( 第三版 InputStream.transferTo(OutputStream)的第59项中讨论了InputStream.transferTo(OutputStream)用法,其插图使用URL.openStream()作为InputStream以及System.out作为OutputStream

执行上面的示例时,它将把提供的文件复制到另一个具有相同名称的文件,并在新文件名的末尾添加“ .copy ”。 即使两个I / O流在处理任何一个过程中发生异常,也会关闭。

在Java开发社区中,似乎普遍欢迎添加InputStream.transferTo(OutputStream) 。 Ali Dehghani在“ Java 9的最低有效位 ”一文中讨论了这种方法。 此方法还包含在“ Java 9中的5件事变得更容易 ”一文中(还指出,现在可以在try-with-resources中有效地使用final变量,而不是像我在示例中那样明确地将它们定为final )。 Reddit / r / java子redditit包含一个有趣的讨论,标题为“ JDK 9中的新方法:InputStream.transferTo(OutputStream)” 。

不是所有人都喜欢在JDK 9中添加InputStream.transferTo(OutputStream) 。在“ Java 9:好的,坏的和专用的接口方法 ”一文中, Yegor Bugayenko将InputStream描述为“已经过时的类”,并且写道InputStream.transferTo(OutputStream)是“年轻的OOP程序员犯的最典型的错误之一:他们使接口变大了……仅仅是因为他们需要更多的功能。” 他还指出, IOUtils.copy(InputStream,OutputStream)已通过Apache Commons提供 。

在JDK 9中添加InputStream.transferTo(OutputStream)方法是对标准JDK的一个很小但有时非常方便的添加,它特别易于与try-with-resources语句结合使用。

翻译自: https://www.javacodegeeks.com/2018/01/transferring-inputstream-outputstream-jdk-9.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/347481.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

全国计算机三级数据库技术选择题,全国计算机三级《数据库技术》选择题训练2016...

1.使用DECLARE命令定义数组后&#xff0c;各数组元素在没有赋值之前的数据类型是(d)A.无类型B.字符型C.数值型D.逻辑型2.顺序执行下列命令后&#xff0c;屏幕最后显示的结果是(b)a"9"b"a"?TYPE(&"b")A.NB.CC.DD.U3.用DIMENSLONa(2&#xff…

嵌套套娃,MySQL子查询,单行与多行子查询,相关和不相关(关联)子查询,完整详细可收藏

文章目录1、需求分析与问题解决2、单行子查询3、多行子查询4、相关子查询5、抛一个思考题子查询指一个查询语句嵌套在另一个查询语句内部的查询&#xff0c;这个特性从MySQL 4.1开始引入。SQL 中子查询的使用大大增强了 SELECT 查询的能力&#xff0c;因为很多时候查询需要从结…

键盘连接在计算机的,技巧:如何在计算机键盘上输入连字符和破折号?

文字/连字符在哪里&#xff0c;我该如何输入&#xff1f;例如&#xff0c;某些英语单词中有连字符&#xff0c;例如高层。当然&#xff0c;有时是否有连字符都没有关系&#xff0c;并且不影响其含义。但是&#xff0c;有时有必要。例如&#xff0c;单词在行尾的位置是不够的。您…

删库跑路?不可回滚?MySQL创建和管理表,修改清空表,MySQL8新特性DDL原子化,完整详细可收藏

文章目录1、基础知识2、创建和管理数据库3、创建表4、修改表5、重命名表6、 删除表7、清空表8、MySQL8新特性—DDL的原子化1、基础知识 1.1 一条数据存储的过程 存储数据是处理数据的第一步 。只有正确地把数据存储起来&#xff0c;我们才能进行有效的处理和分析。否则&#x…

目前市场上主流服务器厂商,目前市场上流行的串口服务器有哪些功能

随着物联网的兴起&#xff0c;转接器市场也日趋发展。串口服务器&#xff0c;也就是串口转以太网透明传输模块也越来越多地被使用在门禁、一卡通安防等领域。对于以太网解决方案可归纳以下&#xff1a;1)ARM网络控制器芯片。如ARM7DM9000&#xff0c;网络控制器还可以用Realtek…

不全?MySQL数据类型精讲,定点日期枚举文本字符串,json二进制,空间,选择建议,完整详细可收藏

文章目录1. MySQL中的数据类型2. 整数类型3. 浮点数类型4. 定点数类型5. 位类型&#xff1a;BIT6. 日期与时间类型7. 文本字符串类型8. ENUM类型9. SET类型10. 二进制字符串类型11. JSON 类型12. 空间类型13. 选择建议1. MySQL中的数据类型 常见数据类型的属性&#xff0c;如下…

maven jacoco_使用JaCoCo Maven插件为单元和集成测试创建代码覆盖率报告

maven jacoco当我开始使用Java 7时&#xff0c;我立即注意到Cobertura Maven插件不支持它 。 这对我来说是个大问题&#xff0c;因为我每天都使用代码覆盖率报告。 我做了一些研究&#xff0c;发现了JaCoCo代码覆盖库 。 看起来很有趣&#xff0c;我决定试一试。 问题在于配置…

小程序服务器api接口,百度智能小程序API 开放接口

登录智能小程序可以通过百度官方提供的登录能力方便地获取百度提供的用户身份标识&#xff0c;快速建立智能小程序内的用户体系。流程说明1、调用 swan.login() 获取 临时登录凭证code &#xff0c;并回传到开发者服务器。2、开发者服务器以 code 换取 session_key。3、调用 sw…

约束,MySQL约束,非空默认值,主键外键唯一自增,完整详细可收藏

文章目录1. 约束(constraint)概述2. 非空约束3. 唯一性约束4. PRIMARY KEY 约束5. 自增列&#xff1a;AUTO_INCREMENT6. FOREIGN KEY 约束7. CHECK 约束8. DEFAULT约束9. 面试1. 约束(constraint)概述 1.1 为什么需要约束 数据完整性&#xff08;Data Integrity&#xff09;是…

如何测试Java类的线程安全性

我在最近的一次网络研讨会中谈到了这个问题&#xff0c;现在是时候以书面形式进行解释了。 线程安全是Java等语言/平台中类的重要品质&#xff0c;我们经常在线程之间共享对象。 缺乏线程安全性导致的问题很难调试&#xff0c;因为它们是零星的并且几乎不可能有意复制。 您如何…

阴阳师服务器维护稍后,《阴阳师》手游3月20日维护更新公告

亲爱的阴阳师大人&#xff1a;为了给大家带来更好的游戏体验&#xff0c;服务器将于3月20日(周三)早上6:30-9:00进行停服维护&#xff0c;如未能按时完成&#xff0c;则开服时间将会顺延。具体更新详情请留意稍后更新公告&#xff0c;或例行维护结束后至游戏登录界面查看。例行…

争议?MySQL存储过程与函数,封装,体,完整详细可收藏

文章目录1. 存储过程概述2. 创建存储过程3. 调用存储过程4. 存储函数的使用5. 存储过程和函数的查看、修改、删除6. 关于存储过程使用的争议MySQL从5.0版本开始支持存储过程和函数。存储过程和函数能够将复杂的SQL逻辑封装在一起&#xff0c;应用程序无须关注存储过程和函数内部…

梦幻,MySQL视图,虚实表,完整详细可收藏

文章目录1. 数据库对象2. 视图概述3. 创建视图4. 查看视图5. 更新视图的数据6. 修改、删除视图7. 总结1. 数据库对象 2. 视图概述 2.1 为什么使用视图&#xff1f; 视图一方面可以帮我们使用表的一部分而不是所有的表&#xff0c;另一方面也可以针对不同的用户制定不同的查询视…

php cdi_DI / CDI –基础

php cdi简介&#xff08;DI / CDI基础&#xff09; 首先&#xff0c;我认为对此会有一些困惑&#xff0c;但事实是&#xff0c;它们是相同的–不同之处在于用法及其用途。 DI&#xff08;依赖项注入&#xff09;是一个通用术语–此功能基本上是在任何应用程序上进行Bean发现和…

一条一条来,MySQL变量、流程控制与游标,完整详细可收藏

前些天发现了十分不错的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;没有广告&#xff0c;分享给大家&#xff0c;大家可以自行看看。&#xff08;点击跳转人工智能学习资料&#xff09; 文章目录1. 变量2. 定义条件与处理程序3. 流程控制4. 游标MyS…

ajax渲染后的点击事件,在ajax调用后渲染“喜欢”按钮

有几个问题类似于我的堆栈&#xff0c;但没有一个回答我的问题&#xff0c;所以…ajax调用返回用于创建类似按钮的标准HTML代码&#xff1a;当使用’inspect element’查看时&#xff0c;这个html确实显示在源中&#xff0c;但没有呈现&#xff0c;即按钮应该是空白的空格。有没…

无服务器:SLAppForge Sigma入门

&#xff01; Cmere。 寻找某事&#xff1f; 无服务器&#xff0c;是吗&#xff1f; 在上面。 进入海峡&#xff0c;在“ Sigma”标志处右转。 &#xff08;嗯&#xff0c;还不要怪我们&#xff1b;至少我们认为这很容易&#xff01;&#xff09; 我们的梦想目标之一是与S…

pks系统如何添加服务器,pks服务器的上电步骤.pdf

PKS 服务器的上电步骤一、服务器的安装与设置服务器为 DELL PowerEdge 2900 &#xff0c;配置为内存 2GB (2x1GB), 667MHz, ECC,Single-Rank &#xff0c;CPU 为 Quad-Core Intel Xeon Pro E5405 2GHz, 12MB Cache,1333MHz FSB &#xff0c;硬盘 2 个&#xff1a; 146GB, 3.5&q…

自动,MySQL触发器,完整详细可收藏

前些天发现了十分不错的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;没有广告&#xff0c;分享给大家&#xff0c;大家可以自行看看。&#xff08;点击跳转人工智能学习资料&#xff09; 文章目录1. 触发器概述2. 触发器的创建3. 查看、删除触发器4.…

统计信号处理基础 - 估计与检测理论 估计部分习题3.7公式推导

统计信号处理基础 - 估计与检测理论 估计部分习题3.7公式推导题目证明结论得证题目 相信学习信号检测与估计的童鞋们肯定看到过Steven M.Kay大牛的书&#xff0c;非常厚的一本&#xff0c;不得不说&#xff0c;人家的书就是写得好&#xff0c;浅显易懂&#xff08;当然是要从头…