提交 a65f9654 编写于 作者: L liulei06

buffer状态位分析

buffer分片示例
上级 14e3bfee
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();
}
}
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() + " ");
}
}
}
......@@ -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 + " ");
}
}
}
buffer基本示例:演示position/limit/capacity的变化
\ No newline at end of file
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册