一、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进行修改,将抛出异常