版权声明:本文为博主chszs的原创文章,未经博主允许不得转载。 https://blog.csdn.net/chszs/article/details/79233855
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 <fileName>");
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()等等。