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