auto commit
This commit is contained in:
parent
89aefa963b
commit
7c9510bebb
|
@ -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();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
Loading…
Reference in New Issue
Block a user