广告
返回顶部
首页 > 资讯 > 精选 >Java中的Netty缓冲区的用法
  • 190
分享到

Java中的Netty缓冲区的用法

2023-06-16 01:06:27 190人浏览 安东尼
摘要

这篇文章主要介绍“Java中的Netty缓冲区的用法”,在日常操作中,相信很多人在Java中的Netty缓冲区的用法问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Java中的Netty缓冲区的用法”的疑惑有所

这篇文章主要介绍“Java中的Netty缓冲区的用法”,在日常操作中,相信很多人在Java中的Netty缓冲区的用法问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Java中的Netty缓冲区的用法”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

前言

Java NIO 需要理解的主要有缓冲区,通道,选择器,这三个主要的部分。

基础

用户空间和内核空间

操作系统为了提供稳定性,把虚拟地址空间分为用户空间和内核空间,其中用户进程只能操作用户空间的内容,而内核空间的内容可以操作用户空间的内容以及用户空间的内容。

I/O过程中的数据流向

假设我们需要从磁盘中的某个文件读取数据,进程发起read系统调用,进入内核状态,内核会随即向磁盘控制硬件发出命令,要求其从磁盘读取数据,磁盘控制器把数据直接写入到内核缓冲区中,随后内核会吧数据从内核空间的临时缓冲区拷贝到用户缓冲区,进程再次切换回用户态继续执行。总结数据流向是:磁盘  -> 内核缓冲区 -> 用户缓冲区

内存空间多重映射

对于虚拟地址的空间,一个以上的虚拟地址可以指向同一个物理内存地址。如果用户空间的虚拟地址和内核空间的虚拟地址映射到同一个物理地址,那么这块物理地址代表的空间就对内核和用户进程都可见。便可省去数据在内核缓冲区和用户缓冲区来回复制的开销。

缓冲区

Java Nio 数据传输过程,数据先放到发送缓冲区 -> 通过通道发送到接收端 -> 接受端通道接受数据并填充到接受缓冲区  所以缓冲区的作用其实是连接通道作为数据传输的目标或者来源。

核心概念

属性

需要理解Buffer工作机制,需要了解如下几个属性

  1. 鸿蒙官方战略合作共建——HarmonyOS技术社区

  2. 容量: 缓冲区的容量,创建缓冲区时指定

  3. 位置: 下一个要被读取或者写入元素的索引

  4. 上界: 缓冲区中第一个不能被读或者写的位置。

  5. mark标记,一个备忘的位置

存取

缓冲区的核心就在于存取操作,buffer提供了相对位置存取和绝对位置存取两种方式。

  1. 鸿蒙官方战略合作共建——HarmonyOS技术社区

  2. 相对位置存取:在当前的位置写入或者读取数据,然后增加位置的值。

  3. 绝对位置存取。在指定的位置的写入或者读取数据,不改变位置的值

代码如下

//相对位置存取  public abstract ByteBuffer put(byte b);  public abstract byte get();   //绝对位置存取  public abstract ByteBuffer put(int index, byte b);  public abstract byte get(int index);

翻转

翻转是  buffer的核心概念,可以理解buffer有两种模式,写模式和读模式。写模式:我们分配一个缓冲区,然后直接填充数据,读模式下。我们从头开始读取数据。如何从写模式切换到读模式,翻转,翻转的时候我们用limit记录待读取数据的长度,然后把位置置换为0就可以开始读取数据了。

