缓冲字节数组(来自DatagramPacket)

时间:2014-11-15 20:12:47

标签: java performance buffer bytebuffer datagram

因此,在寻找合适的图书馆之后,我决定自己创作,而这里也是其中的一部分。

try {
    DatagramSocket serverSocket = new DatagramSocket(client_port);
    byte[] receiveData = new byte[1024];
    byte[] finalData;
    while (true) {
        DatagramPacket receivePacket = new DatagramPacket(receiveData, receiveData.length);
        erverSocket.receive(receivePacket);
        if (this.address == receivePacket.getAddress() && this.server_port == receivePacket.getPort()) {
            ** handler.onMessage(receivePacket.getData()); **
        }
    }
} catch (IOException ex) {
    Logger.getLogger(PacketHandler.class.getName()).log(Level.SEVERE, null, ex);

这段代码显然是异步运行的。

receiveData设置为1024,这非常浪费。这也意味着任何大于1024的东西都会分成两个或多个由库发出的“事件”。

我想知道如何制作缓冲区,因为我已经完全空白了。基本上,你必须以某种方式计算字节数并将其推入一个新数组。

所以我基本上要求一个有效的方法,它不需要包含代码。

1 个答案:

答案 0 :(得分:2)

您确定需要使用UDP吗? 好像你应该把它改成TCP的inslementation。你想使用 netty 吗?见here

1024字节这是UDP datagaram的正常安全值,使其更大可能会带来路由器的问题。 (见https://stackoverflow.com/a/13089776/3502543)。

如果您不想使用netty,则应提供类似于DelimiterBasedFrameDecoder的内容。

<强>编辑。