Java ByteBuf初始容量大小

Java ByteBuf初始容量大小,java,netty,Java,Netty,请告诉我如何增加我的ByteBuf初始容量。在以下情况下: @Override protected void decode(ChannelHandlerContext ctx, ByteBuf in, List<Object> out) throws Exception { byte[] byteinput = new byte[in.readableBytes()]; in.readBytes(byteinput); //further handlin

请告诉我如何增加我的ByteBuf初始容量。
在以下情况下:

 @Override
protected void decode(ChannelHandlerContext ctx, ByteBuf in, List<Object> out) throws  Exception {

    byte[] byteinput = new byte[in.readableBytes()]; 
    in.readBytes(byteinput);  

//further handling...
}
但我仍然有相同的ByteBuf容量值(例如496)

UPD


我通过wireshark发现了我的协议通信量,并且从测试用户客户端发送和接收的数据包高达1,4k,没有受到损坏。这个问题仅仅是网络设置的问题。操作系统套接字缓冲区不会剪切消息。

您可以配置Netty的缓冲区分配大小,但可能会受到更一般的限制。Netty是一个异步框架。这意味着它将读取操作系统提供给它的内容,并将其传递给您。Netty无法控制网络状况、网络硬件行为、操作系统行为或数据生产者和Netty应用程序之间的任何其他行为。如果应用程序逻辑需要完整的应用程序级消息,则在调用此应用程序逻辑之前,可能必须聚合数据。Netty提供了一些方便的方法来帮助实现此功能,请参阅,对于特定于HTTP的实现,请参阅。

这非常简单

ServerBootstrap b = new ServerBootstrap(); // (2)
        b.group(bossGroup, workerGroup)
                .channel(NioServerSocketChannel.class) // (3)
                .childHandler(new ChannelInitializer<SocketChannel>() { // (4)
                    @Override
                    public void initChannel(SocketChannel ch) throws Exception {

                        //decrypt  //checknum

                        ch.config().setRecvByteBufAllocator(new FixedRecvByteBufAllocator(2048)); //set  buf size here
                         ch.pipeline().addLast(new InboundDecryptor());
 .
 .
 .
ServerBootstrap b=newserverbootstrap();//(2)
b、 组(bossGroup、workerGroup)
.channel(NioServerSocketChannel.class)//(3)
.childHandler(新的ChannelInitializer(){//(4)
@凌驾
public void initChannel(SocketChannel ch)引发异常{
//解密//checknum
ch.config().setRecvByteBufAllocator(新的FixedRecvByteBufAllocator(2048));//在此处设置buf大小
ch.pipeline().addLast(新的InboundDecryptor());
.
.
.

斯科特是对的。只增加缓冲区的大小并不能解决问题

ch.config().setRecvByteBufAllocator(new FixedRecvByteBufAllocator(2048));

对于HTTP请求,它也应该使用
HTTPObjectAggregator
。它对我很有用。

接收缓冲区大小是内核中套接字接收缓冲区的大小。与Netty、NIO或Java无关。这是真的。但对于我当前的机器,输入套接字缓冲区至少为8k。我的消息剪切为498字节。当我查看字节时Buf实例字段我看到“(max)capacity=498”。我需要找到ByneBuf的工厂或初始设置的位置,并更改它的初始容量。我不想在一个块中发送1MB,我只需要1K有趣的链接。
我的应用程序将接收小于最大tcp数据包大小(1400字节)的数据包但是超过400字节。所以我想我的消息不会被分块。我只需要通过Tebuf Size增加收入。你的“假设”术语表明你不确定?如果你提供更多细节和参考资料,说明你如何知道你的消息不会被分块,可能会对其他人有所帮助。描述你的环境也可能相关(例如,这是通过普通互联网进行的,还是在受控环境中进行的,您的客户端/服务器是否仅在特定的一组操作系统上受支持)。我理解,现在我无法测试系统的所有可能配置,我需要记住可能存在的问题。这就是我说“假设”的原因,而不是一概而论,因为我可能不知道其中的一些陷阱。我查看了wireshark(用于精确监控网络的程序)列表,以检查是否有TCP数据包连接到我的服务器端口。服务器和客户端通过外部网络连接。因此wireshark显示,那个大数据包(1,4 kB)整体而言。对于Windows Seven x64和Android 3+系统,我开始在服务器/通道初始值设定器的不同部分试验参数。我不是建议测试所有可能的配置。只需了解您操作的环境。然后您就可以测试有意义差异的最小数量的配置.我不知道您的整个架构(或环境),但只要您了解我描述的一般问题,您就应该有足够的信息来做出明智的决策。
ch.config().setRecvByteBufAllocator(new FixedRecvByteBufAllocator(2048));