JavaNIO-ByteBuffer
参考文献
黑马Netty
Buffer(缓冲区)
Buffer是一个对象,它包含一些要写入或者要读出的数据.在面向流的I/O中,可以将数据直接写入或者将数据直接读到Stream对象中.
在NIO库中,所有数据都是用缓冲区处理的.在读取数据时,它是直接读到缓冲区中的;在写入数据时,写入到缓冲区中.任何时候访问NIO中的数据,都是通过缓冲区进行操作.
缓冲区实质上是一个数组.通常它是一个字节数组(ByteBuffer),也可以使用其他种类的数组.但是缓冲区不仅仅是一个数组,缓冲区提供了对数据的结构化访问以及维护读写位置(limit)等信息.
最常用的缓冲区是ByteBuffer,一个ByteBuffer提供了一组功能用于操作byte数组.除了ByteBuffer,还有其他的一些缓冲区,事实上,每一种Java基本类型(除了Boolean类型),都有与之对应的缓冲区:
类型
说明
ByteBuffer
字节缓冲区
CharBuffer
字符缓冲区
ShortBuffer
短整形缓冲区
IntBuffer
整形缓冲区
LongBuffer
长整型 ...
JavaNIO-基础知识点
参考文献
【对线面试官】 Java NIO
Reading a File with Channels and Buffers
Netty权威指南 第二版
黑马-Netty课程
Java NIO浅析
BIO NIO和AIO
BIO、NIO和AIO是Java中用于网络编程的三种不同的I/O模型,它们之间的区别主要体现在对IO操作的处理方式和API设计上.以下是它们的区别:
BIO(Blocking I/O)阻塞I/O
同步阻塞:每个连接都需要一个独立的线程来处理,因此连接数受限于服务器的性能.
通信是同步的,即代码阻塞在输入流(InputStream)和输出流(OutputStream)上等待I/O完成.
只有阻塞模式,无法发挥多路复用的优势.
在I/O通信线程和业务处理线程中使用同一个线程池,无法发挥多核CPU的优势.
NIO(Non-Blocking I/O)非阻塞I/O
异步非阻塞:NIO可以使用单线程处理多个连接(轮询器Selector),因此可以支持更多的连接.
通过Selector实现了多路复用,同时可以采取异步非阻塞模式,即不用等待I/O操作的完成,可以通过回 ...