美文网首页技术栈
2019-05-09——Java NIO Channel 数据传

2019-05-09——Java NIO Channel 数据传

作者: 烟雨乱平生 | 来源:发表于2019-05-09 01:19 被阅读0次

在Java NIO中,如果两个通道中有一个是FileChannel,那你可以直接将数据从一个channel传输到另外一个channel。

transferFrom()

FileChannel的transferFrom()方法可以将数据从源通道传输到FileChannel中

public static final void c1(String sourceFile,String targetFile) throws IOException {
    RandomAccessFile source = new RandomAccessFile(sourceFile,"rw");
    FileChannel sourceChannel = source.getChannel();
    RandomAccessFile target = new RandomAccessFile(targetFile,"rw");
    FileChannel targetChannel = target.getChannel();
    sourceChannel.transferTo(0,sourceChannel.size(),targetChannel);
}
  • 第一个参数position:position表示从position处开始向目标文件写入数据
  • 第二个参数count:count表示最多传输的字节数,如果源通道的剩余空间小于 count 个字节,则所传输的字节数要小于请求的字节数。
  • 第三个参数target:target表示要传输的目标Channel

在SoketChannel的实现中,SocketChannel只会传输此刻准备好的数据(可能不足count字节)。因此,SocketChannel可能不会将请求的所有数据(count个字节)全部传输到FileChannel中。

transferTo

transferTo()方法将数据从FileChannel传输到其他的channel中。

public static final void c1(String sourceFile,String targetFile) throws IOException {
    RandomAccessFile source = new RandomAccessFile(sourceFile,"rw");
    FileChannel sourceChannel = source.getChannel();
    RandomAccessFile target = new RandomAccessFile(targetFile,"rw");
    FileChannel targetChannel = target.getChannel();
    targetChannel.transferTo(0,sourceChannel.size(),sourceChannel);
}

上面所说的关于SocketChannel的问题在transferTo()方法中同样存在。SocketChannel会一直传输数据直到目标buffer被填满。

相关文章

网友评论

    本文标题:2019-05-09——Java NIO Channel 数据传

    本文链接:https://www.haomeiwen.com/subject/trtioqtx.html