package com.dirlist;
import java.nio.*;
public class IntBufferDemo {
/**
* 视图缓冲器,利用视图缓冲器对字节缓冲器进行封装
*/
private static final int BSIZE=1024;
public static void main(String[] args) {
ByteBuffer bb=ByteBuffer.allocate(BSIZE);
IntBuffer ib=bb.asIntBuffer();
ib.put(new int[]{11,42,47,99,143,811,1016});
System.out.println(ib.get(3));
ib.put(3,1999);
ib.flip();
while(ib.hasRemaining()){
int i=ib.get();
System.out.println(i);
}
}
}
package com.dirlist;
import java.nio.*;
public class ViewBuffer {
/**
* @param args
*/
public static void main(String[] args) {
ByteBuffer bb=ByteBuffer.wrap(new byte[]{0,0,0,0,0,0,0,'a'});
bb.rewind();
System.out.print("Byte Buffer:");
while(bb.hasRemaining()){
System.out.print(bb.position()+" -> "+bb.get()+",");
}
System.out.println();
CharBuffer cb=((ByteBuffer)bb.rewind()).asCharBuffer();
System.out.print("Char Buffer:");
while(cb.hasRemaining()){
System.out.print(cb.position()+" -> "+cb.get()+",");
}
System.out.println();
FloatBuffer fb=((ByteBuffer)bb.rewind()).asFloatBuffer();
System.out.print("Float Buffer:");
while(fb.hasRemaining()){
System.out.print(fb.position()+" -> "+fb.get()+",");
}
System.out.println();
IntBuffer ib=((ByteBuffer)bb.rewind()).asIntBuffer();
System.out.print("Int Buffer:");
while(ib.hasRemaining()){
System.out.print(ib.position()+" -> "+ib.get()+",");
}
System.out.println();
LongBuffer lb=((ByteBuffer)bb.rewind()).asLongBuffer();
System.out.print("Long Buffer:");
while(lb.hasRemaining()){
System.out.print(lb.position()+" -> "+lb.get()+",");
}
DoubleBuffer db=((ByteBuffer)bb.rewind()).asDoubleBuffer();
System.out.println();
System.out.print("Double Buffer:");
while(db.hasRemaining()){
System.out.print(db.position()+" -> "+db.get()+",");
}
System.out.println();
ShortBuffer sb=((ByteBuffer)bb.rewind()).asShortBuffer();
System.out.print("Short Buffer:");
while(sb.hasRemaining()){
System.out.print(sb.position()+" -> "+sb.get()+",");
}
System.out.println();
}
}
package com.dirlist;
import java.nio.*;
import java.util.Arrays;
public class Endians {
/**
* 字节的存放顺序,不同的机器可能会使用不同的字节排序方法来存储顺序。
* "big endian" 高位优先将最重要的字节存放在地址最低的存储器单元;
* "little endian" 低位优先则是将最重要的字节放在地址做搞的存储器单元
* ByteBuffer采用高位优先的形式存储数据
*/
public static void main(String[] args) {
ByteBuffer bb=ByteBuffer.wrap(new byte[12]);
bb.asCharBuffer().put("abcdef");
System.out.println(Arrays.toString(bb.array()));
bb.rewind();
bb.order(ByteOrder.BIG_ENDIAN);
bb.asCharBuffer().put("abcdef");
System.out.println(Arrays.toString(bb.array()));
bb.rewind();
bb.order(ByteOrder.LITTLE_ENDIAN);
bb.asCharBuffer().put("abcdef");
System.out.println(Arrays.toString(bb.array()));
}
}
package com.dirlist;
import java.nio.*;
public class UsingBuffers {
/**
* 缓冲区的细节
* Buffer由数据和可以高效的访问及操作这些数据的四个索引组成:
* 这四个索引是mark(标记),position(位置),limit(界限),capacity(容量)
* flip()将limit设置为position,position设置为0,此方法用来从缓冲区读取已写入的数据
* mark()将mark设置为position
* hasRemaining()若有介于position和limit之间的元素,返回true
* capacity()返回缓冲区的容量
* clear()清空缓冲区,将position设置为0,limit设置为容量
*/
//交换相邻的字符,以对CharBuffer中的字符进行编码和解码
public static void symmetricScramble(CharBuffer buffer){
while(buffer.hasRemaining()){
buffer.mark();
char c1=buffer.get();
char c2=buffer.get();
buffer.reset();
buffer.put(c2).put(c1);
}
}
public static void main(String[] args) {
char[] data="UsingBuffers".toCharArray();
ByteBuffer bb=ByteBuffer.allocate(data.length*2);
CharBuffer cb=bb.asCharBuffer();
cb.put(data);
System.out.println(cb.rewind());
symmetricScramble(cb);
System.out.println(cb.rewind());
symmetricScramble(cb);
System.out.println(cb.rewind());
}
}