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的数据被传送完整。

  • 相关阅读:
    小心!你被“大数据”锁定了
    深入浅出安卓,怎样从零学好移动开发
    Cocos2d-x3.0触摸
    将Spring源代码导入eclipse步骤
    vertica时间计算SQL语句实例:统计一天内登录的用户
    cocos2d-x 2.2 创建项目
    Codeforces-475B Strongly Connected City
    java socket通信-传输文件图片--传输图片
    listView解决滑动时黑色背景问题
    UVa 10450
  • 原文地址:https://www.cnblogs.com/lay2017/p/12905999.html
Copyright © 2011-2022 走看看