diff --git a/src/main/java/com/llthunder/netty/nio/buffer/BufferDemo.java b/src/main/java/com/llthunder/netty/nio/buffer/BufferDemo.java new file mode 100644 index 0000000000000000000000000000000000000000..582cff345cf3fe90a31102d69fcb978fa00da247 --- /dev/null +++ b/src/main/java/com/llthunder/netty/nio/buffer/BufferDemo.java @@ -0,0 +1,47 @@ +package com.llthunder.netty.nio.buffer; + +import com.sun.org.apache.bcel.internal.util.ClassPath; + +import java.io.*; +import java.nio.Buffer; +import java.nio.ByteBuffer; +import java.nio.channels.FileChannel; + +/** + * buffer基本示例:演示position/limit/capacity的变化 + */ +public class BufferDemo { + + public static void main(String[] args) throws IOException { + //读取文件流,此处操作时I/O操作 + String fileUrl = BufferDemo.class.getClassLoader().getResource("BufferDemoText.text").getFile(); + FileInputStream inputStream = new FileInputStream(fileUrl); + FileChannel inputChannel = inputStream.getChannel(); + //创建一个大小为10的缓冲区 + ByteBuffer byteBuffer = ByteBuffer.allocate(100); + out("初始化", byteBuffer); + //将数据写入缓冲区 + inputChannel.read(byteBuffer); + out("调用read", byteBuffer); + //锁定写入范围 + byteBuffer.flip(); + out("调用flip", byteBuffer); + while (byteBuffer.hasRemaining()){ + byte b = byteBuffer.get(); + } + //可以理解对flip的解锁 + byteBuffer.clear(); + out("调用clear", byteBuffer); + //关闭流 + inputChannel.close(); + inputStream.close(); + } + + public static void out(String step, Buffer buffer){ + System.out.println(step + ":"); + System.out.print("position:" + buffer.position() + ","); + System.out.print("limit:" + buffer.limit() + ","); + System.out.print("capacity:" + buffer.capacity() + ","); + System.out.println();System.out.println(); + } +} diff --git a/src/main/java/com/llthunder/netty/nio/buffer/BufferSliceDemo.java b/src/main/java/com/llthunder/netty/nio/buffer/BufferSliceDemo.java new file mode 100644 index 0000000000000000000000000000000000000000..df2b42f35afc4a73c2b6e909c68823f7bf4c306f --- /dev/null +++ b/src/main/java/com/llthunder/netty/nio/buffer/BufferSliceDemo.java @@ -0,0 +1,33 @@ +package com.llthunder.netty.nio.buffer; + +import java.nio.IntBuffer; + +/** + * 缓冲区分片 + */ +public class BufferSliceDemo { + + public static void main(String[] args) { + IntBuffer intBuffer = IntBuffer.allocate(10); + //给缓冲区的数据复制:1-10 + for(int i = 1; i <= intBuffer.capacity(); i++){ + intBuffer.put(i); + } + //分片:创建子缓冲区 + intBuffer.position(3); + intBuffer.limit(7); + IntBuffer slice = intBuffer.slice(); + //给子缓冲区中的数据*10 + for (int i = 0; i < slice.capacity(); i++){ + int value = slice.get(i); + slice.put(i, value * 10); + } + //重置主buffer的状态位 + intBuffer.position(0); + intBuffer.limit(intBuffer.capacity()); + //读取buffer中的数据 + while (intBuffer.hasRemaining()){ + System.out.print(intBuffer.get() + " "); + } + } +} diff --git a/src/main/java/com/llthunder/netty/nio/buffer/IntbufferDemo.java b/src/main/java/com/llthunder/netty/nio/buffer/IntBufferDemo.java similarity index 88% rename from src/main/java/com/llthunder/netty/nio/buffer/IntbufferDemo.java rename to src/main/java/com/llthunder/netty/nio/buffer/IntBufferDemo.java index 05442704b0f128dbc694fa0b435261cddd8f9156..4f1f638777159267f80b6093aa92c9d568bef503 100644 --- a/src/main/java/com/llthunder/netty/nio/buffer/IntbufferDemo.java +++ b/src/main/java/com/llthunder/netty/nio/buffer/IntBufferDemo.java @@ -2,7 +2,10 @@ package com.llthunder.netty.nio.buffer; import java.nio.IntBuffer; -public class IntbufferDemo { +/** + * buffer操作基本API示例 + */ +public class IntBufferDemo { public static void main(String[] args) { //buffer中共有3个属性 @@ -20,7 +23,7 @@ public class IntbufferDemo { while (intBuffer.hasRemaining()){ //读取缓冲区当前position位置的数据,知道position=limit int j = intBuffer.get(); - System.out.println(j); + System.out.print(j + " "); } } } diff --git a/src/main/resources/BufferDemoText.text b/src/main/resources/BufferDemoText.text new file mode 100644 index 0000000000000000000000000000000000000000..af66199b6746047709719911a3d389e89ae62992 --- /dev/null +++ b/src/main/resources/BufferDemoText.text @@ -0,0 +1 @@ +buffer基本示例:演示position/limit/capacity的变化 \ No newline at end of file