Netty学习-01-Nio
来源:互联网 发布:汉密尔顿 知乎 喜剧 编辑:程序博客网 时间:2024/05/24 23:11
(一)Nio介绍
(二)ByteBuffer,FileChannel
(三)DatagramChannel、ServerSocketChannel,
SocketChannel
(四)Selector
JavaNIO 由以下几个核心部分组成:
Channels
Buffers
Selectors
其他组件:Pipe和FileLockChannel和Buffer
基本上,所有的 IO 在NIO 中都从一个Channel开始。Channel有点象流。 数据可以从Channel读到Buffer中,也可以从Buffer写到Channel中。这里有个图示:
Channel的实现类
FileChannel
DatagramChannel
SocketChannel
ServerSocketChannel
Buffer实现类
ByteBuffer
CharBuffer
DoubleBuffer
FloatBuffer
IntBuffer
LongBuffer
ShortBuffer
Selector
Selector允许单线程处理多个Channel。如果你的应用打开了多个连接(通道),但每个连接的流量都很低,使用Selector就会很方便。例如,在一个聊天服务器中
这是在一个单线程中使用一个Selector处理3个Channel的图示:要使用Selector,得向Selector注册Channel,然后调用它的select()方法。这个方法会一直阻塞到某个注册的通道有事件就绪。一旦这个方法返回,线程就可以处理这些事件,事件的例子有如新连接进来,数据接收等
(一)ByteBuffer
(二)ByteBuffer与FileChannel的实战
使用到的类
RandomAccessFile,FileChannel,ByteBuffer
import java.io.RandomAccessFile;import java.nio.ByteBuffer;import java.nio.channels.FileChannel;import java.nio.charset.Charset;/** * 主要通过读取文件内容,写到ByteBuffer里,然后再从ByteBuffer对象中获取数据,显示到控制台 * @author chenj * */public class ByteBufferDemo {public static void readFile(String fileName) {try {RandomAccessFile randomAccessFile = new RandomAccessFile(fileName, "rw");FileChannel fileChannel = randomAccessFile.getChannel();ByteBuffer byteBuffer = ByteBuffer.allocate(10);int size = fileChannel.read(byteBuffer);//将Channel中的内容写到ByteBuffer中while(size>0){byteBuffer.flip();//把ByteBuffer从写模式,转变成读取模式Charset charset = Charset.forName("UTF-8");System.out.println(charset.newDecoder().decode(byteBuffer).toString());byteBuffer.clear();size = fileChannel.read(byteBuffer);}fileChannel.close();randomAccessFile.close();} catch (Exception e) {e.printStackTrace();}}}
public class ByteBufferTest {@Testpublic void testByteBufferRW() throws Exception{ByteBufferDemo.readFile("file/1.txt");}}
- Netty学习-01-Nio
- Netty学习 netty nio编程
- NIO-Netty学习之旅-01介绍
- NIO-netty-入门学习
- Netty学习3-NIO详解
- Netty源码学习-Java-NIO-Reactor
- Netty源码学习-Java-NIO-Reactor
- Netty源码学习-Java-NIO-Reactor
- netty 、Mina 对NIO支持 学习
- netty学习之一:java.nio.ByteBuffer
- 学习 java netty (一) -- java nio
- netty学习(5)--NIO基础知识
- netty学习(6)---NIO服务器端实现
- Netty学习系列(二)-- NIO介绍
- Netty 之 netty源码学习之大话java NIO
- (socket-nio-netty学习-2)Netty基础入门
- netty学习系列:NIO Reactor模型 & Netty线程模型
- (socket-nio-netty学习-1)socket,NIO,AIO基本概念
- maven依赖中的scope使用
- 1016. Phone Bills (25)
- 计算机网络2-网络应用
- 主流浏览器内核介绍
- 关于percona-xtrabackup 安装的小纠结
- Netty学习-01-Nio
- UEditor图片居中问题
- 通过数学模型提高效率:求1/1!-1/3!+1/5!-1/7!+...+(-1)^n+1/(2n-1)!
- Java面向对象和方法
- JNOJ 查并集
- java面试题总结
- 解决xcode printf 无输出
- 做安全的,这里有你意想不到的东西
- linux 终端打印内容输出到文件