NIO详解 五
来源:互联网 发布:运动keep是什么软件 编辑:程序博客网 时间:2024/06/06 11:43
在Java NIO中,如果两个通道中有一个是FileChannel,那你可以直接将数据从一个channel(译者注:channel中文常译作通道)传输到另外一个channel。
transferFrom()
FileChannel的transferFrom()方法可以将数据从源通道传输到FileChannel中(译者注:这个方法在JDK文档中的解释为将字节从给定的可读取字节通道传输到此通道的文件中)。下面是一个简单的例子:
01
RandomAccessFile fromFile =
new
RandomAccessFile(
"fromFile.txt"
,
"rw"
);
02
FileChannel fromChannel = fromFile.getChannel();
03
04
RandomAccessFile toFile =
new
RandomAccessFile(
"toFile.txt"
,
"rw"
);
05
FileChannel toChannel = toFile.getChannel();
06
07
long
position =
0
;
08
long
count = fromChannel.size();
09
10
toChannel.transferFrom(position, count, fromChannel);
方法的输入参数position表示从position处开始向目标文件写入数据,count表示最多传输的字节数。如果源通道的剩余空间小于 count 个字节,则所传输的字节数要小于请求的字节数。
此外要注意,在SoketChannel的实现中,SocketChannel只会传输此刻准备好的数据(可能不足count字节)。因此,SocketChannel可能不会将请求的所有数据(count个字节)全部传输到FileChannel中。
transferTo()
transferTo()方法将数据从FileChannel传输到其他的channel中。下面是一个简单的例子:
01
RandomAccessFile fromFile =
new
RandomAccessFile(
"fromFile.txt"
,
"rw"
);
02
FileChannel fromChannel = fromFile.getChannel();
03
04
RandomAccessFile toFile =
new
RandomAccessFile(
"toFile.txt"
,
"rw"
);
05
FileChannel toChannel = toFile.getChannel();
06
07
long
position =
0
;
08
long
count = fromChannel.size();
09
10
fromChannel.transferTo(position, count, toChannel);
是不是发现这个例子和前面那个例子特别相似?除了调用方法的FileChannel对象不一样外,其他的都一样。
上面所说的关于SocketChannel的问题在transferTo()方法中同样存在。SocketChannel会一直传输数据直到目标buffer被填满。
阅读全文
0 0
- NIO详解 五
- 【NIO详解】NIO概述
- NIO 详解
- NIO 详解
- nio详解
- NIO详解
- java nio(五)Buffer
- NIO学习笔记五
- Java nio系列五
- Java NIO(五)--Selector
- NIO 学习(五) SocketChannel
- nio/mina(五) 构架研究
- java nio学习(五)
- Java Nio 五、分散/聚集
- Java NIO 学习(五)--DataGramChannel
- Java NIO API详解
- Java NIO API详解
- Java NIO API详解
- android 懒人教程:一步步开发android studio 模板插件
- Android调用摄像头取像
- 3. ROS编程入门—Wall Following
- Top-down design——解决问题的基本法
- android最新版关于.so文件的制作封装与跨平台引用
- NIO详解 五
- 【学习C++】学习C++ -> 构造函数与析构函数
- 爬带登陆名和密码以及验证码的网站
- MyBatis之全局配置文件(Configuration XML)之引入外部配置文件(properties)
- 关于Java异常处理
- hdu-1873-看病要排队
- 【JZOJ 5485】 字符串
- 442. Find All Duplicates in an Array。
- ubuntu下caffe配置matlab接口