李林超博客
首页
归档
留言
友链
动态
关于
归档
留言
友链
动态
关于
首页
Java
正文
02.NIO之bytebuffer基本使用
Leefs
2022-05-24 AM
774℃
0条
[TOC] ### 前言 本篇将通过nio读取一个文本文件来演示bytebuffer的基本使用 ### 一、准备 + **数据准备** 创建data.txt文件,增加如下内容: ```basic 1234567890abcd ``` + **创建Maven项目** + **安装lomback插件** ### 二、ByteBuffer 使用分析 1. 向 buffer 写入数据,例如调用 channel.read(buffer) 2. 调用 flip() 切换至**读模式** 3. 从 buffer 读取数据,例如调用 buffer.get() 4. 调用 clear() 或 compact() 切换至**写模式** 5. 重复 1~4 步骤 ### 三、代码实现 + **引入pom依赖** ```xml
1.8
1.8
io.netty
netty-all
4.1.39.Final
org.projectlombok
lombok
1.16.18
com.google.code.gson
gson
2.8.5
com.google.guava
guava
19.0
ch.qos.logback
logback-classic
1.2.3
``` + **代码实现** ```java import lombok.extern.slf4j.Slf4j; import java.io.FileInputStream; import java.io.IOException; import java.nio.ByteBuffer; import java.nio.channels.FileChannel; /** * Created by lilinchao * Date 2022/5/24 * Description ByteBuffer Demo */ @Slf4j public class TestByteBuffer { public static void main(String[] args){ /** * FileChannel * 方式1:输入输出流 * 方式2:RandomAccessFile */ try (FileChannel channel = new FileInputStream("datas/data.txt").getChannel()){ //准备缓冲区 ByteBuffer buffer = ByteBuffer.allocate(10); while (true){ //1.从 channel 读取数据,向buffer写入 int len = channel.read(buffer); log.debug("读取到的字节数:{}",len); if(len == -1){ //判断内容是否读取完 break; } //打印buffer中的内容 buffer.flip(); //2.切换至读模式 while (buffer.hasRemaining()){ //是否还有剩余未读数据 byte b = buffer.get(); //3.读取数据内容 log.debug("实际字节:{}",(char) b); } buffer.clear(); //4.切换到写模式 } } catch (IOException e) { e.printStackTrace(); } } } ``` **运行结果** ```basic 10:16:41 [DEBUG] [main] c.l.n.b.TestByteBuffer - 读取到的字节数:10 10:16:41 [DEBUG] [main] c.l.n.b.TestByteBuffer - 实际字节:1 10:16:41 [DEBUG] [main] c.l.n.b.TestByteBuffer - 实际字节:2 10:16:41 [DEBUG] [main] c.l.n.b.TestByteBuffer - 实际字节:3 10:16:41 [DEBUG] [main] c.l.n.b.TestByteBuffer - 实际字节:4 10:16:41 [DEBUG] [main] c.l.n.b.TestByteBuffer - 实际字节:5 10:16:41 [DEBUG] [main] c.l.n.b.TestByteBuffer - 实际字节:6 10:16:41 [DEBUG] [main] c.l.n.b.TestByteBuffer - 实际字节:7 10:16:41 [DEBUG] [main] c.l.n.b.TestByteBuffer - 实际字节:8 10:16:41 [DEBUG] [main] c.l.n.b.TestByteBuffer - 实际字节:9 10:16:41 [DEBUG] [main] c.l.n.b.TestByteBuffer - 实际字节:0 10:16:41 [DEBUG] [main] c.l.n.b.TestByteBuffer - 读取到的字节数:4 10:16:41 [DEBUG] [main] c.l.n.b.TestByteBuffer - 实际字节:a 10:16:41 [DEBUG] [main] c.l.n.b.TestByteBuffer - 实际字节:b 10:16:41 [DEBUG] [main] c.l.n.b.TestByteBuffer - 实际字节:c 10:16:41 [DEBUG] [main] c.l.n.b.TestByteBuffer - 实际字节:d 10:16:41 [DEBUG] [main] c.l.n.b.TestByteBuffer - 读取到的字节数:-1 ``` **整体目录结构** ![02.NIO之bytebuffer基本使用01.jpg](https://lilinchao.com/usr/uploads/2022/05/879582621.jpg)
标签:
Netty
,
NIO
非特殊说明,本博所有文章均为博主原创。
如若转载,请注明出处:
https://lilinchao.com/archives/2076.html
上一篇
01.NIO简单介绍
下一篇
03.NIO之bytebuffer内部结构和方法
取消回复
评论啦~
提交评论
栏目分类
随笔
2
Java
326
大数据
229
工具
31
其它
25
GO
43
标签云
MyBatis-Plus
Java阻塞队列
Spring
BurpSuite
DataX
栈
Redis
Sentinel
字符串
JavaScript
Golang
Livy
MyBatis
正则表达式
RSA加解密
FastDFS
nginx
机器学习
SpringBoot
Linux
Spark
Stream流
Zookeeper
Elastisearch
Yarn
ajax
Thymeleaf
并发线程
Elasticsearch
前端
友情链接
申请
范明明
庄严博客
Mx
陶小桃Blog
虫洞