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去处理剪尾巴的问题了
分享到:
相关推荐
ByteBuffer的用法是Java NIO学习中的核心内容。 首先,我们了解下ByteBuffer的基本概念。ByteBuffer是一个字节缓冲区,可以存储字节序列。在NIO中,所有的数据读写都通过缓冲区进行,ByteBuffer与其他类型的Buffer...
### Java NIO 学习笔记 #### 一、概述 Java NIO (Non-Blocking IO,也称为 Java New IO),是 Java 对传统 IO 模型的一次重大改进,旨在提高程序处理大量并发连接的能力。NIO 的核心组件包括 Channels、Buffers 和 ...
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学习笔记》 在Java编程领域,NIO(Non-blocking Input/Output,非阻塞I/O)是一种重要的I/O模型,与传统的BIO(Blocking I/O)相对应。NIO提供了一种新的方式来处理I/O操作,特别是在处理大量并发连接时,它的...
在NIO中,有多种类型的缓冲区,如ByteBuffer、CharBuffer、DoubleBuffer、FloatBuffer、IntBuffer和LongBuffer,分别对应不同的数据类型。缓冲区具有容量、限制和位置等属性,它们控制着数据的读写。在读取数据时,...
在`CoreJava_day21`的学习笔记中,主要探讨了Java中的NIO(New I/O)包及其关键类和接口,包括`ByteBuffer`、`FileChannel`以及网络编程中常用的`ServerSocket`和`Socket`等。NIO自JDK 1.4引入以来,因其高效性和...
Buffer是存储数据的容器,Java NIO提供了一系列不同类型的Buffer,如ByteBuffer、CharBuffer、IntBuffer等,它们都继承自抽象类Buffer。Selector允许单线程监控多个通道的事件,提高了程序的并发性能。 1. Channel...
### Java学习笔记知识点总结 #### 一、JVM与内存管理 **1.1 JVM基本概念** - **JVM(Java Virtual Machine)**: Java虚拟机是执行Java字节码的虚拟机,它提供了运行Java程序所需的环境。 **1.2 线程** - **线程...
在这个"Apache MINA2学习笔记DEMO"中,我们很可能会看到如何使用MINA来创建一个自定义协议的示例。自定义协议通常是为了满足特定应用的需求,例如高效的数据传输、安全性或者特定的编码格式。MINA允许开发者定义自己...
在MINA的学习笔记中,记录的所有API通常会包括以下几个核心部分: 1. **IoSession**: 这是MINA的核心接口,代表了客户端和服务器之间的连接。IoSession提供了读写数据、管理连接状态、获取会话属性等功能。例如,`...
了解以上知识点是掌握Apache MINA的基础,通过提供的学习资料,如《Mina2.0学习笔记》、《Apache MINA入门基础》和《Apache MINA Server 2.0中文参考手册》等,可以深入学习MINA的API用法、设计原理和最佳实践。...
这个“learning-netty.zip”压缩包包含了一份Netty的学习笔记,重点在于代码学习和源码分析,基于Netty的4.1版本。下面将围绕Netty的核心概念、特性、以及如何通过学习笔记来深入理解Netty进行详细阐述。 1. **...
- IoBuffer 是 Mina 中用于数据存储和传输的核心类,它是对 Java NIO ByteBuffer 的封装和增强。 - **IoBuffer vs ByteBuffer**: IoBuffer 提供了更多便于操作的功能,比如自动扩容、直接内存分配等特性,使得数据...
Netty提供了ByteBuf作为Java NIO ByteBuffer的替代品,提供更高效的内存管理和操作。ByteBuf支持预读和后写,可以避免不必要的内存复制,提高数据传输效率。 此外,Netty的编码解码器(Encoder和Decoder)机制简化...
这个“自动Netty笔记111”可能是某个开发者或学习者记录的一系列关于Netty学习过程中的关键点和理解。下面将详细阐述Netty的相关知识点。 1. **异步事件驱动模型**: Netty采用了非阻塞I/O模型,基于Java NIO(Non...
这个“netty资料.rar”压缩包文件包含了关于Netty的学习笔记,可以帮助我们深入了解Netty的核心概念和使用技巧。 Netty 的主要特点包括: 1. **异步事件驱动**:Netty 使用了非阻塞I/O模型,基于Java NIO(非阻塞...
这个"Netty源码分析总结.rar"压缩包文件,从其标题和描述来看,很可能是针对Netty的源码分析课程或者笔记的集合,其中包含了对Netty核心机制的深入探讨。尽管提供的子文件名是"课时34:Netty源码分析总结下期预告....
在 "boy-learning-netty-master" 这个压缩包中,很可能是包含了一个个人学习 Netty 的项目或笔记,包含了源码分析、实践示例等内容。通过阅读和研究这些材料,你将能够更深入地理解和运用 Netty,提升你的网络编程...