社区
Java SE
帖子详情
Java bio中的buffer和nio中的buffer到底是什么区别?
Tortoise007
2019-12-30 02:20:22
Java bio中的buffer和nio中的buffer到底是什么区别?
...全文
99
1
打赏
收藏
Java bio中的buffer和nio中的buffer到底是什么区别?
Java bio中的buffer和nio中的buffer到底是什么区别?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
1 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
tianfang
2019-12-30
打赏
举报
回复
对你的接口/API基本一致(基本功能的调用),内部处理机制不同
Java
IO 体系.md
Java
IO 体系 -
Java
IO 体系 - 传统的
BIO
-
BIO
NIO
和 AIO 的
区别
- 什么是流 - 流的分类 - 节点流和处理流 -
Java
IO 的核心类 File -
Java
IO 流对象 - 字节流对象 - InputStream - OutputStream - 字符流对象 - Reader - Writer - 字节流与字符流的转换 - 新潮的
NIO
- 缓冲区(
Buffer
) - 通道(Channel) - 示例:文件拷贝案例 -
BIO
和
NIO
拷贝文件的
区别
- 操作系统的零拷贝 - 选择器(Selectors) - 选择键(SelectionKey) - 示例:简易的客户端服务器通信 - 总结
Java
IO 是一个庞大的知识体系,很多人学着学着就会学懵了,包括我在内也是如此,所以本文将会从
Java
的
BIO
开始,一步一步深入学习,引出 JDK1.4 之后出现的
NIO
基于
Nio
的多人聊天Demo
NIO
即non-blocking IO,顾名思义是一种非阻塞模型。
NIO
的目的就是实现一个线程处理多个连接。实现多人聊天消息转发,用户发送消息同步到服务
中
的其他客户端,运用到了
nio
中
buffer
、socket、selector。 1、Channel,管道。Channel可以理解为连接,与
BIO
中
Sokcet类似,一个连接对应一个Channel,但Channel
中
仍内置了一个Socket,可以调用socket()获取。 2、Selector,选择器。Selector类似一个调度
中
心,所有Channel都需要注册到选择器
中
,并绑定一个SelectionKey,绑定时还会指定要监听的事件,如:连接就绪、读就绪、写就绪等。可以调用Selector提供的API实现对发生监听事件的连接进行处理。 3、
Buffer
,缓冲区。
Buffer
底层是一个数组,供Channel实现对数据的读写。
Buffer
的position、limit、capacity分别指当前索引、读/写上限索引、数组容量。
面试题-丰巢科技篇.zip
1.
bio
与
nio
的
区别
1、
bio
同步阻塞io:在此种⽅式下,⽤户进程在发起⼀个IO操作以后,必须等待IO操作的完成,只有当真正完成了IO操作 以后,⽤户进程才能运⾏。
JAVA
传统的IO模型属于此种⽅式! 2、
nio
同步⾮阻塞式I/O;
java
NIO
采⽤了双向通道进⾏数据传输,在通道上我们可以注册我们感兴趣的事件:连接事件、 读写事件;
NIO
主要有三⼤核⼼部分:Channel(通道),
Buffer
(缓冲区), Selector。传统IO基于字节流和字符流进⾏操作, ⽽
NIO
基于Channel和
Buffer
(缓冲区)进⾏操作,数据总是从通道读取到缓冲区
中
,或者从缓冲区写⼊到通道
中
。 Selector(选择区)⽤于监听多个通道的事件(⽐如:连接打开,数据到达)。因此,单个线程可以监听多个数据通道。 1.
BIO
(Blocking I/O):同步阻塞I/O模式,数据的读取写⼊必须阻塞在⼀个线程内等待其完成。这⾥使⽤那个经典的烧 开⽔例⼦,这⾥假设⼀个烧开⽔的场景,有⼀排⽔壶在烧开⽔,
BIO
的⼯作模式就是, 叫⼀个线程停留在⼀个⽔壶那,直 到这个⽔壶烧开,才去处理下⼀个⽔壶。但是实际上线
Netty由浅到深_第三章_
NIO
模型3大组件详细介绍
NIO
三大核心原理示意图 每个channel(通道)都会对应一个
buffer
(缓冲区) Selector(选择器)对应一个线程,一个线程对应多个channel(连接) 程序切换到那个channel是由事件决定的,==Event(事件)==是一个非常重要概念 Selector会根据不同的事件,在各个通道上切换
Buffer
就是一个内存块,底层是一个数组 数据的读写是通过
Buffer
,这个和
BIO
不同的。
BIO
中
要么是输入流或者是输出流,不可能是双向流动的,但是
NIO
中
的
Buffer
是可以读也可以写,需要用flip()方法切换 channel是双向的,可以返回底层操作系统情况,比如Linux系统
Java
:什么是
NIO
?什么是
BIO
?
NIO
和
BIO
有什么
区别
?
一、什么是
NIO
1.概念
NIO
是
java
1.4
中
引入的,被称为new I/O,也有说是non-blocking I/O,
NIO
被成为同步非阻塞的IO。 image.png 2.跟
BIO
流的
区别
BIO
是面向流的,
NIO
是面向块(缓冲区)的。
BIO
的流都是同步阻塞的,而
NIO
是同步非阻塞的。
NIO
会等待数据全部传输过来再让线程处理,
BIO
是直接让线程等待。
NIO
有选择器,而
BIO
没有。
NIO
是采用管道和缓存区的形式来处理数据的,而
BIO
是采
Java SE
62,614
社区成员
307,327
社区内容
发帖
与我相关
我的任务
Java SE
Java 2 Standard Edition
复制链接
扫一扫
分享
社区描述
Java 2 Standard Edition
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章