Java 9新增的有趣方法InputStream.transferTo()

Java 9新增的有趣方法InputStream.transferTo()

  • 2018.2.1
  • 版权声明:本文为博主chszs的原创文章,未经博主允许不得转载。

JDK 9新增了一个有趣的方法,InputStream.transferTo(OutputStream)方法,此方法允许从对象调用方法表示的输入流中轻松传输(复制)字节到提供给该方法的输出流。正如方法的Javadoc注释所述,从该输入流中读取所有字节,并按照读取的顺序将字节写入给定的输出流。此方法可以使Java的有些例行任务变得更容易。

在使用此方法时要注意:

  • 此方法不关闭任何流
  • 强烈建议,如果发生I/O错误,那么输入输出两个流都应该立即关闭。

通常是在try-with-resources语句中实例化源InputStream和目标OutputStream对象。如下面的代码所示:

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;

public class StreamsTransfer {
    public static void main(String[] args) {
        if(args.length < 1) {
            System.out.println("USAGE StreamsTransfer ");
            System.exit(-1);
        }
        final String fileName = args[0];
        try(final InputStream is = new FileInputStream(fileName);
                final OutputStream os = new FileOutputStream(fileName + ".copy")) {
            is.transferTo(os);
        } catch(IOException e) {
            System.out.println("Exception encountered: " + e);
        }
    }
}

通过try-with-resources语句可以确保两个资源的正确回收。上面的代码很简单,实际的应用场景就非常多了,比如可以把InputStream替换成URL.openStream()等等。

你可能感兴趣的:(jdk9,java,9,transferTo,Java,11,计算机算法)