`
yixiandave
  • 浏览: 140614 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

NIO学习笔记2(ByteBuffer)

阅读更多
ByteBuffer这个类略蛋疼
作为nio里最常用的字节流运载工具,ByteBuffer提供了很多非常好用的接口
首先创建对象,主要有两种方式
ByteBuffer buffer;
//直接划定大小的空buffer,容量由一个int参数定义
buffer=ByteBuffer.allocate(1024);
//或者直接由已存在的byte[]数组生成,大小由byte[]的length决定
//假设b为一已知byte[]
buffer=ByteBuffer.wrap(b);


值的注意的是ByteBuffer的几个属性
position:当前指针位置
limit:有效数据区域
capacity:缓冲区容量

当ByteBuffer被创建的时候,默认position==0,limit==capacity
执行socketChannel.read(buffer)或者socketChannel.write(buffer)后,position会移动到limit处
包括各种put方法都会使position向右移动。一旦position移动到limit即宣告结束(即使limit后仍有可用缓存)
而flip()方法则是回转命令,使当前的limit移动到当前position处,position归零,于是ByteBuffer的有效数据区就由当前的position位置决定了。这个方法通常用于读写转换的时候。

clear()方法则是重置整个ByteArray,position回到0,limit回到capacity处

ByteArray的put方法和get方法给出了很多便利的接口
例如putInt和getInt,putChar和getChar。可以直接将一个整形或者字符类型转换为需要占用的byte位数并填充,不这样的话就只有自己想办法实现了。

但是值的注意的是ByteArray由一个array()方法,可以返回当前ByteArray中的byte[]数组。由于理解偏差LZ在这里被坑的很惨,特此警告:array()方法不是将ByteArray中position到limit段的byte[]数组输出,而是输出缓存区所有的byte[]数组!包括limit之后的!!!

今天的总结就到这里,如有谬误欢迎指正,LZ去处理剪尾巴的问题了
分享到:
评论

相关推荐

    Java NIO学习笔记——ByteBuffer用法

    ByteBuffer的用法是Java NIO学习中的核心内容。 首先,我们了解下ByteBuffer的基本概念。ByteBuffer是一个字节缓冲区,可以存储字节序列。在NIO中,所有的数据读写都通过缓冲区进行,ByteBuffer与其他类型的Buffer...

    javaNIO学习笔记

    ### Java NIO 学习笔记 #### 一、概述 Java NIO (Non-Blocking IO,也称为 Java New IO),是 Java 对传统 IO 模型的一次重大改进,旨在提高程序处理大量并发连接的能力。NIO 的核心组件包括 Channels、Buffers 和 ...

    JAVA NIO学习笔记.docx

    import java.nio.ByteBuffer; import java.nio.channels.FileChannel; public class CopyFile { public static void main(String[] args) throws Exception { String infile = "C:\\copy.sql"; String ...

    NIO学习笔记

    《NIO学习笔记》 在Java编程领域,NIO(Non-blocking Input/Output,非阻塞I/O)是一种重要的I/O模型,与传统的BIO(Blocking I/O)相对应。NIO提供了一种新的方式来处理I/O操作,特别是在处理大量并发连接时,它的...

    java NIO学习系列 笔记

    在NIO中,有多种类型的缓冲区,如ByteBuffer、CharBuffer、DoubleBuffer、FloatBuffer、IntBuffer和LongBuffer,分别对应不同的数据类型。缓冲区具有容量、限制和位置等属性,它们控制着数据的读写。在读取数据时,...

    学习笔记 java\CoreJava笔记\CoreJava_day21

    在`CoreJava_day21`的学习笔记中,主要探讨了Java中的NIO(New I/O)包及其关键类和接口,包括`ByteBuffer`、`FileChannel`以及网络编程中常用的`ServerSocket`和`Socket`等。NIO自JDK 1.4引入以来,因其高效性和...

    nio相关知识学习

    Buffer是存储数据的容器,Java NIO提供了一系列不同类型的Buffer,如ByteBuffer、CharBuffer、IntBuffer等,它们都继承自抽象类Buffer。Selector允许单线程监控多个通道的事件,提高了程序的并发性能。 1. Channel...

    阿里P8 架构师整理Java学习笔记.pdf

    ### Java学习笔记知识点总结 #### 一、JVM与内存管理 **1.1 JVM基本概念** - **JVM(Java Virtual Machine)**: Java虚拟机是执行Java字节码的虚拟机,它提供了运行Java程序所需的环境。 **1.2 线程** - **线程...

    Apache mina2学习笔记DEMO

    在这个"Apache MINA2学习笔记DEMO"中,我们很可能会看到如何使用MINA来创建一个自定义协议的示例。自定义协议通常是为了满足特定应用的需求,例如高效的数据传输、安全性或者特定的编码格式。MINA允许开发者定义自己...

    mina学习笔记,记录所有API

    在MINA的学习笔记中,记录的所有API通常会包括以下几个核心部分: 1. **IoSession**: 这是MINA的核心接口,代表了客户端和服务器之间的连接。IoSession提供了读写数据、管理连接状态、获取会话属性等功能。例如,`...

    mina2资料-各种教程

    了解以上知识点是掌握Apache MINA的基础,通过提供的学习资料,如《Mina2.0学习笔记》、《Apache MINA入门基础》和《Apache MINA Server 2.0中文参考手册》等,可以深入学习MINA的API用法、设计原理和最佳实践。...

    learning-netty.zip

    这个“learning-netty.zip”压缩包包含了一份Netty的学习笔记,重点在于代码学习和源码分析,基于Netty的4.1版本。下面将围绕Netty的核心概念、特性、以及如何通过学习笔记来深入理解Netty进行详细阐述。 1. **...

    Mina2.0阅读源码笔记(很值得一看)

    - IoBuffer 是 Mina 中用于数据存储和传输的核心类,它是对 Java NIO ByteBuffer 的封装和增强。 - **IoBuffer vs ByteBuffer**: IoBuffer 提供了更多便于操作的功能,比如自动扩容、直接内存分配等特性,使得数据...

    基于Netty网络编程项目实战笔记.rar

    Netty提供了ByteBuf作为Java NIO ByteBuffer的替代品,提供更高效的内存管理和操作。ByteBuf支持预读和后写,可以避免不必要的内存复制,提高数据传输效率。 此外,Netty的编码解码器(Encoder和Decoder)机制简化...

    自动netty笔记111

    这个“自动Netty笔记111”可能是某个开发者或学习者记录的一系列关于Netty学习过程中的关键点和理解。下面将详细阐述Netty的相关知识点。 1. **异步事件驱动模型**: Netty采用了非阻塞I/O模型,基于Java NIO(Non...

    netty资料.rar

    这个“netty资料.rar”压缩包文件包含了关于Netty的学习笔记,可以帮助我们深入了解Netty的核心概念和使用技巧。 Netty 的主要特点包括: 1. **异步事件驱动**:Netty 使用了非阻塞I/O模型,基于Java NIO(非阻塞...

    Netty源码分析总结.rar

    这个"Netty源码分析总结.rar"压缩包文件,从其标题和描述来看,很可能是针对Netty的源码分析课程或者笔记的集合,其中包含了对Netty核心机制的深入探讨。尽管提供的子文件名是"课时34:Netty源码分析总结下期预告....

    极客时间《Netty源码剖析与实战》学习记录-boy-learning-netty.zip

    在 "boy-learning-netty-master" 这个压缩包中,很可能是包含了一个个人学习 Netty 的项目或笔记,包含了源码分析、实践示例等内容。通过阅读和研究这些材料,你将能够更深入地理解和运用 Netty,提升你的网络编程...

Global site tag (gtag.js) - Google Analytics