java 读fdb文件_如何真正理解java中的NIO?

1、简介

1.1 Java中的IO介绍

BIO:BlockingIO,同步式阻塞式IO,即传统的IO,是java中最早期的流

NIO:Non-BlockingIO,又称New IO,同步式非阻塞IO,是JDK1.4提供的流

AIO:AsynchronousIO,异步是非阻塞IO,可以认为是NIO的二代版本,是JDK1.8提供的流

1.2 概述

NIO是JDK1.4出现的一个新的用于进行数据传输的流

全称是Non-BlockingIO,是一种同步式非阻塞式的IO,也是一种能供进行多路复用的IO

NIO中有3大组件:Buffer、Channel、Selector

NIO在使用的时候可以基于事件驱动方式来实现

1.3 BIO的缺点

一对一的连接方式:即每一个连接请求对应一个线程,在请求最大的情况下,会导致服务器端的压力非常大而致整个服务器的效率变低

阻塞:当线程在进行read或者write的时候,除非读完或者写完,否则在这个过程中不能发生任何操作

单项传输:数据只能从一端传向另一端,如果需要反向传输需要令创建流对象

1.4 NIO的特点

一对多的连接方式:利用一个或者少量线程处理大量的连接请求,降低服务器端的压力

非阻塞:在线程不能进行read或者write方法的时候,立即返回0,等待下一次操作

双向传输:利用通道可以实现数据的双向

1.5 NIO的缺点

在请求量比较大的情况下会出现部分请求的响应时间比较长的现象

不适用于长任务场景,不然会导致其他的请求无法处理

1.6 BIO和NIO的比较

图片

ad5b47066f8cdd447b1941de695519f9.png

2. ByteBuffer

2.1 概述

字节缓冲区,继承了Buffer类

底层是依靠字节数组来存储数据

本身是一个抽象类,需要利用其子类创建对象或者是利用其提供的allocate或者wrap方法来创建ByteBuffer对象

重要位置:capacity >= limit >= position >=mark

2.2 重要位置

capacity:容量位,用于标记该缓冲区的容量,在缓冲区创建好之后就不再改变

limit:限制位,用于限制操作位position所能达到的最大位置。在缓冲区刚创建的时候指向容量位

position:操作位,用于指向要操作的位置,实际意义类似于数组中的下标,在缓冲区刚创建的时候指向0

mark:标记位,用于进行标记,在缓冲区刚创建的时候指向-1,默认不启用

2.3 重要方法

cd4900c6d7b35748a2135060bcd99ef0.png

2.4 示例

Demo01

package cn.tedu.buffer;

import java.nio.ByteBuffer;

public class ByteBufferDemo {

public static void main(String[] args) {

// 表示给底层的字节数组来指定大小

// 缓冲区在给定之后,长度就不能改变了

ByteBuffer buffer =

ByteBuffer.allocate(10);

// 添加数据

buffer.put("abc".getBytes());

buffer.put((byte) 0);

buffer.put("def".getBytes());

// 将position挪动

// buffer.position(0);

// 获取元素

// 获取的是一个字节

// byte b = buffer.get();

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值