Java NIO 通道间传输
精华
小牛编辑
184浏览
2023-03-14
1 通道间传输的介绍
在Java NIO中,如果其中一个通道是FileChannel,则可以将数据直接从一个通道传输到另一个通道。该FileChannel包含transferTo() 和 transferFrom() 方法来实现数据传输。
2 transferFrom()方法
FileChannel.transferFrom()方法将数据从源通道传输到 FileChannel。以下是简单的代码示例:
/**
* 小牛知识库网: https://www.xnip.cn
*/
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)。如果源通道少于count字节,则传输更少的字节。
此外,某些 SocketChannel实现可能会SocketChannel 在此处和现在仅传输其内部缓冲区中已准备好的数据-即使SocketChannel以后可能有更多可用数据。因此,可能无法传输请求的整个数据(count从)SocketChannel进入FileChannel。
3 transferTo()方法
transferTo()方法从FileChannel转换为其他通道。以下为简单的代码示例:
/**
* 小牛知识库网: https://www.xnip.cn
*/
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调用该方法的对象。其余部分相同。