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

 

posted @ 2020-05-17 17:34  __lay  阅读(405)  评论(0编辑  收藏  举报