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系列教程(五) 通道之间的数据传输》 在Java NIO中,如果两个通道中有一个是FileChannel,那你可以直接将数据从一个channel(译者注:ch...
  • yeruby
  • yeruby
  • 2014年08月04日 17:11
  • 423

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

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

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

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

NIO缓冲区(3)之分散(Scatter)/聚集(Gather)、通道之间的数据传输和选择器(Selector)

分散(Scatter)/聚集(Gather) 分散(scatter):从Channel中读操作时将读取的数据写入多个buffer中。即,Channel将从Channel中读取的数据“分散(scatt...

【Web API系列教程】3.5 — 实战:处理数据(创建数据传输对象)

现在,我们的Web API暴露数据库实体给客户端,而客户端接收直接映射到你的数据库表的数据。然而,这不永远都是个好办法。有时候你可以想要改变发送到客户端的数据的形式。例如,你可以想要: 1, 移除...
  • NoMasp
  • NoMasp
  • 2016年02月26日 17:42
  • 2453

Java NIO系列教程(五) FileChannel

Java NIO中的FileChannel是一个连接到文件的通道。可以通过文件通道读写文件。 FileChannel无法设置为非阻塞模式,它总是运行在阻塞模式下。 打开FileCh...

Java NIO系列教程(五) SocketChannel

Java NIO中的SocketChannel是一个连接到TCP网络套接字的通道。可以通过以下2种方式创建SocketChannel: 打开一个SocketChannel并连接到互联网上的某台服...

Java NIO系列教程

  • 2017年11月19日 13:27
  • 177KB
  • 下载

JSon与java之间数据传输的方式

(一)Get方式传参 Get方式传参,是典型的URL传参方式,在URL后面加上变量和所要传递的值即可,这种方式比较简单,下面以示例的形式展示其使用方法   URL:   ...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Java NIO系列教程(五) 通道之间的数据传输
举报原因:
原因补充:

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