博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Java NIO Channel to Channel Transfers(6)
阅读量:3752 次
发布时间:2019-05-22

本文共 1407 字,大约阅读时间需要 4 分钟。

NIO 通道之间数据传输

  • transferFrom()
  • transferTo()

假如两个Channel中有一个是FileChannel,NIO允许你将数据从其中一个Channel直接传输到另一个Channel。FileChannel有TransferTo() 、TransferFrom()的API可供使用。

TransferFrom()

FileChannel.transfrom():将数据从一个源Channel(比如SocketChannel)传输入一个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();// 这里是toChanneltoChannel.transferFrom(fromChannel, position, count);

position、count参数说明了从position处开始向目标文件写入数据,count表示最多传输的字节数。如果源Channel的剩余字节数少于count,传输的字节数就少于请求字节数。

此外,一些SocketChannel实现可能只传输buffer中当前已准备好的数据()。因此,SocketChannel可能不会把请求数量(count)的所有数据从SocketChannel传输到FileChannel。

transferTo()

transferTo() 将FileChannel的数据传输到其他Channel中(比如SocketChannel)。下面是示例:

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();// 这里是fromChannelfromChannel.transferTo(position, count, toChannel);

注意下这个例子和上面那个例子有何不同。真正不同的只是方法的调用方而已。其他都相同。

上面说的那个SocketChannel的问题对于同一个transferTo()方法也存在。SocketChannel实现可能会一直从FileChannel传输触发数据直到发送的buffer是空的,然后才停止。

转载地址:http://yznsn.baihongyu.com/

你可能感兴趣的文章
简述128陷阱
查看>>
在spring boot项目中修改包名要注意的一些问题
查看>>
编写类实现从后台向前台返回所要求的数据
查看>>
spring boot的学习(1.创建一个初始的spring boot项目)
查看>>
Python的入门学习
查看>>
⑤mpvue 小程序框架 :初始化项目 分析项目结构
查看>>
⑦mpvue Flyio实现前后台交互
查看>>
操作系统:Java模拟CPU调度算法(非抢占短进程优先、可抢占优先权调度、多级反馈队列调度)
查看>>
【前端】在页面中还原英雄联盟客户端?
查看>>
【前端】Vue 纯干货 基础知识分享!
查看>>
3.1servlet入门和MVC模型
查看>>
3.2servlet功能和会话技术
查看>>
泛型详解
查看>>
集合案例:斗地主
查看>>
软件测试进阶篇
查看>>
二叉搜索树的实现
查看>>
连续最大和
查看>>
不要二题目
查看>>
合法括号序列判断
查看>>
两种排序方法
查看>>