FileChannel 传输(zero-copy 的基础)


七、Channel-to-Channel传输

    FileChannel类有这两个独有的方法方法:transferFrom()和testTransferTo(),因此Channel-to-Channel传输中通道之一必须是FileChannel。

    直接的通道传输不会更新与某个FileChannel关联的position值。

    对于传输数据来源是一个文件的transferTo()方法,如果position + count的值大于文件的size值,传输会在文件尾的位置终止。

[java]  view plain  copy
  1. /** 
  2.  * 测试TransferFrom() 
  3.  */  
  4. @org.junit.Test  
  5. public void testTransferFrom() throws Exception{  
  6.     /** 
  7.      * 来源相关 
  8.      */  
  9.     RandomAccessFile fromFile = new RandomAccessFile("fromFile.txt""rw");  
  10.     FileChannel fromChannel = fromFile.getChannel();  
  11.   
  12.     /** 
  13.      * 目标相关 
  14.      */  
  15.     RandomAccessFile toFile = new RandomAccessFile("toFile.txt""rw");  
  16.     FileChannel toChannel = toFile.getChannel();  
  17.   
  18.     /** 
  19.      * 传输量 
  20.      */  
  21.     long position = 0;  
  22.     long count = fromChannel.size();  
  23.   
  24.     /** 
  25.      * 执行传输(FileChannel to FileChannel) 
  26.      */  
  27.     toChannel.transferFrom(fromChannel, position, count);  
  28.       
  29.     toChannel.close();  
  30.     toFile.close();  
  31.     fromChannel.close();  
  32.     fromFile.close();  
  33. }  
[java]  view plain  copy
  1. /** 
  2.  * 测试TransferTo() 
  3.  */  
  4. @org.junit.Test  
  5. public void testTransferTo() throws Exception{  
  6.     /** 
  7.      * 来源相关 
  8.      */  
  9.     RandomAccessFile fromFile = new RandomAccessFile("fromFile.txt""rw");  
  10.     FileChannel fromChannel = fromFile.getChannel();  
  11.       
  12.     /** 
  13.      * 目标相关 
  14.      */  
  15.     WritableByteChannel toChannel = Channels.newChannel(System.out);  
  16.       
  17.     /** 
  18.      * 执行传输(文件通道 to 普通通道) 
  19.      */  
  20.     fromChannel.transferTo(0, fromChannel.size(), toChannel);  
  21.     fromChannel.close();  
  22.     fromFile.close();  
  23. }  


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值