java的nio之:java的nio系列教程之channel的概念

简介: 一:java的nio的channelJava NIO的通道类似流,但又有些不同:==>既可以从通道中读取数据,又可以写数据到通道。但流的读写通常是单向的。==>通道可以异步地读写。==>通道中的数据总是要先读到一个Buffer,或者总是要从一个Buffer中写入。

一:java的nio的channel

Java NIO的通道类似流,但又有些不同:

==>既可以从通道中读取数据,又可以写数据到通道。但流的读写通常是单向的。

==>通道可以异步地读写。

==>通道中的数据总是要先读到一个Buffer,或者总是要从一个Buffer中写入。

正如上面所说,从通道读取数据到缓冲区,从缓冲区写入数据到通道。如下图所示:




二:java的nio的channel的实现

这些是Java NIO中最重要的通道的实现:

==>FileChannel  :

==>DatagramChannel

==>SocketChannel

==>ServerSocketChannel





三:java的nio的channel的实现的作用


==>FileChannel 从文件中读写数据。

==>DatagramChannel 能通过UDP读写网络中的数据。

==>SocketChannel 能通过TCP读写网络中的数据。

==>ServerSocketChannel可以监听新进来的TCP连接,像Web服务器那样。对每一个新进来的连接都会创建一个SocketChannel。




四:java的nio的channel的基本例子

 1 package com.yeepay.sxf.testnio;
 2 
 3 import java.io.IOException;
 4 import java.io.RandomAccessFile;
 5 import java.nio.ByteBuffer;
 6 import java.nio.channels.FileChannel;
 7 /**
 8  * 简单测试java的nio中channel组件的作用
 9  * @author sxf
10  *
11  */
12 public class TestChannelForNio {
13 
14     public static void main(String[] args) throws IOException {
15         //把文件加载到内存  /usr/sxf/testnio文件
16         RandomAccessFile aFile = new RandomAccessFile("/usr/sxf/testnio", "rw");
17         //从文件中获取通道
18         FileChannel inChannel = aFile.getChannel();
19         //从通道中注册一个缓冲区,每次48个字节
20         ByteBuffer buf = ByteBuffer.allocate(48);
21         //读取第一次
22         int bytesRead = inChannel.read(buf);
23         //看文件中是否有数据
24         while (bytesRead != -1) {
25             //打印第一次读取字符的个数
26             System.out.println("Read " + bytesRead);
27             
28             //注意 buf.flip() 的调用,首先读取数据到Buffer,然后反转Buffer,接着再从Buffer中读取数据。
29             buf.flip();
30             
31             //打印每一个字符到控制台
32             while(buf.hasRemaining()){
33                     System.out.print((char) buf.get());
34             }
35             
36             //清空这次buffer
37             buf.clear();
38     
39             bytesRead = inChannel.read(buf);
40 
41         }
42 
43         aFile.close();
44     }
45 }
View Code

 

目录
打赏
0
0
0
0
11
分享
相关文章
JAVA网络IO之NIO/BIO
本文介绍了Java网络编程的基础与历史演进,重点阐述了IO和Socket的概念。Java的IO分为设备和接口两部分,通过流、字节、字符等方式实现与外部的交互。
Java字面量详解:概念、分类与使用实例
本文介绍了Java字面量的概念、分类及应用。
57 11
Java的基础概念一
### Java编程基础简介 #### 一、注释 注释用于解释代码,不会参与编译和运行。Java支持三种注释: - **单行注释**:以 `//` 开头。 - **多行注释**:以 `/* ... */` 包围。 - **文档注释**:通常用于生成开发文档。 #### 二、关键字 关键字是被Java赋予特定含义的英文单词,全部小写,且在代码编辑器中有特殊颜色标记。常用的如 `class` 表示定义一个类。
Java的基础概念一
Java的基础概念(二)
本文介绍了Java编程语言中的运算符和表达式,涵盖算术运算符、赋值运算符、关系运算符、逻辑运算符、三元运算符等。重点讲解了算术运算符的使用,如加减乘除取余,并强调了整数除法和取余的特殊性。同时,详细说明了隐式转换与强制转换的概念及应用场景,以及字符串和字符的拼接规则。通过多个案例演示了不同运算符的实际应用,包括数值拆分、自增自减、三元表达式的使用等。最后简要提及了运算符的优先级,指出小括号具有最高优先级。
|
3月前
|
探索Java NIO:究竟在哪些领域能大显身手?揭秘原理、应用场景与官方示例代码
Java NIO(New IO)自Java SE 1.4引入,提供比传统IO更高效、灵活的操作,支持非阻塞IO和选择器特性,适用于高并发、高吞吐量场景。NIO的核心概念包括通道(Channel)、缓冲区(Buffer)和选择器(Selector),能实现多路复用和异步操作。其应用场景涵盖网络通信、文件操作、进程间通信及数据库操作等。NIO的优势在于提高并发性和性能,简化编程;但学习成本较高,且与传统IO存在不兼容性。尽管如此,NIO在构建高性能框架如Netty、Mina和Jetty中仍广泛应用。
63 3
|
3月前
|
Java的NIO体系
通过本文的介绍,希望您能够深入理解Java NIO体系的核心组件、工作原理及其在高性能应用中的实际应用,并能够在实际开发中灵活运用这些知识,构建高效的Java应用程序。
73 5
Java中的继承和多态:理解面向对象编程的核心概念
【8月更文挑战第22天】在Java的世界中,继承和多态不仅仅是编程技巧,它们是构建可维护、可扩展软件架构的基石。通过本文,我们将深入探讨这两个概念,并揭示它们如何共同作用于面向对象编程(OOP)的实践之中。你将了解继承如何简化代码重用,以及多态如何为程序提供灵活性和扩展性。让我们启程,探索Java语言中这些强大特性的秘密。
java nio,netty,kafka 中经常提到“零拷贝”到底是什么?
零拷贝技术 Zero-Copy 是指计算机执行操作时,可以直接从源(如文件或网络套接字)将数据传输到目标缓冲区, 而不需要 CPU 先将数据从某处内存复制到另一个特定区域,从而减少上下文切换以及 CPU 的拷贝时间。
java nio,netty,kafka 中经常提到“零拷贝”到底是什么?
Java连接池技术,从基础概念出发,解析了连接池的工作原理及其重要性
本文详细介绍了Java连接池技术,从基础概念出发,解析了连接池的工作原理及其重要性。连接池通过复用数据库连接,显著提升了应用的性能和稳定性。文章还展示了使用HikariCP连接池的示例代码,帮助读者更好地理解和应用这一技术。
100 1
Java NIO 开发
本文介绍了Java NIO(New IO)及其主要组件,包括Channel、Buffer和Selector,并对比了NIO与传统IO的优势。文章详细讲解了FileChannel、SocketChannel、ServerSocketChannel、DatagramChannel及Pipe.SinkChannel和Pipe.SourceChannel等Channel实现类,并提供了示例代码。通过这些示例,读者可以了解如何使用不同类型的通道进行数据读写操作。
Java NIO 开发

热门文章

最新文章