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

ByteBuffer笔记

    博客分类:
  • Java
 
阅读更多
# public static ByteBuffer wrap(byte[] array)
将array中的数据包装到ByteBuffer中
byte[] array = new byte[1024];
ByteBuffer buffer = ByteBuffer.wrap(array);

等效于
ByteBuffer buffer = ByteBuffer.allocate(1024); //分配一定的空间,1024

在NIO中,数据的读写操作始终是与缓冲区相关联的.读取时信道(SocketChannel)将数据读入缓冲区,写入时首先要将发送的数据按顺序填入缓冲区.缓冲区是定长的,基本上它只是一个列表,它的所有元素都是基本数据类型.ByteBuffer是最常用的缓冲区,它提供了读写其他数据类型的方法,且信道的读写方法只接收ByteBuffer.因此ByteBuffer的用法是有必要牢固掌握的.

1.创建ByteBuffer
1.1 使用allocate()静态方法
    ByteBuffer buffer=ByteBuffer.allocate(256);
    以上方法将创建一个容量为256字节的ByteBuffer,如果发现创建的缓冲区容量太小,唯一的选择就是重新创建一个大小合适的缓冲区.

1.2 通过包装一个已有的数组来创建
    如下,通过包装的方法创建的缓冲区保留了被包装数组内保存的数据.
    ByteBuffer buffer=ByteBuffer.wrap(byteArray);

    如果要将一个字符串存入ByteBuffer,可以如下操作:
    String sendString="你好,服务器. ";
    ByteBuffer sendBuffer=ByteBuffer.wrap(sendString.getBytes("UTF-16"));
分享到:
评论
1 楼 spdx4046 2012-07-27  
我发现用数组和不用数组的差别很大很大哎!
比如:      
ByteBuffer buffer = ByteBuffer.allocate( 100 );
        ByteBuffer buffer1 = ByteBuffer.allocate(100);
       
        ByteBuffer[] bs = new ByteBuffer[2];
        bs[0] = buffer;
        bs[1] = buffer1;

然后**.read(bs);



ByteBuffer buffer = ByteBuffer.allocate( 200 );
然后**.read(buffer)

这两者的效率是几倍的关系!

本想用ByteBuffer数组的方式 处理原本需要substring方式截取字符串解析数据的,现在不能用了!

相关推荐

    Java NIO学习笔记——ByteBuffer用法

    本文主要关注的是Java NIO中的ByteBuffer,一个关键的数据容器,用于在通道(Channel)和缓冲区(Buffer)之间传输数据。ByteBuffer的用法是Java NIO学习中的核心内容。 首先,我们了解下ByteBuffer的基本概念。...

    学习笔记 java\CoreJava笔记\CoreJava_day21

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

    javaNIO学习笔记

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

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

    - **NIO的缓冲区**: 用于存储不同数据类型的临时容器,包括ByteBuffer、CharBuffer等。 - **NIO的非阻塞**: 通过设置Channel为非阻塞模式来避免等待IO操作完成。 - **Channel**: 可以理解为数据传输的通道,提供...

    Netty源码阅读笔记

    它的作用类似于Java NIO中的ByteBuffer,但它提供了更加丰富的功能。ChannelBuffer有readerIndex和writerIndex两个指针,分别用于标记读取位置和写入位置。在进行数据读写时,通过调整这两个指针,可以实现对数据的...

    自动netty笔记111

    Netty提供了一种高效的数据缓冲区实现——ByteBuf,它比Java的ByteBuffer更易用且性能更好。ByteBuf提供了两个索引,head(读索引)和tail(写索引),用于跟踪已读和未读数据,支持动态扩容和预分配。 3. **...

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

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

    JAVA NIO学习笔记.docx

    ByteBuffer buffer = ByteBuffer.allocate(1024); while (true) { buffer.clear(); int r = fcin.read(buffer); if (r == -1) { break; } buffer.flip(); fcout.write(buffer); } } } ``` 在这个例子...

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

    ### Mina2.0阅读源码笔记知识点梳理 #### 一、Mina 概述与官方资源 **Mina** 是 Apache 基金会下的一个开源项目,它为开发者提供了一个高性能且易于使用的网络应用框架。Mina 的设计目标是帮助用户轻松地开发出高...

    mina学习笔记,记录所有API

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

    java NIO学习系列 笔记

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

    JAVA上课笔记class_13

    ### JAVA上课笔记class_13知识点总结 #### I/O与对象序列化 在Java中,I/O(输入/输出)操作是程序与外部资源(如文件、网络等)交互的基础。其中,`ObjectInputStream`和`ObjectOutputStream`是用于处理对象序列...

    Apache mina2学习笔记DEMO

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

    netty源码阅读笔记.pdf

    这本书《Netty源码阅读笔记》作者AsiaLee通过一系列的文章深入剖析了Netty的内部机制,旨在帮助读者理解并掌握Netty的核心功能和设计思想。 1. **Netty源码分析系列文章**:这部分内容可能涵盖了Netty的整体架构、...

    NIO笔记.doc

    - Java NIO有多种类型的缓冲区,如ByteBuffer、CharBuffer、ShortBuffer等,对应不同数据类型。缓冲区的操作包括allocate、put、get、flip、clear和rewind等。 5. **选择器(Selector)**: - 选择器允许单线程...

    NIO学习笔记

    Java NIO提供了多种类型的缓冲区,如ByteBuffer、CharBuffer、IntBuffer等。 3. **选择器(Selector)**:选择器允许单个线程监控多个通道,当某个通道准备就绪时,选择器会通知我们,从而实现多路复用。 接下来,...

    androidOpenGLES笔记1-基础参照.pdf

    在实际开发中,为了优化性能,通常会将顶点数据、颜色信息等存储在ByteBuffer、FloatBuffer等特定类型的Buffer中,利用Buffer提供的方法进行快速读写。例如,putInt和putFloat等方法可以方便地将整型和浮点型数据...

    androidOpenGLES笔记1-基础借鉴.pdf

    例如,ByteBuffer、CharBuffer等,可以用于存储顶点、颜色等图形数据,方便地传递给OpenGL ES进行渲染。 总之,OpenGL ES是移动设备上的关键图形接口,通过其API和可编程管道特性,开发者可以构建丰富的图形应用...

Global site tag (gtag.js) - Google Analytics