`

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

    博客分类:
  • java
 
阅读更多

原文链接:http://ifeve.com/java-nio-channel-to-channel/

作者:Jakob Jenkov   译者:郭蕾     校对:周泰

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

transferFrom()

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

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(position, count, fromChannel);

方法的输入参数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);

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

分享到:
评论

相关推荐

    JavaNIO chm帮助文档

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

    Java NIO系列教程(一) Java NIO 概述

    ### Java NIO 系列教程(一):Java NIO 概述 #### 一、引言 Java NIO(New IO)是Java SE 1.4版本引入的一个新的I/O处理框架,它提供了比传统Java IO包更高效的数据处理方式。NIO的核心在于其三大组件:Channels...

    Java NIO系列教程

    ### Java NIO 系列教程知识点详解 #### Java NIO 概述 Java NIO (New IO) 是从 Java 1.4 开始提供的一种新的 I/O 处理方式,旨在改进传统 Java IO API 的性能并引入更高效的数据处理机制。Java NIO 主要包括三大...

    Java NIO 系列教程1

    NIO允许直接在通道之间进行数据传输,无需经过缓冲区,减少了数据拷贝的开销。 7. **选择器(Selector)** 选择器是NIO中的多路复用机制,一个线程可以通过选择器同时监控多个通道,当通道上有可读、可写或连接...

    Java NIO框架Netty教程.pdf

    4. **通信建立**:客户端与服务器之间的数据传输可以通过ChannelPipeline中的其他处理器来实现。 #### 五、总结 Netty是一个功能强大且高度可定制的网络编程框架。通过本教程,我们不仅了解了Netty的基础概念,还...

    挑战java程序员系列教程

    【Java程序员系列教程】 在Java编程领域,"挑战java程序员系列教程"是一个旨在提升和测试开发者技能的资源。本教程涵盖了Java语言的核心概念以及实际应用,帮助初学者和有经验的程序员深入理解Java编程的各个方面。...

    java nio 详解

    与传统I/O中的流不同,通道可以同时支持读写操作,这使得NIO能够更高效地处理数据传输。 - **主要类型**:Java NIO支持多种类型的通道,如`FileChannel`、`DatagramChannel`、`SocketChannel`等。 - **操作方式**:...

    基于Java NIO的网络服务器Netty生产实例.zip

    Channel是数据传输的通道,支持双向传输;Buffer用于存储数据,提供了更高效的数据读写操作;Selector允许单线程处理多个Channel,提高了并发性能。 2. **Netty框架**:Netty提供了一套完整的网络通信解决方案,...

    nio资料,自学用,多个网文

    文件名称列表中,我们看到有多个以"Master Merlin's new I-O classes - JavaWorld-"开头的文章,这可能是一个系列教程,由Master Merlin这位专家在JavaWorld网站上发表,探讨了Java NIO的新特性。此外,还有"DANCE ...

    032002_【第20章:Java新IO】_通道(Channel)_java_hearing3oc_扣弄你澳大_stoppedh

    `java.hearing3oc`可能是指一个特定的教程系列或者代码示例集合,用于教授Java NIO的相关知识,`扣弄你澳大`这部分可能是误输入或者某种特定的表述,不直接影响知识点的解释。 通道接口包括以下常见的实现类: - *...

    nio入门 IBM教材,pdf格式

    - **参考资料**:本教程提供了一系列的代码示例,每个示例都是完整的 Java 程序的一部分,可以帮助读者更深入地理解 NIO 的各个组件。 - **代码下载与运行**:建议读者下载并运行这些代码示例,以加深对 NIO 概念的...

    Java2 实用教程第4版 课件

    在IO流方面,教程会讲解字节流、字符流、缓冲流和转换流的使用,以及NIO(New IO)框架,这在处理大量数据传输和文件操作时非常关键。此外,教程也会涉及数据库编程,如JDBC(Java Database Connectivity)的使用,...

    java网络教程

    它是一种结构化文本格式,适用于跨平台的数据传输。Java提供了DOM(Document Object Model)、SAX(Simple API for XML)和StAX(Streaming API for XML)等多种解析XML的方法。此外,JAXB(Java Architecture for ...

    JAVA实用教程实验答案

    集合框架是存储和管理数据的重要工具,而IO流则用于数据的输入输出,NIO提供了更高效的数据传输方式。 这些章节的实验答案通常包含示例代码、解释和解决方案,以帮助学习者理解每个概念的实际应用,并解决他们在...

    清华大学JAVA教程

    这部分会讲解流的概念,以及如何使用各种类型的流进行数据传输。 6. **多线程**:Java支持多线程编程,这在并发处理和性能优化中非常关键。教程会讲解线程的创建、同步和通信方法。 7. **网络编程**:Java提供了一...

    java网络编程视频教程

    Java网络编程是Java开发中的重要领域,它涵盖了网络通信的所有基本概念和技术,使得Java应用程序能够通过网络进行数据传输和交互。本视频教程旨在为学习者提供一个全面且深入的Java网络编程指南,无论你是初学者还是...

    java socket 经典教程

    - Java提供`SSLSocket`和`SSLServerSocket`类支持安全的HTTPS通信,利用SSL(Secure Sockets Layer)或其更新版本TLS(Transport Layer Security)加密数据传输。 10. **Socket编程示例** - 基本的Socket编程包括...

    清华大学JAVA教程(重点推荐)

    文件I/O操作在Java中也非常重要,教程会介绍File类、InputStream/OutputStream家族、Reader/Writer系列,以及NIO(New Input/Output)框架,帮助学习者处理各种文件和网络数据传输。 在面向对象编程进阶部分,将会...

    SocketIO-BIO-NIO-AIO.zip

    NIO基于通道(Channels)和缓冲区(Buffers)进行数据传输,可以实现单一线程处理多个客户端连接。当没有数据可读或无空间可写时,I/O操作会立即返回,而不是阻塞。此外,NIO还提供了选择器(Selectors),可以监控...

Global site tag (gtag.js) - Google Analytics