老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;
}
}