李林超博客
首页
归档
留言
友链
动态
关于
归档
留言
友链
动态
关于
首页
Java
正文
02.NIO之bytebuffer基本使用
Leefs
2022-05-24 AM
1108℃
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
47
NLP
4
标签云
HDFS
DataX
排序
gorm
Tomcat
Livy
SpringCloudAlibaba
并发线程
查找
VUE
Zookeeper
Java工具类
SpringBoot
Map
工具
Spring
ClickHouse
Jenkins
Http
FastDFS
Eclipse
MySQL
国产数据库改造
Sentinel
递归
Spark SQL
锁
机器学习
前端
Shiro
友情链接
申请
范明明
庄严博客
Mx
陶小桃Blog
虫洞
评论已关闭