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

transferFrom()

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

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(position, count, fromChannel);

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

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);

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

原创文章,转载请注明: 转载自并发编程网 – ifeve.com本文链接地址: Java NIO系列教程(五) 通道之间的数据传输

转载于:https://www.cnblogs.com/lukelook/p/11194933.html

Java NIO系列教程(五) 通道之间的数据传输相关推荐

  1. Java NIO系列教程(十 五)Java NIO Path

    转载自  Java NIO系列教程(十 五)Java NIO Path 译文链接  译者:章筱虎 Java的Path接口是Java NIO2 的一部分,是对Java6 和Java7的 NIO的更新.J ...

  2. Java NIO系列教程(十二) Java NIO与IO

    原文地址:http://tutorials.jenkov.com/java-nio/nio-vs-io.html 作者:Jakob Jenkov   译者:郭蕾    校对:方腾飞 当学习了Java ...

  3. Java NIO系列教程(三) Buffer

    2019独角兽企业重金招聘Python工程师标准>>> Java NIO中的Buffer用于和NIO通道进行交互.如你所知,数据是从通道读入缓冲区,从缓冲区写入到通道中的. 缓冲区本 ...

  4. Java NIO系列教程(四) Scatter/Gather

    转载自   Java NIO系列教程(四) Scatter/Gather 译文地址  作者:Jakob Jenkov   译者:郭蕾 Java NIO开始支持scatter/gather,scatte ...

  5. Java NIO系列教程(十一) Pipe

    转载自  Java NIO系列教程(十一) Pipe 原文链接     作者:Jakob Jenkov     译者:黄忠       校对:丁一 Java NIO 管道是2个线程之间的单向数据连接. ...

  6. Java NIO系列教程(十) Java NIO DatagramChannel

    转载自  Java NIO系列教程(十) Java NIO DatagramChannel 译文链接    作者:Jakob Jenkov    译者:郑玉婷     校对:丁一 Java NIO中的 ...

  7. Java NIO 系列教程

    Java NIO(New IO)是从Java 1.4版本开始引入的一个新的IO API,可以替代标准的Java IO API.本系列教程将有助于你学习和理解Java NIO. Java NIO提供了与 ...

  8. Java NIO系列教程(一) Java NIO 概述

    一.阻塞IO与非阻塞IO 阻塞IO: 通常在进行同步I/O操作时,如果读取数据,代码会阻塞直至有 可供读取的数据.同样,写入调用将会阻塞直至数据能够写入.传统的Server/Client模式会基于TP ...

  9. Java NIO 系列教程 转

    Java NIO提供了与标准IO不同的IO工作方式: Channels and Buffers(通道和缓冲区):标准的IO基于字节流和字符流进行操作的,而NIO是基于通道(Channel)和缓冲区(B ...

最新文章

  1. 我们也铺好了新赛道啦!!!
  2. php判断有没有分页,php分页怎么判断已经到了最后一页?
  3. OpenGL 变换Transformations
  4. 人工智能的概念和知识构架_概念验证:玩! 构架
  5. C语言-数据结构-可变长顺序表的删除操作
  6. 苹果发布新版iOS12.3:高通专利功能回归
  7. MySQL 常见索引的使用场景与区别(SQL小技巧)
  8. mysql查询操作的5种子句
  9. ipad服务器未响应怎么办,ipad平板连接Win7系统电脑半天没反应如何解决
  10. 《南溪的目标检测学习笔记》——模型预处理的学习笔记
  11. 【三层】无法直接启动带有“类库输出类型”的项目
  12. oracle 图片数据复制,Oracle如何插入图片数据?
  13. h5打开小程序的方法 总结
  14. zuc算法代码详解_ZUC算法原理及实现过程.doc
  15. C语言/461.(汉明距离)Hamming Distance
  16. 电脑倒计时调用写好的html,HTML网页 倒计时(入门级)
  17. 【Tableau Desktop 企业日常问题20】Tableau怎么折线变虚线?
  18. 运动垫的全球与中国市场2022-2028年:技术、参与者、趋势、市场规模及占有率研究报告
  19. 网页游戏外挂的设计与编写:QQ摩天大楼【三】(登陆准备-信息发送方式)
  20. 如何将flv格式的视频转换为mp4格式

热门文章

  1. 杭电oj1257最少拦截系统—贪心/dp最大递增子序列
  2. Java:如何正确地使用异常详解
  3. 华为平板能运行python吗_我是如何使用华为平板的
  4. 实用的 GitHub 仓库搜索技巧
  5. 的注册表怎么才能删干净_洗鞋怎么清洗才能清洗干净?洗鞋店洗鞋怎么清洗的这么干净? 篇幅一...
  6. 无线轮播android,Android无限轮播Banner的实现
  7. jenkins php build,PHP+Jenkins 持续集成
  8. CNCF 新增两个孵化项目 | 云原生生态周报 Vol. 58
  9. ueditor 不显示工具栏_Python 之Django富文本框Ueditor的使用
  10. cv2 orb 图像拼接_OpenCV 实现多张图像拼接