一、ByteBuffer类型化的put与get方法
/**
* ByteBuffer类型化的put与get方法
*/
public class NioTest5 {
public static void main(String[] args) {
ByteBuffer buffer = ByteBuffer.allocate(64);
buffer.putInt(5);
buffer.putLong(500000000L);
buffer.putDouble(13.456);
buffer.putChar('你');
buffer.putShort((short) 3);
buffer.flip();
System.out.println(buffer.getInt());
System.out.println(buffer.getLong());
System.out.println(buffer.getDouble());
System.out.println(buffer.getChar());
System.out.println(buffer.getShort());
}
}
put和get的类型要一致。如第一个是putInt, 输出的使用第一个要用getInt。
二、Slice Buffer
/**
* Slice Buffer和原Buffer共享底层数组,任一一个改变,另外一个也会改变
*/
public class NioTest6 {
public static void main(String[] args) {
ByteBuffer buffer = ByteBuffer.allocate(10);
for(int i = 0; i < buffer.capacity(); ++i){
buffer.put((byte)i);
}
buffer.position(2);
buffer.limit(6);
ByteBuffer sliceBuffer = buffer.slice();
for(int i = 0; i < sliceBuffer.capacity(); ++i){
byte b = sliceBuffer.get(i);
b *= 2;
sliceBuffer.put(i, b);
}
buffer.position(0);
buffer.limit(buffer.capacity());
while (buffer.hasRemaining()){
System.out.println(buffer.get());
}
}
}
三、只读Buffer
/**
* 只读buffer,我们可以随时将一个普通Buffer调用asReadOnlyBuffer方法返回一个只读Buffer
* 但不能将一个只读Buffer转换为读写Buffer
*/
public class NioTest7 {
public static void main(String[] args) {
ByteBuffer buffer = ByteBuffer.allocate(10);
System.out.println(buffer.getClass());
for(int i = 0; i < buffer.capacity(); ++i){
buffer.put((byte)i);
}
ByteBuffer readonlyBuffer = buffer.asReadOnlyBuffer();
System.out.println(readonlyBuffer.getClass());
readonlyBuffer.position(0);
readonlyBuffer.put((byte)2);
}
}
对只读Buffer进行修改,将抛出异常
