Java NIO(四)- Channel之间的数据传输

在FileChannel中:

  • long transferFrom(ReadableByteChannel src, long position, long count)

将字节从给定的可读字节通道传输到此通道的文件中。

        尝试从源通道读取count个字节,并将它们写入该通道的文件中,从给定位置开始。 调用此方法可能会也可能不会传输所有请求的字节; 是否这样做取决于渠道的性质和状态。 如果源通道的剩余字节数少于count个字节,或者如果源通道是非阻塞的并且其输入缓冲区中立即可用的字节数少于count个,则将传输少于请求的字节数

        此方法不会修改此通道的位置。 如果给定的位置大于文件的当前大小,则不会传输任何字节。 如果源通道有一个位置,则从该位置开始读取字节,然后该位置增加读取的字节数

        这种方法可能比从源通道读取并写入该通道的简单循环更有效。 许多操作系统可以将字节直接从源通道传输到文件系统缓存中,而无需实际复制它们。

参数:
        src - 源通道
        position - 文件中传输开始的位置; 必须是非负数
        count - 要传输的最大字节数; 必须是非负数
返回值:
        实际传输的字节数,可能为零

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);
  • long transferTo(long position, long count, WritableByteChannel target)

将字节从此通道的文件传输到给定的可写字节通道。
        尝试从该通道文件中的给定位置开始读取count个字节并将它们写入目标通道。 调用此方法可能会也可能不会传输所有请求的字节; 是否这样做取决于渠道的性质和状态。 如果此通道的文件从给定位置开始包含少于count个字节,或者如果目标通道是非阻塞的并且其输出缓冲区中的空闲字节少于count个字节,则传输的字节数少于请求的字节数。
        此方法不会修改此通道的位置。 如果给定的位置大于文件的当前大小,则不会传输任何字节。 如果目标通道有一个位置,则从该位置开始写入字节,然后该位置增加写入的字节数。
        这种方法可能比从该通道读取并写入目标通道的简单循环更有效。 许多操作系统可以将字节直接从文件系统缓存传输到目标通道,而无需实际复制它们。

参数:
        position - 文件中传输开始的位置; 必须是非负数
        count - 要传输的最大字节数; 必须是非负数
        target - 目标通道
返回值:
        实际传输的字节数,可能为零

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);

猜你喜欢

转载自blog.csdn.net/qq_40100414/article/details/120477187