Java NIO系列教程(五) 通道之间的数据传输

原创 2016年06月02日 10:16:27

在Java NIO中,如果两个通道中有一个是FileChannel,那你可以直接将数据从一个channel(译者注:channel中文常译作通道)传输到另外一个channel。

transferFrom()

FileChannel的transferFrom()方法可以将数据从源通道传输到FileChannel中(译者注:这个方法在JDK文档中的解释为将字节从给定的可读取字节通道传输到此通道的文件中)。下面是一个简单的例子:

01 RandomAccessFile fromFile = new RandomAccessFile("fromFile.txt""rw");
02 FileChannel      fromChannel = fromFile.getChannel();
03  
04 RandomAccessFile toFile = new RandomAccessFile("toFile.txt""rw");
05 FileChannel      toChannel = toFile.getChannel();
06  
07 long position = 0;
08 long count = fromChannel.size();
09  
10 toChannel.transferFrom(position, count, fromChannel);

方法的输入参数position表示从position处开始向目标文件写入数据,count表示最多传输的字节数。如果源通道的剩余空间小于 count 个字节,则所传输的字节数要小于请求的字节数。
此外要注意,在SoketChannel的实现中,SocketChannel只会传输此刻准备好的数据(可能不足count字节)。因此,SocketChannel可能不会将请求的所有数据(count个字节)全部传输到FileChannel中。

transferTo()

transferTo()方法将数据从FileChannel传输到其他的channel中。下面是一个简单的例子:

01 RandomAccessFile fromFile = new RandomAccessFile("fromFile.txt""rw");
02 FileChannel      fromChannel = fromFile.getChannel();
03  
04 RandomAccessFile toFile = new RandomAccessFile("toFile.txt""rw");
05 FileChannel      toChannel = toFile.getChannel();
06  
07 long position = 0;
08 long count = fromChannel.size();
09  
10 fromChannel.transferTo(position, count, toChannel);

是不是发现这个例子和前面那个例子特别相似?除了调用方法的FileChannel对象不一样外,其他的都一样。
上面所说的关于SocketChannel的问题在transferTo()方法中同样存在。SocketChannel会一直传输数据直到目标buffer被填满。

版权声明:本文为博主原创文章,未经博主允许不得转载。

Java NIO系列教程(五) 通道之间的数据传输

在Java NIO中,如果两个通道中有一个是FileChannel,那你可以直接将数据从一个channel(译者注:channel中文常译作通道)传输到另外一个channel。 transfer...
  • Flood_Dragon
  • Flood_Dragon
  • 2013年09月05日 23:24
  • 577

五、Nio之通道之间的数据传输

在 Java NIO 中,如果两个通道中有一个是 FileChannel,那你可以直接将数据从一个 channel(译者注:channel 中文常译作通道)传输到另外一个 channel。 tra...
  • kris234seth
  • kris234seth
  • 2016年11月17日 15:37
  • 207

Java NIO系列教程(三) Scatter/Gather 通道之间的数据传输

Java NIO开始支持scatter/gather,scatter/gather用于描述从Channel(译者注:Channel在中文经常翻译为通道)中读取或者写入到Channel的操作。 分散(...
  • z742182637
  • z742182637
  • 2017年03月27日 09:32
  • 298

Java NIO系列教程(5):通道之间的数据传输

 在Java NIO中,如果两个通道中有一个是FileChannel,那你可以直接将数据从一个channel(译者注:channel中文常译作通道)传输到另外一个channel。 transf...
  • zhangyuan19880606
  • zhangyuan19880606
  • 2016年04月24日 17:04
  • 114

Java NIO 05=====通道之间的数据传输

在Java NIO中,如果两个通道中有一个是FileChannel,那你可以直接将数据从一个channel(译者注:channel中文常译作通道)传输到另外一个channel。...
  • DERRANTCM
  • DERRANTCM
  • 2015年05月31日 19:40
  • 729

Java NIO教程(五) 通道之间的数据传输

Java NIO教程(五) 通道之间的数据传输 在Java NIO中,如果两个通道中有一个是FileChannel,那你可以直接将数据从一个channel(译者注:channel中文常译作通道...
  • maxichu
  • maxichu
  • 2015年11月13日 16:48
  • 263

java NIO教程(五)--通道之间的数据传输

在Java NIO中,如果两个通道中有一个是FileChannel,那你可以直接将数据从一个channel(译者注:channel中文常译作通道)传输到另外一个channel。 transferFr...
  • xiangycsdn
  • xiangycsdn
  • 2015年12月27日 18:26
  • 74

Java NIO怎么理解通道和非阻塞?

nio引入了buffer、channel、selector等概念。 通道相当于之前的I/O流。 “通道”太抽象了。java解释不清的东西只能看它底层是怎么解释的——操作系统的I/O控制,通道控制方...
  • woorh
  • woorh
  • 2013年01月29日 21:08
  • 3531

Java NIO深入理解通道之间数据传输

在Java NIO中,如果两个通道中有一个是FileChannel,那你可以直接将数据从一个channel(通道)传输到另外一个channel。 通道之间数据传输方法:transferFrom(),...
  • yhl_jxy
  • yhl_jxy
  • 2018年02月16日 23:08
  • 42

Java NIO系列4:通道和选择器

前言今天加班回来,终于有时间继续更新NIO的文章了。在前一篇文章我们讲解了缓冲区的知识,并通过代码演示了如何使用缓冲区的API完成一些操作。这里要讲的通道于缓冲区关系密切,简单来说,缓冲区是填充数据的...
  • u011116672
  • u011116672
  • 2016年05月28日 23:21
  • 9713
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Java NIO系列教程(五) 通道之间的数据传输
举报原因:
原因补充:

(最多只允许输入30个字)