`

Java NIO学习笔记——ByteBuffer用法

    博客分类:
  • Java
阅读更多
package com.zhengtian.test;

import java.nio.Buffer;
import java.nio.ByteBuffer;
import java.nio.ByteOrder;
import java.nio.CharBuffer;

/**
 * @author zhengtian
 * 
 * @date 2011-6-14 上午09:47:31
 */
@SuppressWarnings("all")
public class testNio {
	public static void main(String[] args) {
		/**
		 * 分配空间 隐含地在内存中分配了一个byte型数组来存储10个byte
		 */
		ByteBuffer buffer = ByteBuffer.allocate(10);
		/**
		 * 填充元素 buffer.hasRemaining()用于判断缓冲区是否达到上界limit。 该填充过程等效于:int remainCount = buffer.remaining();for (int j = 0; j < remainCount;
		 * j++){buffer.put((byte) j++);}
		 */
		int i = 0;
		while (buffer.hasRemaining()) {
			buffer.put((byte) i++);
		}
		/**
		 * 翻转缓冲区 将缓冲区进行翻转操作,即在缓冲区写入完毕时,将缓冲区翻转成一个准备读出元素的状态。 flip操作等效于buffer.limit(buffer.position()).position(0);同时将mark设为-1。 源码如下:public final Buffer
		 * flip(){ limit = position;position = 0;mark = -1;return this;}
		 */
		buffer.flip();
		/**
		 * 读取缓冲区
		 */
		int remainCount = buffer.remaining();
		for (int j = 0; j < remainCount; j++) {
			System.out.print(buffer.get() + " ");
		}
		System.out.println();

		/**
		 * 字节顺序
		 */
		System.out.println("ByteOrder的字节顺序为:" + ByteOrder.nativeOrder());
		System.out.println("ByteBuffer的字节顺序为:" + buffer.order());
		CharBuffer charBuffer = CharBuffer.allocate(10);
		System.out.println("CharBuffer的字节顺序为:" + charBuffer.order());
		// 修改ButyBuffer的字节顺序
		buffer.order(ByteOrder.LITTLE_ENDIAN);
		System.out.println("ByteBuffer的字节顺序为:" + buffer.order());

		/**
		 * 只有ByteBuffer可以创建直接缓冲区,用wrap函数创建的缓冲区都是非直接的缓冲区
		 */
		ByteBuffer redirectByteBuffer = ByteBuffer.allocateDirect(10);
		System.out.println("判断缓冲区是否为直接缓冲区:" + redirectByteBuffer.isDirect());

		/**
		 * 先创建一个大端字节顺序的ByteBuffer,然后再创建一个字符视图缓冲区
		 */
		ByteBuffer bigByteBuffer = ByteBuffer.allocate(7).order(ByteOrder.BIG_ENDIAN);
		CharBuffer viewCharBuffer = bigByteBuffer.asCharBuffer();
		/**
		 * 在字符视图的基础上创建只读字符视图
		 */
		CharBuffer onlyReadCharBuffer = viewCharBuffer.asReadOnlyBuffer();
		/**
		 * 创建一个与原始缓冲区相似的新缓冲区,两个缓冲区共享数据元素,拥有同样的容量,但每个缓冲区拥有各自的位置、上界、标记属性。 对一个缓冲区的数据元素所做的改变会反映在另一个缓冲区上,新的缓冲区会继承原始缓冲区的这些属性。
		 */
		CharBuffer copyCharBuffer = viewCharBuffer.duplicate();
		/**
		 * 创建原始缓冲区子集的新缓冲区
		 */
		CharBuffer cutCharBuffer = viewCharBuffer.slice();
	}
}

分享到:
评论

相关推荐

    Java NIO——Java NIO

    Java NIO——Java NIO——Java NIO

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

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

    javaNIO学习笔记(csdn)————程序.pdf

    在Java NIO中,主要使用非阻塞I/O和I/O多路复用,尤其是通过选择器Selector实现。Selector允许一个线程处理多个通道的事件,当一个通道上有可读或可写事件时,选择器会返回相应的SelectionKey,然后通过这些键来处理...

    Java JDK 6学习笔记——ppt简体版

    Java JDK 6学习笔记是为Java初学者量身定制的一份宝贵资料,它涵盖了Java编程的基础概念、语法以及核心特性。这份PPT简体版旨在帮助读者快速掌握Java开发的基本技能,逐步成为一名合格的Java程序员。 Java JDK...

    javaNIO学习笔记

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

    JAVA NIO学习笔记.docx

    Java NIO(New Input/Output)是Java标准库在JDK 1.4引入的一组新的I/O API,它提供了一种不同于传统IO的高效、非阻塞的I/O操作方式。NIO的核心概念包括Channel、Buffer和Selector,它们共同构建了一个与操作系统...

    java NIO.zip

    Java NIO提供了诸如ByteBuffer、CharBuffer、IntBuffer等类型,对应于不同的数据类型。缓冲区具有读写位置,可以通过flip()、clear()和rewind()等方法来管理缓冲区的状态,从而高效地进行数据读写。 3. **选择器...

    学习笔记——资料

    【Java学习笔记——全面解析】 Java作为一种广泛应用的高级编程语言,是软件开发领域的核心力量。这份"学习笔记——资料"涵盖了Java学习的各个方面,旨在帮助初学者和有经验的开发者巩固基础,提升技能。以下是对这...

    java NIO和java并发编程的书籍

    java NIO和java并发编程的书籍java NIO和java并发编程的书籍java NIO和java并发编程的书籍java NIO和java并发编程的书籍java NIO和java并发编程的书籍java NIO和java并发编程的书籍java NIO和java并发编程的书籍java...

    JavaNIO chm帮助文档

    Java NIO系列教程(一) Java NIO 概述 Java NIO系列教程(二) Channel Java NIO系列教程(三) Buffer Java NIO系列教程(四) Scatter/Gather Java NIO系列教程(五) 通道之间的数据传输 Java NIO系列教程(六)...

    java jdk5.0学习笔记——良葛格

    良葛格的《Java JDK5.0学习笔记》是一本面向初学者的教程,旨在帮助读者掌握这个版本的核心概念和技术。以下是基于该书部分内容的知识点详解: 1. **泛型**:JDK 5.0引入了泛型,这是一种强大的类型系统增强,允许...

    JAVA NIO 学习资料

    Java NIO,全称为Non-Blocking Input/Output(非阻塞输入/输出),是Java从JDK 1.4版本开始引入的一种新的IO模型,它为Java应用程序提供了更高效的数据传输方式,尤其适用于高并发、大数据量的网络服务。与传统的IO...

    java学习笔记1(java io/nio)

    java学习笔记1(java io/nio)设计模式

Global site tag (gtag.js) - Google Analytics