Java NIO——2 缓冲区
}
public class BufferFillDrain
{
public static void main(String[] argv) throws Exception
{
CharBuffer buffer = CharBuffer.allocate(100); while (fillBuffer(buffer))
{
buffer.flip();
drainBuffer(buffer);
buffer.clear();
}
} private static void drainBuffer(CharBuffer buffer)
{
while (buffer.hasRemaining())
{
System.out.print(buffer.get());
} System.out.println("");
} private static boolean fillBuffer(CharBuffer buffer)
{
if (index >= strings.length) { return (false); } String string = strings[index++]; for (int i = 0; i < string.length(); i++)
{
buffer.put(string.charAt(i));
} return (true);
} private static int index = 0; private static String[] strings =
{ "A random string value", "The product of an infinite number of monkeys",
"Hey hey we're the Monkees",
"Opening act for the Monkees: Jimi Hendrix",
"'Scuse me while I kiss this fly", // Sorry Jimi ;-)
"Help Me! Help Me!", };
}
The product of an infinite number of monkeys
Hey hey we're the Monkees
Opening act for the Monkees: Jimi Hendrix
'Scuse me while I kiss this fly
Help Me! Help Me!
并使缓冲区对重新填充容量准备就绪。
}
ByteOrder.LITTL_ENDIAN 为参数的order()函数来改变。
视图的字节顺序设定在创建后不能被改变,而且如果原始的字节缓冲区的字节顺序在之后被改变,它也不会受到影响
默认字节顺序总是 ByteBuffer.BIG_ENDIAN,无论系统的固有字节顺序是什么。Java 的默认字节顺序是大端字节顺序,这允许类文件等以及串行化的对象可以在任何 JVM 中工作。
ByteBuffer.allocateDirect()
)
ByteBuffer.allocateDirect()函数产生的,
注意用一个 wrap()函数所创建的被包装的缓冲区总是非直接的。
public class BufferCharView
{
public static void main (String [] argv)
throws Exception
{
ByteBuffer byteBuffer =
ByteBuffer.allocate (7).order (ByteOrder.BIG_ENDIAN);
CharBuffer charBuffer = byteBuffer.asCharBuffer( ); // Load the ByteBuffer with some bytes
byteBuffer.put (0, (byte)0);
byteBuffer.put (1, (byte)'H');
byteBuffer.put (2, (byte)0);
byteBuffer.put (3, (byte)'i');
byteBuffer.put (4, (byte)0);
byteBuffer.put (5, (byte)'!');
byteBuffer.put (6, (byte)0); println (byteBuffer);
println (charBuffer);
} // Print info about a buffer
private static void println (Buffer buffer)
{
System.out.println ("pos=" + buffer.position( )
+ ", limit=" + buffer.limit( )
+ ", capacity=" + buffer.capacity( )
+ ": '" + buffer.toString( ) + "'");
}
}
输出元素:
pos=0, limit=3, capacity=3: 'Hi!'
public class Unsigned
{
public static short getUnsignedByte (ByteBuffer bb)
{
return ((short)(bb.get( ) & 0xff));
} public static void putUnsignedByte (ByteBuffer bb, int value)
{
bb.put ((byte)(value & 0xff));
} public static short getUnsignedByte (ByteBuffer bb, int position)
{
return ((short)(bb.get (position) & (short)0xff));
} public static void putUnsignedByte (ByteBuffer bb, int position,
int value)
{
bb.put (position, (byte)(value & 0xff));
} // --------------------------------------------------------------- public static int getUnsignedShort (ByteBuffer bb)
{
return (bb.getShort( ) & 0xffff);
} public static void putUnsignedShort (ByteBuffer bb, int value)
{
bb.putShort ((short)(value & 0xffff));
} public static int getUnsignedShort (ByteBuffer bb, int position)
{
return (bb.getShort (position) & 0xffff);
} public static void putUnsignedShort (ByteBuffer bb, int position,
int value)
{
bb.putShort (position, (short)(value & 0xffff));
} // --------------------------------------------------------------- public static long getUnsignedInt (ByteBuffer bb) {
return ((long)bb.getInt( ) & 0xffffffffL);
} public static void putUnsignedInt (ByteBuffer bb, long value)
{
bb.putInt ((int)(value & 0xffffffffL));
} public static long getUnsignedInt (ByteBuffer bb, int position)
{
return ((long)bb.getInt (position) & 0xffffffffL);
} public static void putUnsignedInt (ByteBuffer bb, int position,
long value)
{
bb.putInt (position, (int)(value & 0xffffffffL));
}
}
Java NIO——2 缓冲区的更多相关文章
- Java NIO 之缓冲区
缓冲区基础 所有的缓冲区都具有四个属性来 供关于其所包含的数据元素的信息. capacity(容量):缓冲区能够容纳数据的最大值,创建缓冲区后不能改变. limit(上界):缓冲区的第一个不能被读或写 ...
- Java NIO之缓冲区Buffer
Java NIO的核心部件: Buffer Channel Selector Buffer 是一个数组,但具有内部状态.如下4个索引: capacity:总容量 position:下一个要读取/写入的 ...
- Java NIO Buffer缓冲区
原文链接:http://tutorials.jenkov.com/java-nio/buffers.html Java NIO Buffers用于和NIO Channel交互.正如你已经知道的,我们从 ...
- Java NIO ———— Buffer 缓冲区详解 入门
引言缓冲区是一个用于特定基本类型的容器.由java.nio 包定义,所有缓冲区都是 Buffer 抽象类的子类. Java NIO 中的 Buffer ,主要用于与NIO 通道进行交互.数据从通道存入 ...
- Java NIO之缓冲区
1.简介 Java NIO 相关类在 JDK 1.4 中被引入,用于提高 I/O 的效率.Java NIO 包含了很多东西,但核心的东西不外乎 Buffer.Channel 和 Selector.这其 ...
- Java NIO -- 直接缓冲区与非直接缓冲区
直接缓冲区与非直接缓冲区: 非直接缓冲区:通过 allocate() 方法分配缓冲区,将缓冲区建立在 JVM 的内存中直接缓冲区:通过 allocateDirect() 方法分配直接缓冲区,将缓冲区建 ...
- Java NIO流 -- 缓冲区(Buffer,ByteBuffer)
用来定义缓冲区的所有类都以Buffer类为基类,Buffer定义了缓冲区的基本特征. 直接子类: ByteBuffer 用来存储byte类型的缓冲区,可以在这种缓冲区中存储任意其他基本类型的二进制值( ...
- 海纳百川而来的一篇相当全面的Java NIO教程
目录 零.NIO包 一.Java NIO Channel通道 Channel的实现(Channel Implementations) Channel的基础示例(Basic Channel Exampl ...
- Java NIO:通道
最近打算把Java网络编程相关的知识深入一下(IO.NIO.Socket编程.Netty) Java NIO主要需要理解缓冲区.通道.选择器三个核心概念,作为对Java I/O的补充, 以提升大批量数 ...
随机推荐
- Unix/Linux环境C编程入门教程(24) MySQL 5.7.4 for Red Hat Enterprise 7(RHEL7)的安装
远观历史, MySQL的主要目的是为了能够在单处理器核心的商业服务器上运行.如今MySQL的一个变化用户可能不会注意到,那就是甲骨文已经开始重新架构MySQL的代码,使它大量的模块化.如软件解析器,优 ...
- 窥探 kernel --- 进程调度的目标,nice值,静态优先级,动态优先级,实时优先级
http://blog.chinaunix.net/uid-24227137-id-3595610.html 窥探 kernel --- 进程调度的目标,nice值,静态优先级,动态优先级,实时优先级 ...
- Appium for Windows环境搭建
服务环境: 1.安装Nodejs 下载nodejs安装包(http://nodejs.org/download/)安装 测试安装是否成功:运行cmd,输入node -v 2.安装android的SKD ...
- 第一次用shell脚本来自动运行带参程序
将目录下的part-开头的文件带入程序处理 #!bin/sh FILES=/data5/follow_relation_list_part_00000/part-* file="" ...
- ORACLE AUTOMATIC STORAGE MANAGEMENT翻译-第二章 ASM instance(1)
第二章 ASM INSTANCE ASM的类型,例如可以: 10g后ORACLE instance 类型增加了一个ASM种类.参数INSTANCE_TYPE=ASM进行设置. ASM实例启动命令: ...
- Android官方技术文档翻译——Ant 任务
本文译自Android官方技术文档<Ant Tasks>,原文地址:http://tools.android.com/tech-docs/ant-tasks. 由于是抽着时间译的.所以这篇 ...
- PictureBox从本地上传图片和保存在磁盘目录
private void mypicbox_Click(object sender, EventArgs e) { try { OpenFileDialog ofdPic = new OpenFile ...
- Mvc5+Entity Framework6 之二----在MVC中用Entity Framework实现基本的CRUD
目标:创建控制器和视图的代码,实现CRUD(创建,读取,更新,删除)功能 创建一个详细信息页 控制器为Students的Index页生成的代码排除Enrollments属性在外,因为该属性中关联着一个 ...
- Oracle数据库运维优化六脉神剑口诀
我们知道数据库性能是数据库运维中至关重要的一个部分,据传在Oracle数据库的江湖中也有威力无比的六脉神剑技能,下面与大家免费分享Oracle大师们广为流传的六脉神剑口诀,一般人我不告诉他哦:) 少商 ...
- JS参数使用带参数的方法
大家都知道,在JS之中,一个变量的生命周期不是以大括号为界限的,所以即使是使用在循环或判断中的变量,外部也可以使用.可如果我们在循环或变量中使用了方法,而且这个方法使用了循环中的变量,那么后面的代码是 ...