[nio] 1 - ByteBuffer

在NIO中,数据的读写操作始终是与缓冲区相关联的.读取时信道(SocketChannel)将数据读入缓冲区,写入时首先要将发送的数据按顺序填入缓冲区.

是将数据移进移出通道的唯一方式.可以把通道比如为煤矿(数据区),而把缓冲器比如为运煤车,想要得到煤一般都通过运煤车来获取,而不是直接和煤矿取煤。

缓冲区是定长的,基本上它只是一个列表,它的所有元素都是基本数据类型.

ByteBuffer是最常用的缓冲区,它提供了读写其他数据类型的方法,且信道的读写方法只接收ByteBuffer.因此ByteBuffer的用法是有必要牢固掌握的.

  1. 创建ByteBuffer

2. flip()

3. channel.read(ByteBuffer)

(1) ByteBuffer.get()

4. channel.write(ByteBuffer)

(2) ByteBuffer.put()

参考:

http://blog.csdn.net/mars5337/article/details/6576417

http://blog.sina.com.cn/s/blog_80cd5ba00101ma86.html

http://blog.csdn.net/baple/article/details/12749005

http://www.tuicool.com/articles/veUvy2

时间: 2024-08-25 23:45:58

[nio] 1 - 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

抽象类ByteBuffer ByteBuffer的继承关系 父类 子类 目前,大概有5个实现类 ByteBuffer 底层,主要依赖? 顾名思义,从ByteBuffer的名称来看,这个缓冲区针对的是字节类型的缓冲区, 从源码中,也可以查询到, 就是字节数组 ByteBuffer的主要api 我这里仅仅分享一下,get,put,因为这两个方法用到的最多了. put 操作 目前有5个实现类,我们可以依次查看,到底如何实现的 DirectByteBuffer.java DirectByteBuffer

NIO 之 ByteBuffer

前言 对于刚接触ByteBuffer人来说,想要完全理解会稍微有点困难,正巧前几天有人问我,想到好久没写文章,就整理一下. 概念理解 对于ByteBuffer的一些概念不理解的情况下,如果直接打开源码,硬啃,是一种方法,但是对于有些耐心不足的同学,恐怕坚持不下去. 第一点,ByteBuffer底层的存储结构就是数组,所有的操作都是基于数组的操作.数组有哪几个重要的属性呢?元素索引和数组长度. 上面的图就简单的理解为一个数组. 既然ByteBuffer的存储结构为一个数组,那么就离不开索引位置和数

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(

java NIO socket 通信实例

java Nio 通信与Bio通信主要不同点: 1.Nio中的单个channel即可支持读操作也可以支持写操作,而bio中读操作要用inputstream,写操作要outputstream. 2.nio 采用byteBuffer 作为内存缓存区,向channel里写或者度操作,bio基本是用byte[] 3.nio采用 selector组件轮询读取就绪channel 服务端demo代码: package com.my.socket3; import java.io.ByteArrayOutput

Android NIO(Noblocking I/O非阻塞I/O)小结

参考:http://www.cnblogs.com/cpcpc/archive/2011/06/27/2123009.html 对于Android的网络通讯性能的提高,我们可以使用Java上高性能的NIO (New I/O) 技术进行处理,NIO是从JDK 1.4开始引入的,NIO的N我们可以理解为Noblocking即非阻塞的意思,相对应传统的I/O,比如Socket的accpet().read()这些方法而言都是阻塞的. NIO主要使用了Channel和Selector来实现,Java的Se

Netty精粹之玩转NIO缓冲区

摘要: 在JAVA NIO相关的组件中,ByteBuffer是除了Selector.Channel之外的另一个很重要的组件,它是直接和Channel打交道的缓冲区,通常场景或是从ByteBuffer写入Channel,或是从Channel读入Buffer:而在Netty中,被精心设计的ByteBuf则是Netty贯穿整个开发过程中的核心缓冲区,那么他们俩有什么区别呢?Netty对于缓冲区的设计对于高性能应用又带来了哪些值得借鉴的思路呢?本文在介绍ByteBuffer和ByteBuf基本概念的基础

【缓存区】ByteBuffer和IOBuffer你要了解的常用知识

mina中IOBuffer是Nio中ByteBuffer的衍生类,主要是解决Bytebuffer的两个不足,1.不能自动扩展容量 2.提供更加丰富的数据类型操作支持 1.先来学习下ByteBuffer你要了解的东西摘自 http://blackbeans.iteye.com/blog/836103这是一篇好文章,对ByteBuff讲的很清楚 查看ByteBuffer的API,看的我是一头雾水,搞不清什么mark.position.limit.flip.reset几个的用法,先看下面的例子: Ja

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