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被填满。

  • 相关阅读:
    python求pi的方法
    Python:字符串格式化
    Python time模块学习
    开源的PaaS平台
    车牌识别技术实现方式及应用场景
    ASP.NET车辆管理系统
    Spark+Hadoop+IDE环境搭建
    大数据平台技术方案及案例
    主流大数据平台及解决方案对比
    大数据平台架构——通用版
  • 原文地址:https://www.cnblogs.com/hebao0514/p/5334246.html
Copyright © 2011-2022 走看看