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 快速复制文件的实例:
```java
public class FastCopyFile {
public static void main(String args[]) throws Exception {
String inFile = "file/abc.txt";
String outFile = "file/abc-copy.txt";
// 获得源文件的输入字节流
FileInputStream fin = new FileInputStream(inFile);
// 获取输入字节流的文件通道
FileChannel fcin = fin.getChannel();
// 获取目标文件的输出字节流
FileOutputStream fout = new FileOutputStream(outFile);
// 获取输出字节流的通道
FileChannel fcout = fout.getChannel();
// 为缓冲区分配 1024 个字节
ByteBuffer buffer = ByteBuffer.allocateDirect(1024);
public static void fastCopy(String src, String dist) throws IOException
{
FileInputStream fin = new FileInputStream(src); /* 获得源文件的输入字节流 */
FileChannel fcin = fin.getChannel(); /* 获取输入字节流的文件通道 */
FileOutputStream fout = new FileOutputStream(dist); /* 获取目标文件的输出字节流 */
FileChannel fcout = fout.getChannel(); /* 获取输出字节流的通道 */
ByteBuffer buffer = ByteBuffer.allocateDirect(1024); /* 为缓冲区分配 1024 个字节 */
while (true) {
// 从输入通道中读取数据到缓冲区中
int r = fcin.read(buffer);
// read() 返回 -1 表示 EOF
if (r == -1) {
int r = fcin.read(buffer); /* 从输入通道中读取数据到缓冲区中 */
if (r == -1) { /* read() 返回 -1 表示 EOF */
break;
}
// 切换读写
buffer.flip();
// 把缓冲区的内容写入输出文件中
fcout.write(buffer);
// 清空缓冲区
buffer.clear();
}
buffer.flip(); /* 切换读写 */
fcout.write(buffer); /* 把缓冲区的内容写入输出文件中 */
buffer.clear(); /* 清空缓冲区 */
}
}
```