auto commit

This commit is contained in:
CyC2018 2018-06-27 19:01:23 +08:00
parent 89aefa963b
commit 7c9510bebb

View File

@ -323,34 +323,21 @@ I/O 包和 NIO 已经很好地集成了java.io.\* 已经以 NIO 为基础重
以下展示了使用 NIO 快速复制文件的实例: 以下展示了使用 NIO 快速复制文件的实例:
```java ```java
public class FastCopyFile { public static void fastCopy(String src, String dist) throws IOException
public static void main(String args[]) throws Exception { {
String inFile = "file/abc.txt"; FileInputStream fin = new FileInputStream(src); /* 获得源文件的输入字节流 */
String outFile = "file/abc-copy.txt"; FileChannel fcin = fin.getChannel(); /* 获取输入字节流的文件通道 */
// 获得源文件的输入字节流 FileOutputStream fout = new FileOutputStream(dist); /* 获取目标文件的输出字节流 */
FileInputStream fin = new FileInputStream(inFile); FileChannel fcout = fout.getChannel(); /* 获取输出字节流的通道 */
// 获取输入字节流的文件通道 ByteBuffer buffer = ByteBuffer.allocateDirect(1024); /* 为缓冲区分配 1024 个字节 */
FileChannel fcin = fin.getChannel();
// 获取目标文件的输出字节流
FileOutputStream fout = new FileOutputStream(outFile);
// 获取输出字节流的通道
FileChannel fcout = fout.getChannel();
// 为缓冲区分配 1024 个字节
ByteBuffer buffer = ByteBuffer.allocateDirect(1024);
while (true) { while (true) {
// 从输入通道中读取数据到缓冲区中 int r = fcin.read(buffer); /* 从输入通道中读取数据到缓冲区中 */
int r = fcin.read(buffer); if (r == -1) { /* read() 返回 -1 表示 EOF */
// read() 返回 -1 表示 EOF
if (r == -1) {
break; break;
} }
// 切换读写 buffer.flip(); /* 切换读写 */
buffer.flip(); fcout.write(buffer); /* 把缓冲区的内容写入输出文件中 */
// 把缓冲区的内容写入输出文件中 buffer.clear(); /* 清空缓冲区 */
fcout.write(buffer);
// 清空缓冲区
buffer.clear();
}
} }
} }
``` ```