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

  • 相关阅读:
    边缘计算的爆发为安防全产业带来了怎样的变化?
    Kali卸载AWVS的方法
    C++最简打开网页的方法
    C# 打开指定文件或网址
    C# 如何获取某用户的“我的文档”的目录
    基于Debian的linux系统软件安装命令
    C#的基础知识
    MYSQL语句中的增删改查
    将博客搬至CSDN
    【易懂】斜率DP
  • 原文地址:https://www.cnblogs.com/lay2017/p/12905999.html
Copyright © 2011-2022 走看看