package pers.ran.server.test;
import io.netty.buffer.ByteBuf;
import io.netty.buffer.PooledByteBufAllocator;
import io.netty.buffer.Unpooled;
public class BufTest {
public static void main(String[] argo) throws Exception{
testByteBuf();
}
public static void testByteBuf() throws Exception {
// 创建byteBuf对象,该对象内部包含一个字节数组byte[10]
// 通过readerindex和writerIndex和capacity,将buffer分成三个区域
// 已经读取的区域:[0,readerindex)
// 可读取的区域:[readerindex,writerIndex)
// 可写的区域: [writerIndex,capacity)
ByteBuf byteBuf = Unpooled.buffer(500 * 1024, 1024 * 1024);
System.out.println("写入前 byteBuf -> " + byteBuf);
//long maxSize = 117483647;
long maxSize = 100;
int cnt = 0;
for (long i = 0; i < maxSize; i++) {
byteBuf.writeLong(i);
System.out.println("第"+i+"次写入后 byteBuf ->" + byteBuf
+ ", 可写字节:" + byteBuf.writableBytes()
+ ", 可读字节:" + byteBuf.readableBytes());
cnt++;
if (cnt == 50) {
for (int j = 0; j < cnt; j++) {
byteBuf.readByte();
}
System.out.println("读取后 byteBuf ->" + byteBuf + ", 可读字节:" + byteBuf.readableBytes());
// 读取后 byteBuf ->PooledUnsafeHeapByteBuf(ridx: 87028702, widx: 696229616, cap: 696254464)
byteBuf.discardReadBytes();
//Thread.sleep(10000);
cnt = 0;
}
}
System.out.println("写入后 byteBuf ->" + byteBuf);
/*StringBuilder stringBuilder = new StringBuilder();
stringBuilder.append("执行getByte方法:");
for (int i = 0; i < 5; i++) {
stringBuilder.append(byteBuf.getByte(i)).append(" ");
}
System.out.println(stringBuilder.toString());
System.out.println("调用getByte方法后 byteBuf ->" + byteBuf);
stringBuilder.setLength(0);
stringBuilder.append("执行readByte方法:");
for (int i = 0; i < 5; i++) {
stringBuilder.append(byteBuf.readByte()).append(" ");
}
System.out.println(stringBuilder.toString());
System.out.println("调用readByte方法后 byteBuf ->" + byteBuf);*/
}
/**
* 四种典型的内存分配方式
* 性能测试,每种运行一千万次,每次分配1000个字节,并写入同样的字符串
*/
public static void testBufAllocator() {
Long start = System.currentTimeMillis();
System.out.println("执行开始时间:" + start);
ByteBuf buf = null;
String str = "程就人生,程就你我";
//池化直接内存
for(int i=0;i<10000000;i++){
buf = PooledByteBufAllocator.DEFAULT.directBuffer(1000);
buf.writeBytes(str.getBytes());
buf.release();
}
Long end1 = System.currentTimeMillis();
System.out.println("PooledByteBufAllocator.DEFAULT.directBuffer 池化直接内存 ,执行结束时间:" + (end1-start));
//池化堆内存
for(int i=0;i<10000000;i++){
buf = PooledByteBufAllocator.DEFAULT.heapBuffer(1000);
buf.writeBytes(str.getBytes());
buf.release();
}
Long end2 = System.currentTimeMillis();
System.out.println("PooledByteBufAllocator.DEFAULT.heapBuffer 池化堆内存,执行结束时间:" + (end2-end1));
//非池化直接内存
for(int i=0;i<10000000;i++){
buf = Unpooled.directBuffer(1000);
buf.writeBytes(str.getBytes());
buf.release();
}
Long end3 = System.currentTimeMillis();
System.out.println("Unpooled.directBuffer 非池化直接内存,执行结束时间:" + (end3-end2));
//非池化堆内存
for(int i=0;i<10000000;i++){
buf = Unpooled.buffer(1000);
buf.release();
}
Long end4 = System.currentTimeMillis();
System.out.println("Unpooled.buffer 非池化堆内存,执行结束时间:" + (end4-end3));
}
}
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
这是一个基于高并发网络框架-Netty框架的demo项目,旨在展示Netty服务端与客户端的基础使用方式,并深入探讨了自定义编解码器以及心跳机制的实现。本demo紧密结合了本人发布的《初识Netty》一文中的示例,为学习者提供了一个直观、实用的学习参考。项目中,你可以清晰地看到BIO与NIO模型在Netty中的灵活运用,如何通过Netty的高性能特性来优化网络通信。此外,demo还详细展示了如何通过自定义编解码器处理网络通信中的数据编解码问题,以及如何利用心跳机制确保客户端与服务端之间的稳定连接。无论是Netty初学者还是有一定基础的开发者,都能从中获益匪浅。
资源推荐
资源详情
资源评论
收起资源包目录
netty-demo.zip (25个子文件)
netty-application
netty-client
pom.xml 1KB
src
test
java
main
resources
log4j.properties 231B
java
pers
ran
client
splicing
SplicingEchoClient.java 2KB
SplicingEchoClientHandler2.java 1KB
SplicingEchoClientHandler.java 2KB
echo
EchoClient.java 2KB
EchoClientHandler.java 1KB
EchoOioClient.java 1KB
idle
IdleEchoClient.java 2KB
IdleEchoClientHandler.java 2KB
netty-common
pom.xml 1KB
src
test
java
main
resources
java
pers
ran
protocol
ProtocolHeader.java 577B
codec
ProtocolEncoder.java 565B
ProtocolDecoder.java 997B
pom.xml 2KB
netty-server
pom.xml 1KB
src
test
java
main
resources
log4j.properties 231B
java
pers
ran
server
splicing
SplicingEchoServerHandler.java 2KB
SplicingEchoServer.java 2KB
echo
EchoServer.java 2KB
EchoOioServer.java 2KB
EchoServerHandler.java 2KB
test
BufTest.java 4KB
idle
IdleEchoServer.java 2KB
IdleEchoServerHandler.java 2KB
共 25 条
- 1
资源评论
zll2C
- 粉丝: 133
- 资源: 2
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功