说明
-
io.netty.buffer.ByteBuf的forEachByte(ByteProcessor processor)用指明的ByteProcessor 遍历ByteBuf中的可读字节。遍历的时候用升序遍历。
-这个函数可以在ByteBuf中寻找某个字节首次出现的位置,或者首次不是某个字节的位置。 -
如果已经遍历完了可读字节但还没有达到目标,返回-1。
-
io.netty.util.ByteProcessor这个接口中已经实现了一些ByteProcessor,例如:
示例
假设要在ByteBuf中寻找字节的内容是22(十进制)首次出现的位置:
package com.thb;
import io.netty.buffer.ByteBuf;
import io.netty.buffer.Unpooled;
import io.netty.util.ByteProcessor;
public class Test {
public static void main(String[] args) {
// 创建一个ByteBuf
ByteBuf buf = Unpooled.buffer();
// 写入10个字节的数据
for (int i = 0; i < 10; i++) {
buf.writeByte(i);
}
// 写入1个字节的数据
buf.writeByte(22);
// 括号中用一个匿名类实现ByteProcessor接口
int result = buf.forEachByte(new ByteProcessor() {
private static final byte byteToFind = 22;
// 注意,process函数如果返回true,表示要继续处理ByteBuf中后续的字节
@Override
public boolean process(byte value) {
return byteToFind != value;
}
});
System.out.println("result = " + result);
}
}
运行输出:
result = 10