有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java缓冲字节数组(来自DatagramPacket)

所以在寻找了一个合适的图书馆后,我决定建立自己的图书馆,这是其中的一部分

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) 个答案

  1. # 1 楼答案

    你确定需要使用UDP吗? 看来你应该改成TCP推进。你想用netty吗?见here

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

    如果你不想使用netty,你应该提供类似DelimiterBasedFrameDecoder的东西

    编辑