java学习笔记 - JDK9新特性:增强的inputstream

老IO操作实现文件复制

以前的基本操作非常繁琐,需要自己造buffer数组,通过while中的read方法,一次次将inputstream中的数据读到outputstream中,再手动关闭。
复杂重复的操作必将被封装成更高级的api,jdk9中就为我们提供了新的工具transferTo()。

新操作

java9中,InputStream 终于有了一个非常有用的方法:transferTo(),可以把输入流中的所有数据直接自动地复制到输出流中,这是在处理原始数据流时非常常见的一种用法,如下示例。

public class newinputstreamtest {
    @Test
    public void test() {
        ClassLoader cl = this.getClass().getClassLoader();
        try (InputStream is = cl.getResourceAsStream("hello.txt");
             OutputStream os = new FileOutputStream("src\\hello1.txt")) {
            is.transferTo(os); 
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

康康源码

在InputStream.java下,底层的封装和我们以前的操作是一样的

public long transferTo(OutputStream out) throws IOException {
        Objects.requireNonNull(out, "out");
        long transferred = 0;
        byte[] buffer = new byte[DEFAULT_BUFFER_SIZE];
        int read;
        while ((read = this.read(buffer, 0, DEFAULT_BUFFER_SIZE)) >= 0) {
            out.write(buffer, 0, read);
            transferred += read;
        }
        return transferred;
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值