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();
}
}
分享到:
相关推荐
javaNIO学习笔记(csdn)————程序
java NIO的基本知识点学习笔记,不包含具体代码
JAVA NIO学习资料JAVA NIO学习资料
java NIO和java并发编程的书籍java NIO和java并发编程的书籍java NIO和java并发编程的书籍java NIO和java并发编程的书籍java NIO和java并发编程的书籍java NIO和java并发编程的书籍java NIO和java并发编程的书籍java...
Java NIO系列教程(一) Java NIO 概述 Java NIO系列教程(二) Channel Java NIO系列教程(三) Buffer Java NIO系列教程(四) Scatter/Gather Java NIO系列教程(五) 通道之间的数据传输 Java NIO系列教程(六)...
NULL 博文链接:https://chinaestone.iteye.com/blog/468138
IO 是主存和外部设备 ( 硬盘、终端和网络等 ) 拷贝数据的过程。 IO 是操作系统的底层功能实现,底层通过 I/O 指令进行完成。 所有语言运行时系统提供执行 I/O 较高级别的... (c 的 printf scanf,java 的面向对象封装 )
java学习笔记1(java io/nio)设计模式
Java nio 超大数据文件 超大数据文件Java nio 超大数据文件 超大数据文件Java nio 超大数据文件 超大数据文件Java nio 超大数据文件 超大数据文件Java nio 超大数据文件 超大数据文件Java nio 超大数据文件 超大数据...
Java NIO英文高清原版
Java NIO学习资料+代码.zip
Java NIO 深入探讨了 1.4 版的 I/O 新特性,并告诉您如何使用这些特性来极大地提升您所写的 Java 代码的执行效率。这本小册子就程序员所面临的有代表性的 I/O 问题作了详尽阐述,并讲解了 如何才能充分利用新的 I/O ...
讲解了 JavaIO 与 JAVA NIO区别,JAVA NIO设计理念,以及JDK中java NIO中语法的使用
Nio学习笔记
Java NIO可以让你非阻塞的使用IO,例如:当线程从通道读取数据到缓冲区时,线程还是可以进行其他事情。当数据被写入到缓冲区时,线程可以继续处理它。从缓冲区写入通道也类似。 Java NIO: Selectors(选择器) ...
java nio 实现socketjava nio 实现socketjava nio 实现socketjava nio 实现socketjava nio 实现socket
由于对于本程序 116个字节以上的行才有意义,所以 在next实现方法中,有对 116 长度的判断,否则返回 null 修正了之前版本中的问题: 修正后的方法 private int readByte() throws IOException{ fbb.rewind(); ...
java_nio学习文档
java nio入门学习,两个pdfjava nio入门学习,两个pdf