zoukankan      html  css  js  c++  java
  • Java基础知识强化之IO流笔记76:NIO之 Channel(通道)之间的数据传输

    1. 在Java NIO中,如果两个通道中有一个是FileChannel,那你可以直接将数据从一个channel(译者注:channel中文常译作通道)传输到另外一个channel。

    (1)transferFrom():

      FileChannel的 transferFrom()方法可以将数据源通道 传输到 FileChannel中(译者注:这个方法在JDK文档中的解释为将字节从给定的可读取字节通道传输到此通道的文件中)。下面是一个简单的例子:

     1 RandomAccessFile fromFile = new RandomAccessFile("fromFile.txt", "rw");
     2 FileChannel   fromChannel = fromFile.getChannel();
     3 
     4 RandomAccessFile toFile = new RandomAccessFile("toFile.txt", "rw");
     5 FileChannel  toChannel = toFile.getChannel();
     6 
     7 long position = 0;
     8 long count = fromChannel.size();
     9 
    10 toChannel.transferFrom(position, count, fromChannel);

      方法的输入参数position表示从position处开始向目标文件写入数据count表示最多传输的字节数。如果源通道的剩余空间小于 count 个字节,则所传输的字节数要小于请求的字节数
      此外要注意,在SoketChannel的实现中,SocketChannel只会传输此刻准备好的数据(可能不足count字节)。因此,SocketChannel可能不会将请求的所有数据(count个字节)全部传输到FileChannel中。

    (2)transferTo():

    transferTo()方法将数据从 FileChannel 传输 到其他的channel中。下面是一个简单的例子:

     1 RandomAccessFile fromFile = new RandomAccessFile("fromFile.txt", "rw");
     2 FileChannel      fromChannel = fromFile.getChannel();
     3 
     4 RandomAccessFile toFile = new RandomAccessFile("toFile.txt", "rw");
     5 FileChannel      toChannel = toFile.getChannel();
     6 
     7 long position = 0;
     8 long count = fromChannel.size();
     9 
    10 fromChannel.transferTo(position, count, toChannel);

      是不是发现这个例子和前面那个例子特别相似?除了调用方法的FileChannel对象不一样外,其他的都一样。
      上面所说的关于SocketChannel的问题在transferTo()方法中同样存在。SocketChannel会一直传输数据直到目标buffer被填满。

  • 相关阅读:
    LoadRunner出现error问题及解决方法总结
    使用cookie绕过登录进行性能测试
    性能测试中如何定位性能瓶颈
    关于函数lr_eval_string
    Loadrunner脚本编程(1)大体思路
    Myeclipse 9集成 TestNG
    Page Speed
    Android problems
    10204_vista_w2k8_x64_production_db oracle installed on windows7 64bits
    Don't Live with Broken windows——不能容忍破窗户
  • 原文地址:https://www.cnblogs.com/hebao0514/p/5334246.html
Copyright © 2011-2022 走看看