我阅读了netty.io的netty 4.1教程和GitHub中的对象回显示例,但它们没有详细说明发送大小不同的对象时缓冲区大小的问题。
假设我想发送一个包含一个int[]和一个float[]的对象,它是一个DTO,所以只有构造函数和getter。
我如何决定缓冲区的大小?我似乎找不到任何答案,所以我认为这是一个愚蠢的问题。但谷歌为什么要了解我在这方面的进展呢?总体来说,我对网络相当陌生。
我知道我需要在各自的通道管道中添加decoder和encoderHandlers,但我不知道如何在对象中实现不同大小的decoder和encoderHandlers。我知道ObjectDecoder和ObjectEncoder类,但我不知道应该将缓冲区设置为多大,因为DTO中的数组是动态创建的。
2条答案
按热度按时间yruzcnhs1#
序列化数组的通常方法是,首先记录数组的长度,然后逐个序列化元素,我不确定你是否想问这个问题,希望能有所帮助
tv6aics12#
如果你使用相对较小的对象,并且有足够的内存通过简单的序列化
(dto, allocator) -> ByteBuf
来处理所有请求,那么就享受这种简单性吧:但是如果你要处理大的甚至是巨大的对象,那么你需要考虑使用
io.netty.handler.stream.ChunkedInput<ByteBuf>
。例如,看看io.netty.handler.stream.ChunkedFile
是如何处理巨大文件的: