`
youyu4
  • 浏览: 441916 次
社区版块
存档分类
最新评论

java NIO 之 通道之间的数据传输

 
阅读更多

java NIO 之 通道之间的数据传输

 

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

 

 

 

transferFrom()

 

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

 

代码如下:

 

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表示从position处开始向目标文件写入数据。
  • count表示最多传输的字节数。如果源通道的剩余空间小于 count 个字节,则所传输的字节数要小于请求的字节数。

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

 

 

 

transferTo()

 

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

 

代码如下:

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

 

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

分享到:
评论

相关推荐

    JavaNIO chm帮助文档

    Java NIO系列教程(五) 通道之间的数据传输 Java NIO系列教程(六) Selector Java NIO系列教程(七) FileChannel Java NIO系列教程(八) SocketChannel Java NIO系列教程(九) ServerSocketChannel Java NIO...

    java NIO.zip

    通道是NIO中的核心概念之一,它提供了从一个数据源(如文件、套接字)到另一个数据源的数据传输路径。Java NIO支持多种类型的通道,包括文件通道(FileChannel)、套接字通道(SocketChannel)和服务器套接字通道...

    java nio 包读取超大数据文件

    - **Buffers**:用来存储数据的对象,是数据传输的载体。 - **Selectors**:多路复用器,用于监控多个Channel的状态变化,支持高效地处理大量并发连接。 - **FileChannel**:用于与文件进行交互的Channel,提供了...

    Java NIO英文高清原版

    7. **管道(Pipe)**:管道是两个线程间进行单向数据传输的通道。一个线程写入数据,另一个线程读取数据。 Netty利用NIO的特性,提供了高度优化的API,使得开发者可以轻松地构建高效、可靠的网络服务。Netty的事件...

    一个java NIO的例子

    1. **通道(Channel)**:通道是数据传输的途径,类似于传统的流。Java NIO提供了多种类型的通道,如FileChannel用于文件操作,SocketChannel和ServerSocketChannel用于网络通信,DatagramChannel用于UDP通信。通道...

    java NIO技巧及原理

    Java NIO(New Input/Output)是Java标准库提供的一种I/O模型,它与传统的 Blocking I/O(IO)相比,提供了更加高效的数据传输方式。在Java NIO中,"新"主要体现在非阻塞和多路复用这两个特性上,这使得NIO更适合于...

    Java NIO Socket基本

    1. **通道(Channel)**:类似于流,但支持双向数据传输。常见的通道类有FileChannel、SocketChannel和ServerSocketChannel等。它们都是`java.nio.channels.Channel`接口的实现类。 2. **缓冲区(Buffer)**:NIO的...

    java nio入门学习,两个pdf

    3. **网络编程**:在网络通信中,NIO可以实现高效的客户端与服务器之间的数据传输,如HTTP、FTP服务器。 4. **多线程协作**:NIO的非阻塞特性使得多线程协作更加容易,减少线程间的上下文切换,提高整体性能。 ...

    Java NIO 中英文版

    - Java NIO支持通道间的直接数据传输,例如可以从一个FileChannel直接将数据传输到SocketChannel,无需经过缓冲区,减少了数据复制的开销。 6. **异步I/O** - Java NIO还提供了异步I/O操作,通过...

    java NIO实例

    Java NIO,全称为Non-Blocking Input/Output(非阻塞输入/输出),是Java从1.4版本开始引入的一种新的I/O模型,它为Java应用程序提供了更高效的数据传输方式。传统的Java I/O模型(BIO)在处理大量并发连接时效率较...

    Java NIO测试示例

    通道是数据传输的载体,类似于传统I/O中的流。Java NIO提供了多种类型的通道,如FileChannel用于文件操作,SocketChannel用于网络通信,DatagramChannel用于UDP通信等。通道可以同时进行读写操作,并且可以与多个...

    JAVA NIO学习网站

    1. **通道(Channel)**:通道是数据传输的载体,类似于流,但通道是双向的,可以同时进行读写操作。Java NIO提供了多种通道实现,如FileChannel、SocketChannel、ServerSocketChannel等,分别对应于文件、套接字和...

    Java NIO实现多个客户端之间的消息互发,客户端与服务器完整代码

    Java NIO(Non-blocking Input/Output)是一种在Java中处理I/O操作的新方式,相比于传统的BIO(Blocking I/O),NIO提供了更高效的数据传输能力,尤其适合于高并发、低延迟的网络应用,如聊天服务器。在这个场景下,...

    java nio示例代码

    NIO的核心组件包括通道、缓冲区和选择器,这些组件共同构建了一种更灵活、更高效的数据传输模型。 1. **通道(Channel)**:通道类似于流,但有所不同。通道可以读取和写入数据,同时它们可以是双向的,也就是说数据...

Global site tag (gtag.js) - Google Analytics