public final Buffer flip() {    //记录待读取数据的长度     limit = position;    //从头开始读取数据     position = 0;     mark = -1;     return this; }

demo

//创建一个缓冲区  ByteBuffer buffer = ByteBuffer.allocate(100); //写数据 for (char c : "hello".toCharArray()) {   buffer.put((byte) c); } //翻转 buffer.flip();//等价于 buffer.limit(buffer.position()).position(0); //读数据 while (buffer.hasRemaining()) {   char c = (char) buffer.get();   System.out.println(c); }

直接缓冲区

对于一般的I/O过程,数据流向是,磁盘或者网络 -> 内核临时缓冲区 -> 用户空间缓冲区

直接缓冲区解决的是内核空间临时缓冲区到用户空间缓冲区复制这一步耗费的多余。虽然直接缓冲区是I/O的最佳选择,但是其比创建非直接缓冲区将会耗费更大的成本了,所以一般都是直接重复使用。

创建缓冲区

Buffer不能直接通过构造函数实例化,都是通过静态工厂方法创建,下为ByteBuffer的静态工厂方法。

//创建内存缓冲区 public static ByteBuffer allocate(int capacity); //创建直接缓冲区 public static ByteBuffer allocateDirect(int capacity) ;  public static ByteBuffer wrap(byte[] array, int offset, int length)

到此,关于“Java中的Netty缓冲区的用法”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注编程网网站,小编会继续努力为大家带来更多实用的文章!

--结束END--

本文标题: Java中的Netty缓冲区的用法

本文链接: https://www.lsjlt.com/news/282029.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Java中的Netty缓冲区的用法
    这篇文章主要介绍“Java中的Netty缓冲区的用法”,在日常操作中,相信很多人在Java中的Netty缓冲区的用法问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Java中的Netty缓冲区的用法”的疑惑有所...
    99+
    2023-06-16
  • Netty对JDK缓冲区中内存池零拷贝优化的示例分析
    这篇文章主要介绍Netty对JDK缓冲区中内存池零拷贝优化的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!NIO中缓冲区是数据传输的基础,JDK通过ByteBuffer实现,Netty框架中并未采用JDK原生...
    99+
    2023-06-04
  • Java NIO中Buffer缓冲区有什么用
    这篇文章主要介绍Java NIO中Buffer缓冲区有什么用,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!一、Buffer 简介Java NIO 中的 Buffer 用于和 NIO 通道进行交互。数据是通道...
    99+
    2023-06-29
  • java中字符流缓冲区的作用是什么
    本篇文章为大家展示了java中字符流缓冲区的作用是什么,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。1. 为什么要缓冲区?程序频繁地操作一个资源(如文件),则性能会很低,此时为了提升性能,就可以将一...
    99+
    2023-05-31
    java 字符流缓冲区
  • C++缓冲区刷新的方法是什么
    在C++中,可以使用以下方法刷新缓冲区: 使用std::endl:在输出流中使用std::endl会自动刷新缓冲区,并插入一个换行...
    99+
    2023-10-23
    C++
  • java中NIO通道和缓冲区是如何工作的
    这篇文章将为大家详细讲解有关java中NIO通道和缓冲区是如何工作的,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。通道 和 缓冲区 是 NIO 中的核心对象,几乎在每一个 I/O 操作中都要使用它们。通道...
    99+
    2023-06-17
  • 浅谈C++ 缓冲区(buffer)的使用
    缓冲区 缓冲区 (buffer) 是内存空间的一部分. 在内存中会为每一个数据流开辟一个内存缓冲区. 缓冲区是用来存放流中的数据, 缓冲区中的数据就是流. 在 C++ 中, 输入输出...
    99+
    2022-11-12
  • java中的缓冲流类型有哪些
    这期内容当中小编将会给大家带来有关java中的缓冲流类型有哪些,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。Java是什么Java是一门面向对象编程语言,可以编写桌面应用程序、Web应用程序、分布式系统和...
    99+
    2023-06-14
  • 一文带你了解Golang中的缓冲区Buffer
    目录1. Buffer 是什么2. 创建缓冲区2.1 使用 NewBuffer 函数创建2.2 使用 bytes.Buffer 结构体创建3. 写入数据4. 读取数据5. 截取缓冲区...
    99+
    2023-05-18
    Go 缓冲区Buffer Go 缓冲区 Go Buffer
  • Node.js缓冲区(Buffer)模块的方法及实例分析
    二进制流是大量的二进制数据的集合。由于通常情况下二进制流的大小挺大的,因此二进制流一般不会一起运送,而会在运输前切分成小块然后逐一发送。 当数据处理单元暂时不再接收其他数据流时,剩余...
    99+
    2022-11-12
  • 详细聊聊c语言中的缓冲区问题
    目录发现问题例题问题原因解决方法一:解决方法二:解决方案三:出错二gets函数引入为什么要引入缓冲区总结发现问题 你是不是总会出现当你输入的时候(你想的是只输出一个内容),但是最后却...
    99+
    2022-11-12
  • c语言中缓冲区问题的示例分析
    这篇文章主要介绍了c语言中缓冲区问题的示例分析,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。发现问题你是不是总会出现当你输入的时候(你想的是只输出一个内容),但是最后却输入两...
    99+
    2023-06-25
  • 缓冲字符流BufferedReader和BufferedWriter的用法
    本篇内容主要讲解“缓冲字符流BufferedReader和BufferedWriter的用法”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“缓冲字符流BufferedReader和Buffered...
    99+
    2023-06-20
  • Java IO流 - 缓冲流的详细使用介绍
    文章目录 缓冲流缓冲流概述字节缓冲流字符缓存流 缓冲流 缓冲流概述 缓冲流介绍: 缓冲流也称为高效流、或者高级流。之前学习的字节流和字符流可以称为原始流。 作用:缓冲流自带...
    99+
    2023-09-11
    java jvm 算法
  • Java 轻松掌握字符缓冲流的使用
    目录一、字符缓冲流二、字符缓冲流的特有方法一、字符缓冲流 BufferedWriter:文本写入字符输出流,缓冲字符,以提供单个字符,数组和字符串的高效写入。可以指定缓冲区大小,或者...
    99+
    2022-11-13
  • MySQL中读页缓冲区buffer pool的知识点有哪些
    这篇“MySQL中读页缓冲区buffer pool的知识点有哪些”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“My...
    99+
    2023-06-30
  • logcat命令使用方法和查看android系统日志缓冲区内容的方法
    *注:可以用 adb logcat > 路径/文件名 来保存,此命令执行之时起的全部日志信息到一个文件里,ctrl + C 结束日志输出;后面不加 > 路径/文件名...
    99+
    2022-06-06
    缓冲 方法 logcat Android
  • Java基础学习之字符缓冲流的应用
    目录一、字符缓冲流二、字符缓冲流复制Java文件三、字符缓冲流特有功能四、字符缓冲流特有功能复制Java文件一、字符缓冲流 字符缓冲流介绍: BufferedWriter:将文本写入...
    99+
    2022-11-13
  • 日志记录器缓冲区大小的作用是什么
    本篇内容主要讲解“日志记录器缓冲区大小的作用是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“日志记录器缓冲区大小的作用是什么”吧!日志记录器缓冲区大小日志的作用是:主要是用于给工程师们反馈使...
    99+
    2023-06-20
  • Qt中的双缓冲机制与应用方法是什么
    本篇内容介绍了“Qt中的双缓冲机制与应用方法是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!1、双缓冲机制所谓双缓冲机制,是指在绘制控件...
    99+
    2023-07-05
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作