nio FileChannel

// Buffer 常见方法:
// flip(): 写模式转换成读模式
// rewind() :将 position 重置为 0 ,一般用于重复读。
// clear() :清空 buffer ,准备再次被写入 (position 变成 0 , limit 变成 capacity) 。
// compact(): 将未读取的数据拷贝到 buffer 的头部位。
// mark() 、 reset():mark 可以标记一个位置, reset 可以重置到该位置。
// Buffer 常见类型: ByteBuffer 、 MappedByteBuffer 、 CharBuffer 、 DoubleBuffer 、 FloatBuffer 、 IntBuffer 、 LongBuffer 、 ShortBuffer 。
// channel 常见类型 :FileChannel 、 DatagramChannel(UDP) 、 SocketChannel(TCP) 、 ServerSocketChannel(TCP)
// 在本机上面做了个简单的性能测试。我的笔记本性能一般。 ( 具体代码可以见附件。见 nio.sample.filecopy 包下面的例子 ) 以下是参
String source = "d:/b.txt";
String dest = "d:/newnewnewnenwnwnewnewne.txt";
try
{
FileInputStream in = new FileInputStream(new File(source));
FileOutputStream out = new FileOutputStream(new File(dest));
// 获取源文件和目标文件的输入输出流
FileChannel infc = in.getChannel();
FileChannel outfc = out.getChannel();
// 创建缓冲区
ByteBuffer b = ByteBuffer.allocate(1024);
while(true) {
// clear方法重设缓冲区,使它可以接受读入的数据
b.clear();
int r = infc.read(b);
// read方法返回读取的字节数,可能为零,如果该通道已到达流的末尾,则返回-1
if(r == -1) {
break;
}
// flip方法让缓冲区可以将新读入的数据写入另一个通道
// 写模式转换成读模式
b.flip();
outfc.write(b);

}
}
catch (FileNotFoundException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
catch (IOException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值