zoukankan      html  css  js  c++  java
  • 六、Java NIO 通道之间的数据传输

    所有文章

    https://www.cnblogs.com/lay2017/p/12901123.html

    正文

    在Java NIO当中,如果两个Channel中有一个Channel是FileChannel,你可以直接从一个Channel将数据传到另一个Channel。FileChannel中包含了transferTo和transferFrom方法

    transferFrom

    transferFrom方法将数据从一个Channel中读入到FileChannel中,如

    RandomAccessFile fromFile = new RandomAccessFile("fromFile.txt", "rw");
    FileChannel      fromChannel = fromFile.getChannel();
    
    RandomAccessFile toFile = new RandomAccessFile("toFile.txt", "rw");
    FileChannel      toChannel = toFile.getChannel();
    
    long position = 0;
    long count    = fromChannel.size();
    
    toChannel.transferFrom(fromChannel, position, count);

    这里有两个参数position和count,position指定了从哪里开始读,count指定了读取多少。

    注意:如果是SocketChannel,可能传输的是当前SocketChannel内部的Buffer包含的数据,而不是请求的全部数据。

    transferTo

    transferTo方法将FileChannel的数据传输到其它Channel,如

    RandomAccessFile fromFile = new RandomAccessFile("fromFile.txt", "rw");
    FileChannel      fromChannel = fromFile.getChannel();
    
    RandomAccessFile toFile = new RandomAccessFile("toFile.txt", "rw");
    FileChannel      toChannel = toFile.getChannel();
    
    long position = 0;
    long count    = fromChannel.size();
    
    fromChannel.transferTo(position, count, toChannel);

    和之前的代码很相似,只是调用了不同的方法,数据流向不同而已。

    之前SocketChannel存在的问题,这里也一样存在。transferTo方法将从FileChannel传输数据到SocketChannel,直到SocketChannel内部的Buffer满了以后,就会停止,但不意味着FileChannel的数据被传送完整。

  • 相关阅读:
    面向对象和网络编程补充
    元类与网络编程
    类的继承
    面向过程
    身为一个小白,看到一篇值得看的文章。讲述小白学习python的6个方法。
    2019.08.02 学习整理
    2019.08.01学习整理
    2017.07.31 学习整理
    2019.07.30 学习整理
    2019.7.29学习整理python
  • 原文地址:https://www.cnblogs.com/lay2017/p/12905999.html
Copyright © 2011-2022 走看看