Java NIO(2) Buffer 缓冲器详解

Java原生网络编程 ---- IO多路复用 Java是在jdk1.4引入支持NIO的库。前面博客说过BIO通讯,这种模式下服务端一个线程只处理一个会话。当线程被阻塞在read() 或 write()时,不能够做其他的事情。线程在服务器属于比较昂贵的资源。BIO的方式会造成很大的资源浪费。NIO,被称为IO多路复用,中心思想既是对服务器的线程进行复用,从而提高服务器资源利用的效率。 阅读详情

Java NIO

1. Java NIO 基本组件介绍

2. Java NIO 核心组件:Buffer 缓冲器

3. Java NIO 核心组件:Channel 通道

4. Java NIO 核心组件:Selector 选择器,Pipe 管道


Buffer 缓冲器


Java NIO 的 Buffer 由 数据和索引(用于高效访问和操纵数据)组成,这些索引包括4个:
  • mark(标记索引)
  • position(位置索引)
  • limit(限制索引)
  • capacity(容量索引);
这 4 个索引的数值关系 0 <= mark <= position <= limit <= capacity默认的初始化值:0 = position ,limit = capacity

唯一与通道 Channel 进行交互的 Buffer 是 ByteBuffer,其他 Buffer 类似都会转化为 ByteBuffer 之后再与 Channel 进行交互,这些缓冲器类型包括以下:
CharBuffer、DoubleBuffer、IntBuffer、LongBuffer、ShortBuffer、FloatBuffer;

Buffer 常用的 API


ByteBuffer 常用的 API



缓存区的创建,写入,读取(以 ByteBuffer 示例)

 
//直接通过包装字节数组创建 ByteBuffer        
ByteBuffer byteBuffer1 = ByteBuffer.wrap(new byte[]{
           
           21,23,5,98,123,34,22});
ByteBuffer byteBuffer2 = ByteBuffer.wrap("are you ok".getBytes("UTF-8"));
//创建一个指定容量的空白 ByteBuffer
ByteBuffer byteBuffer = ByteBuffer.allocate(1024);
//向 ByteBuffer 写入数据
byteBuffer.put((byte)12);
byteBuffer.putChar('a');
byteBuffer.putDouble(23.33);
byteBuffer.putLong(23333333333333L);
byteBuffer.put("are you ok?".getBytes("UTF-8"));
//从 ByteBuffer 读取数据
JavaNIO概述 三个月没写博客了,主要也不知道写什么,光顾着向GitHub传题目了。理了下思路,并结合了《Thinking in Java》和API文档,分享了下自己对NIO的理解,当然这只是针对于文件I/O,毕竟其他内容实在太多太多了… NIO概述(文件I/O) 20022月13日,JDK1.4发布,工程代号为Merlin(灰背隼)。JDK1.4发布了很多新的特性,其中就包含NIOjava.ni... 阅读详情

相关推荐

Java IO--Buffer

一、概述 我们在之前的文章中介绍输入输出流的时候提到过,输入流InputStream的read方法从输入流中读取数据的时候,如果数据源中没有数据,那么这个方法会阻塞。输出流OutputStream的write方法在写入数据时同样也会阻塞,也就是之前介绍的输入、输出流都是阻塞式的。不仅如此,传统的输入、输出流都是通过字节的移动来处理的,也就是说面向流的输入输出每次只能处理一个字节,因此面向流的输入...

天道酬勤 地道酬善 人道酬诚 1654

NIO基础

记录黑马netty学习

qq_41439608的博客 467

Java学习】7步教你彻底掌握Java NIO Buffer,你还在等什么?

大家好,欢迎来到今天的编程课堂!今天我们要一起深入了解Java NIO中的核心概念之一——Buffer缓冲器)。NIO中的Buffer与传统的I/O有所不同,它提供了更高效、更灵活的数据处理方式。废话不多说,让我们直奔主题吧!Buffer简介在Java NIO中,Buffer是一个对象,它包含了一些要写入或读出的数据。在写模式下,你可以将数据放入Buffer中;在读模式下,你可以从Buffer中取出数据。Buffer本质上是一个容器对象,用于存储基本类型的数据。主要类型ByteBuffer:字节缓冲器

java专栏 1828

Java 学习笔记之 ByteBuffer

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

gavin5033的博客 453

Java学习笔记(2)——字节流

1.字节流 1)InputStream、OutputStream InputStream抽象了应用程序读取数据的方式 OutputStream抽象了应用程序写出数据的方式 2)EOF = End  读到-1就读到结尾 3)输入流:(如键盘)基本方法 int b = in.read();  读取一个字节无符号填充到int低八位.-1是EOF in.read(byte[] buf

chao2016的博客 1928

javaNIO实战2----> java NIO的缓冲区Buffer实战

1、Buffer缓冲区详细介绍 在java NIO套件中,Buffer的作用主要就是用来存取数据的,Buffer是一个抽象类,其类图主要如下: 每一个Buffer实现对应着这种Buffer只能存储此种数据,例如BytreBuffer就只能存储字节数据,这些缓冲区都是用其实现类的静态方法allocate()来进行分配,案例如下: 其中1024表示分配的缓冲区的容量,一旦分配就不能修改容量。 ByteBuffer allocate = ByteBuf...

qq_34978129的博客 304

Java NIO使用及原理之--缓冲器buffer2

转载自:李会军•宁静致远 在上一篇文章中介绍了缓冲区内部对于状态变化的跟踪机制,而对于NIO中缓冲区来说,还有很多的内容值的学习,如缓冲区的分片与数据共享,只读缓冲区等。在本文中我们来看一下缓冲区一些更细节的内容。 缓冲区的分配 在前面的几个例子中,我们已经看过了,在创建一个缓冲区对象时,会调用静态方法allocate()来指定缓冲区的容量,其实调用 allocate()

南朝烟雨的博客 1247

JAVA学习-NIO.Buffer(缓冲器)

Java NIO中的缓冲器Buffer)是用来存储数据的对象。它是一个固定大小的数组,可以容纳特定类型的数据。

