Java NIO系列教程(5):通道之间的数据传输
来源:互联网 发布:csgo数据查询 编辑:程序博客网 时间:2024/05/19 19:57
在Java NIO中,如果两个通道中有一个是FileChannel,那你可以直接将数据从一个channel(译者注:channel中文常译作通道)传输到另外一个channel。
transferFrom()
FileChannel的transferFrom()方法可以将数据从源通道传输到FileChannel中(译者注:这个方法在JDK文档中的解释为将字节从给定的可读取字节通道传输到此通道的文件中)。下面是一个简单的例子:
1
2
3
4
5
6
7
8
9
10
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中。下面是一个简单的例子:
1
2
3
4
5
6
7
8
9
10
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被填满。
阅读全文
0 0
- Java NIO系列教程(5):通道之间的数据传输
- Java NIO系列教程(5):通道之间的数据传输
- Java NIO系列教程(5):通道之间的数据传输
- Java NIO系列教程(五) 通道之间的数据传输
- Java NIO系列教程(五) 通道之间的数据传输
- Java NIO系列教程(五) 通道之间的数据传输
- Java NIO系列教程(五) 通道之间的数据传输
- Java NIO系列教程(五) 通道之间的数据传输
- Java NIO系列教程(五) 通道之间的数据传输
- Java NIO系列教程(五) 通道之间的数据传输
- Java NIO系列教程(五) 通道之间的数据传输
- Java NIO系列教程(五) 通道之间的数据传输
- Java NIO系列教程(五) 通道之间的数据传输
- Java NIO系列教程(五) 通道之间的数据传输
- Java NIO系列教程(五) 通道之间的数据传输
- Java NIO系列教程(五) 通道之间的数据传输
- Java NIO系列教程(五) 通道之间的数据传输
- Java NIO系列教程(五) 通道之间的数据传输
- CSS样式引用方式汇总
- 如何正确地使用提示?
- 卸载anaconda
- 读书笔记——《算法导论》第一章
- Maven中SpringMVC+mybatis整合
- Java NIO系列教程(5):通道之间的数据传输
- Vue生命周期
- Python内存数据结构--字典
- 裴波那契数列的递归实现与非递归实现
- Halloween Costumes 区间dp
- 算法基础-使用循环不变式解决插入排序问题
- java-Socket通信,同时进行Json数据的传递
- Hadoop基础教程-第14章 大数据面试笔试题汇总(持续更新)
- caffe2 学习笔记03-从图片如何到mdb数据集