`

翻译-【Java NIO学习系列】Java NIO Channel

 
阅读更多

    原文http://tutorials.jenkov.com/java-nio/channels.html

 

     Java NIO通道(Channel)与流(streams)有些类似,但还是有所差异:

    (1):通道你既可以写也可以读,而流只能一种方式(读或者写)。

    (2):通道可以异步的读写。

    (3):通道只能从缓冲区里进行读写。

    如上所述,你可以从通道里将数据读入到缓冲区里,也可以从缓冲区里将数据写入到通道。图示如下:

   

    Channel Implementations(通道的实现)

    Java NIO最重要的通道实现如下:

  •  FileChannel
  •  DatagramChannel
  • SocketChannel
  • ServerSocketChannel 

    FileChannel从文件里读取数据

    DatagramChannel可以通过网络协议UDP进行读写

    SocketChannel可以通过网络协议TCP进行读写

    ServerSocketChannel 允许你监听进来的TCP连接,例如web服务。每个进来的连接将会创建一个SocketChannel。
     Basic Channel Example(基础通道实例)

    

 RandomAccessFile aFile = new RandomAccessFile("data/nio-data.txt", "rw");
    FileChannel inChannel = aFile.getChannel();

    ByteBuffer buf = ByteBuffer.allocate(48);

    int bytesRead = inChannel.read(buf);
    while (bytesRead != -1) {

      System.out.println("Read " + bytesRead);
      buf.flip();

      while(buf.hasRemaining()){
          System.out.print((char) buf.get());
      }

      buf.clear();
      bytesRead = inChannel.read(buf);
    }
    aFile.close();

 

注意buf.flip()调用。首先你将数据读入到缓冲区(buffer),然后切换到读模式。你就可以读取出数据。我将在下一章缓冲区(buffer)做更详细的描述。

  • 大小: 9 KB
  • 大小: 15.8 KB
0
1
分享到:
评论

相关推荐

    Java NIO实战开发多人聊天室

    05-Java NIO-Channel-FileChannel详解(一).mp4 06-Java NIO-Channel-FileChannel详解(二).mp4 08-Java NIO-Channel-ServerSocketChannel.mp4 09-Java NIO-Channel-SocketChannel.mp4 10-Java NIO-Channel-...

    Java语言基础教程-Java NIO流篇2

    在课程中,第4节将详细讲解Java NIO的通道概念,特别是`Channel`接口及其主要实现类。例如,FileChannel用于文件操作,它支持映射文件到内存(Memory-Mapped File)以提高读写速度;SocketChannel则用于网络通信,...

    Java语言基础教程-Java NIO流篇1

    在Java NIO流篇1的学习中,我们将深入探讨NIO的核心概念和使用方法。 首先,我们从【第1节】 Java NIO流-简介和概述开始。这一部分主要介绍了NIO的基本理念和相对于BIO的优势。NIO的核心特点是它支持非阻塞I/O,这...

    JavaNIO chm帮助文档

    Java NIO系列教程(二) Channel Java NIO系列教程(三) Buffer Java NIO系列教程(四) Scatter/Gather Java NIO系列教程(五) 通道之间的数据传输 Java NIO系列教程(六) Selector Java NIO系列教程(七) ...

    深入理解Apache Mina (6)---- Java Nio ByteBuffer与Mina ByteBuffer的区别

    Java NIO的ByteBuffer是Java标准库提供的一个核心类,它是通道(Channel)和缓冲区(Buffer)之间数据传输的主要媒介。它允许我们直接在内存中操作数据,而无需频繁地进行磁盘或网络I/O操作,提高了程序性能。ByteBuffer...

    多线程精品资源--Java NIO+多线程实现聊天室.zip

    2. Java NIO的基本组件,如通道(Channel)、缓冲区(Buffer)、选择器(Selector)以及如何使用它们来实现非阻塞I/O。 3. 聊天室应用的设计模式,包括服务器端和客户端的架构,以及如何处理并发连接和消息广播。 4....

    2021最新-Java NIO视频教程.txt打包整理.zip

    在"2021最新-Java NIO视频教程.txt打包整理.zip"这个资源中,你可能学习到如何创建和管理通道、缓冲区的使用、选择器的注册与选择、文件系统操作的优化、字符集编码的处理以及如何利用NIO进行网络编程等内容。...

    JAVA-NIO-DEMO

    Java NIO(New IO)是Java 1.4版本引入的一个新模块,它提供了一种不同于传统IO(基于字节流和字符流)的I/O操作方式。传统的IO模型是阻塞式的,而NIO的核心特点是非阻塞,这使得在处理大量并发I/O请求时更为高效。...

    Java Socket学习---nio实现阻塞多线程通信

    总的来说,Java NIO在实现阻塞多线程通信时,通过`Selector`监控多个`Channel`,减少了线程的创建和管理,提高了系统资源的利用率。同时,`ByteBuffer`的使用降低了内存拷贝的开销,提升了性能。通过`EchoServer`和`...

    Java-NIO-Netty框架学习

    学习Netty,可以从基础的Socket编程开始,然后深入理解Java NIO的基本概念,接着熟悉Netty提供的各种组件和API,通过编写简单的服务端和客户端程序来实践。随着对Netty的理解加深,可以尝试实现更复杂的网络应用,如...

    Java-NIO-系列教程

    ### Java NIO 系列教程知识点详解 #### 一、Java NIO 概述 Java NIO (New IO) 是 Java SE 1.4 版本引入的一种新的输入/输出方式,它提供了一种替代传统的 Java IO 包的方式。Java NIO 主要包括三个核心组成部分:*...

    2021最新-Java NIO视频教程-视频教程网盘链接提取码下载 .txt

    教程内容涵盖:阻塞和非阻塞IO、Channel通道、Buffer缓冲区、Selector选择器、Pipe管道、FileLock文件锁,以及Path、Files、异步FileChannel和Charset字符编码等,并通过一个多人聊天室的综合案例,把所有的NIO知识...

    java NIO学习系列 笔记

    Java NIO(New Input/Output)是Java标准库在JDK 1.4版本中引入的一个新特性,它提供了一种不同于传统IO流的高效I/O处理方式。NIO的核心概念包括通道(Channel)和缓冲区(Buffer),这两个组件使得数据以块的形式...

    JAVA NIO 学习资料

    Java NIO,全称为Non-Blocking Input/Output(非阻塞输入/输出),是Java从JDK 1.4版本开始引入的一种新的IO模型,它为Java应用程序提供了更高效的数据传输方式,尤其适用于高并发、大数据量的网络服务。与传统的IO...

    JAVA NIO学习网站

    在Java传统IO中,数据的读写都是通过流来完成,而NIO则引入了通道(Channel)和缓冲区(Buffer)的概念,提供了一种非阻塞的I/O操作方式,极大地提高了Java进行并发I/O处理的能力。 首先,我们来看下NIO的核心组件...

    Java NIO英文高清原版

    Java NIO,全称为Non-Blocking Input/Output(非阻塞输入/输出),是Java平台中用于替代标准I/O(BIO)模型的一种新机制。...学习和理解Java NIO以及Netty的使用,对于提升Java网络编程的能力至关重要。

    httpcore-nio-4.3.jar包

    NIO的核心概念包括通道(Channel)、缓冲区(Buffer)和选择器(Selector)。通道可以读写数据,缓冲区用于临时存储数据,选择器则用于监听多个通道的事件,实现了多路复用,从而实现非阻塞I/O。 3. **HttpCore NIO...

Global site tag (gtag.js) - Google Analytics