`
lixjluck
  • 浏览: 104616 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

记录一下ByteBuffer调用路径

 
阅读更多

在某个地方_endpoint.fill(buffer);

调用_channel.read(bbuf);

这里看一下SocketChannelImpl.read方法

然后调用IOUtil.read(fd, bytebuffer, -1L, nd, readLock);

 

if(bytebuffer instanceof DirectBuffer)
            return readIntoNativeBuffer(filedescriptor, bytebuffer, l, nativedispatcher, obj);
        bytebuffer1 = null;
        int j;
        bytebuffer1 = Util.getTemporaryDirectBuffer(bytebuffer.remaining());
        int i = readIntoNativeBuffer(filedescriptor, bytebuffer1, l, nativedispatcher, obj);
 bytebuffer1.flip();
        if(i > 0)
            bytebuffer.put(bytebuffer1);
 

如果是使用了DirectBuffer,那么直接从网卡(socket)读取数据放入buffer里

否则生成一个临时的DirectBuffer,然后读取数据,再后做两个buffer的复制工作

 

分享到:
评论

相关推荐

    Android中的ByteBuffer解析

    3. **flip()**:在写入数据后,调用`flip()`会将位置设为0,限制设为当前位置,使得缓冲区进入读取模式。 4. **clear()**:重置位置为0,但不改变限制,常用于清空缓冲区以便重新写入。 5. **rewind()**:将位置设...

    protobuf+long+bytebuffer

    从网络或者存储中获取到protobuf编码的二进制数据后,可以创建一个`ByteBuffer`实例,然后调用protobuf编译器生成的类的解析方法,传入`ByteBuffer`实例进行解码。`ByteBuffer`会根据protobuf编码规则正确地读取和...

    ByteBuffer.zip

    - 结束位置更新:写入操作后,ByteBuffer的position指针会前进,记录已经写入的字节数量。 2. **拆包过程**: - 初始化缓冲区:从网络接收或文件读取到字节流后,将其加载到ByteBuffer实例中。 - 读取数据:使用...

    Java NIO学习笔记——ByteBuffer用法

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

    NIO(byteBuffer)按行读取文件

    使用nio byteBuffer 实现按行读取文件(大文件) 在window/linux/macOS上均测试通过 对于中文乱码也已处理成功 完整注释,可随需求更改 有问题请邮件:mly610865580@126.com

    【IT十八掌徐培成】Java基础第26天-05.ByteBuffer-mark-pos-limit-cap-flip.zip

    - **flip()**:这个方法在数据填充后,准备读取数据时调用。它将当前位置设为0,同时将限制设为之前的位置,这样就将缓冲区从写模式切换到了读模式。 在实际应用中,`ByteBuffer`常用于网络I/O、文件I/O或者与硬件...

    Android在JNI中使用ByteBuffer的方法

    ByteBuffer作为一个关键的类,它在NIO(New IO)包中,提供了对内存块的直接访问,使得在JNI中进行数据传输更为高效。下面将详细介绍在Android JNI中使用ByteBuffer的方法及其相关知识点。 首先,了解ByteBuffer的...

    ByteBuffer.cs

    主要解决从流中获取数据,缓存,拆解,可用于TCP粘包问题

    易语言汇编版ByteBuffer源码

    易语言汇编版ByteBuffer源码是一个专为易语言平台设计的、用于处理网络协议数据的模块。在IT领域,ByteBuffer通常被用作一个高效的缓冲区,它可以存储和操作字节序列,尤其在处理网络通信时,能有效地组织和传输数据...

    java jna 调用pytorch c++模型推理

    例如,Java中的`ByteBuffer`可以用来包装C++中的指针,以传递和接收原始字节数据。 6. **内存管理**:在Java中调用C++函数时,必须注意内存管理,确保在适当的时候释放C++分配的内存,以防止内存泄漏。 7. **错误...

    深入理解Apache Mina (6)---- Java Nio ByteBuffer与Mina ByteBuffer的区别

    本篇将深入探讨Java NIO(非阻塞I/O)中的ByteBuffer和Mina库自定义的ByteBuffer之间的区别。 Java NIO的ByteBuffer是Java标准库提供的一个核心类,它是通道(Channel)和缓冲区(Buffer)之间数据传输的主要媒介。它...

    易语言-易语言汇编版ByteBuffer

    2. **数据位置管理**:内部维护了一个读写指针,记录了当前处理数据的位置。通过`position`属性,可以获取或设置这个位置,实现对缓冲区数据的随机访问。 3. **数据边界检查**:在读写操作前,ByteBuffer会检查当前...

    系统调用与库函数对于不同buffer size写文件效率对比

    `write和fwrite效率比较.doc`文档可能包含了测试的详细描述和分析,而`write与fwrite效率比较.xls`是一个电子表格,可能记录了测试数据和统计结果,如平均时间、吞吐量等。 为了得到具体的结果,我们需要运行这些...

    ios-byteBuffer:在objective-c中重写一个类

    ios-byteBuffer [![CI状态]( Lee / ios-byteBuffer.svg?style = flat)]( Lee / ios-byteBuffer ) 用法 #分配 ByteBuffer *buffer = [ByteBuffer initWithOrder: ByteOrderLittleEndian]; #输入数据 - ( ...

    java api之ByteBuffer基础、应用场景、实战讲解

    java api之ByteBuffer基础、应用场景、实战讲解 文档中有丰富的例子代码实现

    dena-bytebuffer:dena-bytebuffer

    《深入解析dena-bytebuffer:JavaScript中的高效二进制数据处理》 在JavaScript的世界里,处理二进制数据是一项常见的任务,特别是在网络通信、游戏开发、图像处理等领域。`dena-bytebuffer`库就是为了解决这个问题...

    基于java的开发源码-调用本地库 JNAerator.zip

    3. **运行JNAerator**: 使用命令行工具,输入JNAerator的命令,指定本地库的头文件路径。JNAerator会解析头文件,并生成对应的Java接口。 4. **使用生成的Java接口**: JNAerator生成的Java接口可以直接导入到你的...

    jdk api-ServerSocketChannel、Selector、ByteBuffer结合实现网络报文间的通讯

    jdk api-ServerSocketChannel、Selector、ByteBuffer结合实现网络报文间的通讯

Global site tag (gtag.js) - Google Analytics