Java NIO 之 ByteBuffer

抽象类ByteBuffer

  • ByteBuffer的继承关系

  • 父类

  • 子类

目前,大概有5个实现类

  • ByteBuffer 底层,主要依赖?

顾名思义,从ByteBuffer的名称来看,这个缓冲区针对的是字节类型的缓冲区,

从源码中,也可以查询到, 就是字节数组

  • ByteBuffer的主要api

我这里仅仅分享一下,get,put,因为这两个方法用到的最多了。

  • put 操作

目前有5个实现类,我们可以依次查看,到底如何实现的

DirectByteBuffer.java

DirectByteBufferR.java

HeapByteBuffer.java

HeapByteBufferR.java

  • get操作

get操作,目前有两种实现思路,如下所示

HeapByteBuffer.java

DirectByteBuffer.java

  • 总结:

其实,当我看到这些的时候,很开心,印证了自己的猜想,突然意识到,JavaNIO的Buffer,也是对数组的封装;那么按照类似的思路,我们也可以慢慢的制定属于我们自己的框架。感觉有些事件一下子相同了。心里有底气了。

很明显提供了一些思路,当我们在开发自己的框架时,如果有场景需要缓存的话,也可以这样做。

其他Buffer的实现类,也类似,目前就不在一一看了。

//不知道为什么JDK里的Buffer源码里,会有很多空白行,感觉格式排版有问题吧

时间: 2024-07-31 06:34:15

Java NIO 之 ByteBuffer的相关文章

Java NIO 之 ByteBuffer 测试用例

分享一下,关于ByteBuffer的一些非常基础的测试用例 package xingej.buffer.test001; import java.nio.ByteBuffer; //注意:1.原生JAVA NIO的ByteBuffer的缓冲区是不能添加字符串的,其实,从名字也可以看出来,是Byte + Buffer =>ByteBuffer //也就是说,ByteBuffer是针对字节的缓存区 public class ByteBufferTest {     public static voi

java nio通过ByteBuffer输出文件信息

1.通过ByteBuffer的get()方法每次读取一个字节转换成char类型输出. fc = new FileInputStream("src/demo20/data.txt").getChannel(); ByteBuffer buff = ByteBuffer.allocate(BSIZE); buff = ByteBuffer.allocateDirect(BSIZE); fc.read(buff); buff.flip(); while (buff.hasRemaining(

IO的详细解释:It's all about buffers: zero-copy, mmap and Java NIO

There are use cases where data need to be read from source to a sink without modification. In code this might look quite simple: for example in Java, you may read data from one InputStream chunk by chunk into a small buffer (typically 8KB), and feed

java.nio.ByteBuffer中flip,rewind,clear方法的区别

对缓冲区的读写操作首先要知道缓冲区的下限.上限和当前位置.下面这些变量的值对Buffer类中的某些操作有着至关重要的作用: limit:所有对Buffer读写操作都会以limit变量的值作为上限. position:代表对缓冲区进行读写时,当前游标的位置. capacity:代表缓冲区的最大容量(一般新建一个缓冲区的时候,limit的值和capacity的值默认是相等的). flip.rewind.clear这三个方法便是用来设置这些值的. clear方法 public final Buffer

Java NIO中的缓冲区Buffer(一)缓冲区基础

什么是缓冲区(Buffer) 定义 简单地说就是一块存储区域,哈哈哈,可能太简单了,或者可以换种说法,从代码的角度来讲(可以查看JDK中Buffer.ByteBuffer.DoubleBuffer等的源码),Buffer类内部其实就是一个基本数据类型的数组,以及对这个缓冲数组的各种操作: 常见的缓冲区如ByteBuffer.IntBuffer.DoubleBuffer...内部对应的数组依次是byte.int.double... 与通道的关系 在Java NIO中,缓冲区主要是跟通道(Chann

java nio

NIO 是java nonblocking(非阻塞) IO 的简称,在jdk1.4 里提供的新api .Sun 官方标榜的特性如下: 为所有的原始类型提供(Buffer)缓存支持.字符集编码解码解决方案. Channel :一个新的原始I/O 抽象. 支持锁和内存映射文件的文件访问接口. 提供多路(non-bloking) 非阻塞式的高伸缩性网络I/O . Java NIO非堵塞应用通常适用用在I/O读写等方面,我们知道,系统运行的性能瓶颈通常在I/O读写,包括对端口和文件的操作上,之前,在打开

JAVA NIO 内存映射(转载)

原文地址:http://blog.csdn.net/fcbayernmunchen/article/details/8635427 Java类库中的NIO包相对于IO 包来说有一个新功能是内存映射文件,日常编程中并不是经常用到,但是在处理大文件时是比较理想的提高效率的手段.本文我主要想结合操作系统中(OS)相关方面的知识介绍一下原理. 在传统的文件IO操作中,我们都是调用操作系统提供的底层标准IO系统调用函数 read().write() ,此时调用此函数的进程(在JAVA中即java进程)由当

Java NIO -- 管道 (Pipe)

Java NIO 管道是2个线程之间的单向数据连接. Pipe有一个source通道和一个sink通道.数据会被写到sink通道,从source通道读取. 举个例子: package com.soyoungboy.nio; import java.io.IOException; import java.nio.ByteBuffer; import java.nio.channels.Pipe; import org.junit.Test; public class TestPipe { @Tes

Linux IO模型与Java NIO

概述看Java NIO一篇文章的时候又看到了"异步非阻塞"这个概念,一直处于似懂非懂的状态,想解释下到底什么是异步 什么是非阻塞,感觉抓不住重点.决定仔细研究一下.本文试图研究以下问题: web server原理,bio的connector与nio的connector在架构上到底什么区别? NIO的优势到底在哪里,是如何应用到实践中的? 同步/异步.阻塞/非阻塞到底是什么概念,引出的IO模型同步阻塞.同步非阻塞.异步阻塞.异步非阻塞的具体使用场景,适用的场景是怎样的? bio nio也