weixin_69763181的博客 768

Java NIOBuffer

NIO BufferNIO的核心之一。 在与 NIO Channel 进行交互时, 需要使用 NIO Buffer, 将数据从 Buffer读取到 Channel 或者从 Channel 中写入Buffer

学习、学习、再学习 604

Java NIO学习系列一:Buffer

  前面三篇文章中分别总结了标准Java IO系统中的File、RandomAccessFile、I/O流系统,对于I/O系统从其继承体系入手,力求对类数量繁多的的I/O系统有一个清晰的认识,然后结合一些I/O的常规用法来加深对标准I/O系统的掌握,感兴趣的同学可以看一下:   <<Java I/O系统学习系列一:File和RandomAccessFile>>   &l...

weixin_30781631的博客 104

Java NIO是什么?零拷贝的概念

NIO的出现在于提高IO的速度,它相比传统的输入/输出流速度更快。NIO通过管道Channel和缓冲器Buffer来处理数据,可以把管道当成一个矿藏,缓冲器就是矿藏里的卡车。程序通过管道里的缓冲器进行数据交互,而不直接处理数据。程序要么从缓冲器获取数据,要么输入数据到缓冲器

程序员-杨胡广的博客 1195

Java NIO (2)Channel和Buffer

buffer缓冲器Buffer的基本用法使用Buffer读写数据一般遵循以下四个步骤:  1)写入数据到Buffer  2)调用flip()方法  3)从Buffer中读取数据  4)调用clear()方法或者compact()方法 当向buffer写入数据时,buffer会记录下写了多少数据。一旦要读取数据,需要通过flip()方法将Buffer从写模式切换到读模式。在读模式下,可以读取

JavaLab 604

NIO-Buffer详解

Buffer缓冲区实际上是内存中开辟的⼀块数组空间,⽤于存放数据。Java NIO中的buffer类提供了对这块数组缓冲区的基本操作。IO流的操作⾯向的是流对象,⽽NIO操作的数据都是⾯向Buffer缓冲区的。也就是说,读取数据是通过通道将数据存⼊到buffer中。写数据是将buffer缓冲区中的数据通过通道写到⽂件中。Java NIO提供了所有缓冲区的抽象基类Buffer

z2698751935的博客 1113

Java NioBuffer

了解历史 在 java1.4之前java io ,最核心的点是在"流"上;java io 的两大基石InputStream和OutputStream 也就是大家耳熟能祥的输入流和输出流,通过这个两个基石可以实现从外界读取数据到内存,以及将内存中数据写到外界;但是输入流和输出流有个弊端就是单向只能输入或者输出,而在java1.4提供的FileChannel不仅仅可以输入也同样可以输出,是一个双向的通道,更贴近操作系统的io操作,配合着Buffer 也就是该博文的主题,实现写入或者读取。 缓冲器 是什么

GTH07399的博客 251

Java NIO 详解

nio 的基本组成 1. Buffer 高效的数据容器,除布尔类型,所有原始数据类型都有Buffer实现。 使用步骤: 写入数据到 Buffer 调用flip()方法调整指针位置准备读取 从 Buffer 中读取数据 调用clear()方法或者compact()方法清理缓存 主要属性值: capacity:Buffer缓冲区大小,只能写入capacity个原始类型。不...

哈罗德Android笔记 2018

Java NIO,高效操作I/O流的必备技能

是这样的,在NIO零拷贝出现之前,一个I/O操作会将同一份数据进行多次拷贝。可以看下图,一次I/O操作对数据进行了四次复制,同时来伴随两次内核态和用户态的上下文切换,众所周知上下文切换是很耗费性能的操作。

JavaSouth南哥 3238

Java NIO学习笔记(二) Channel与Buffer

Java NIO中数据的读写操作始终是与缓冲区相关联的.数据是从通道读入缓冲区,从缓冲区写入到通道中的。缓冲区是定长的,基本上它只是一个列表,它的所有元素都是基本数据类型.缓冲区本质上是一块可以写入数据,然后可以从中读取数据的内存。这块内存被包装成NIO Buffer对象,并提供了一组方法,用来方便的访问该块内存。

不能说的秘密的博客 1902
上一篇: Java NIO(1) 基本组件简介
下一篇: Java NIO(3) 通道:FileChannel,SocketChannel,ServerSocketChannel
Al_assad
博客等级 码龄11年 591粉丝 341原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值