java nio 大白话描述(一)

java nio基本上常用的组件,selector,channel,buffer。这三个,其他的可以用到的时候再去参考就可以了。

看一本书的时候,基本看前三章或者四章基础知识,剩下的,实际生产中用到了再去看就可以。

大白话解释这三个重要的单词

Channel:

Java的nio中,channel其实是用于传输的,也可以说是管道,是一个工具,可以对比一下io中的流,很类似。但是io中的流都是单向的,但是channel通道是双向的,就是这个通道里既可以读,也可以往里面写。这个channel跟buffer打交道是比较多的,再用nio的时候,读取数据是channel把数据读取到buffer,然后应用再从buffer中读取数据。写数据则是应用程序先把数据写入到buffer中,然后chanel把数据写入到io设备中,就是这样的交互过程


buffer:

buffer常用作解释成缓冲区,再介绍channel的时候,说过数据都是在缓冲区中的,读取数据的是把数据先读到buffer中,然后再从buffer中读数据。nio中的库都是这么操作数据的,并不是再channel中读写数据。缓冲区中有三个重要的状态:position,limit,capacity,再接下来的篇幅中介绍,这里就不多介绍了。

selector

常用作解释成选择器,我把它解释成监听器,用来监听一个或者多个通道,通道可以把自己感兴趣的操作注册到selector上,比如read,write,connect,accept,然后selector负责监听。它是用单线程来处理这些操作的,单线程有单线程的好处,好处就是可以避免多线程之间的线程切换,这样开会会很大。基本一句话说明这个selector是用来管理多个通道的。

欢迎老司机指正,提出更好的讲述和见解。

时间: 2024-10-29 19:10:18

java nio 大白话描述(一)的相关文章

Java NIO(六) Selector

Selector(选择器)是Java NIO中能够检测一到多个NIO通道,并能够知晓通道是否为诸如读写事件做好准备的组件.这样,一个单独的线程可以管理多个channel,从而管理多个网络连接. 下面是本文所涉及到的主题列表: 为什么使用Selector? Selector的创建 向Selector注册通道 SelectionKey 通过Selector选择通道 wakeUp() close() 完整的示例 为什么使用Selector? 仅用单个线程来处理多个Channels的好处是,只需要更少的

Java NIO:NIO概述

在上一篇博文中讲述了几种IO模型,现在我们开始进入Java NIO编程主题.NIO是Java 4里面提供的新的API,目的是用来解决传统IO的问题.本文下面分别从Java NIO的几个基础概念介绍起. 以下是本文的目录大纲: 一.NIO中的几个基础概念 二.Channel 三.Buffer 四.Selector 若有不正之处,请多多谅解并欢迎批评指正. 一.NIO中的几个基础概念 在NIO中有几个比较关键的概念:Channel(通道),Buffer(缓冲区),Selector(选择器). 首先从

[转载] Java NIO与IO

原文地址:http://tutorials.jenkov.com/java-nio/nio-vs-io.html 作者:Jakob Jenkov   译者:郭蕾    校对:方腾飞 当学习了Java NIO和IO的API后,一个问题马上涌入脑海: 我应该何时使用IO,何时使用NIO呢?在本文中,我会尽量清晰地解析Java NIO和IO的差异.它们的使用场景,以及它们如何影响您的代码设计. Java NIO和IO的主要区别 下表总结了Java NIO和IO之间的主要差别,我会更详细地描述表中每部分

Java NIO 系列教程(转)

原文中说了最重要的3个概念,Channel 通道Buffer 缓冲区Selector 选择器其中Channel对应以前的流,Buffer不是什么新东西,Selector是因为nio可以使用异步的非堵塞模式才加入的东西.以前的流总是堵塞的,一个线程只要对它进行操作,其它操作就会被堵塞,也就相当于水管没有阀门,你伸手接水的时候,不管水到了没有,你就都只能耗在接水(流)上.nio的Channel的加入,相当于增加了水龙头(有阀门),虽然一个时刻也只能接一个水管的水,但依赖轮换策略,在水量不大的时候,各

基于Java NIO的Socket通信

Java NIO模式的Socket通信,是一种同步非阻塞IO设计模式,它为Reactor模式实现提供了基础. 下面看看,Java实现的一个服务端和客户端通信的例子. NIO模式的基本原理描述如下: 服务端打开一个通道(ServerSocketChannel),并向通道中注册一个选择器(Selector),这个选择器是与一些感兴趣的操作的标识(SelectionKey,即通过这个标识可以定位到具体的操作,从而进行响应的处理)相关联的,然后基于选择器(Selector)轮询通道(ServerSock

Java NIO系列教程(四) Scatter/Gather

原文地址:http://ifeve.com/java-nio-scattergather/ Java NIO开始支持scatter/gather,scatter/gather用于描述从Channel(译者注:Channel在中文经常翻译为通道)中读取或者写入到Channel的操作. 分散(scatter)从Channel中读取是指在读操作时将读取的数据写入多个buffer中.因此,Channel将从Channel中读取的数据“分散(scatter)”到多个Buffer中. 聚集(gather)写

java大文件读写操作,java nio 之MappedByteBuffer,高效文件/内存映射

java处理大文件,一般用BufferedReader,BufferedInputStream这类带缓冲的Io类,不过如果文件超大的话,更快的方式是采用MappedByteBuffer. MappedByteBuffer是java nio引入的文件内存映射方案,读写性能极高.NIO最主要的就是实现了对异步操作的支持.其中一种通过把一个套接字通道(SocketChannel)注册到一个选择器(Selector)中,不时调用后者的选择(select)方法就能返回满足的选择键(SelectionKey

Java NIO Scatter/Gather

Java NIO开始支持scatter/gather,scatter/gather用于描述从Channel(译者注:Channel在中文经常翻译为通道)中读取或者写入到Channel的操作.分散(scatter)从Channel中读取是指在读操作时将读取的数据写入多个buffer中.因此,Channel将从Channel中读取的数据“分散(scatter)”到多个Buffer中.聚集(gather)写入Channel是指在写操作时将多个buffer的数据写入同一个Channel,因此,Chann

Java NIO 系列教程

转载于http://www.iteye.com/magazines/132-Java-NIO Java NIO(New IO)是从Java 1.4版本开始引入的一个新的IO API,可以替代标准的Java IO API.本系列教程将有助于你学习和理解Java NIO.感谢并发编程网的翻译和投递. (关注ITeye官微,随时随地查看最新开发资讯.技术文章.) Java NIO提供了与标准IO不同的IO工作方式: Channels and Buffers(通道和缓冲区):标准的IO基于字节流和字符流