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

标签 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 的内容都会被分成两个或多个由库触发的“事件”。

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

所以我基本上是在要求一种有效的方法,它不必包含代码。

最佳答案

您确定需要使用 UDP 吗? 看来你应该将其更改为 TCP 实现。你想使用netty吗?请参阅here

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

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

已编辑。

关于java - 缓冲字节数组(来自 DatagramPacket),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26950236/

相关文章:

python - 如何加速马德隆常数的三维求和?

performance - 在 Postgres 数据库上,关系约束会降低性能吗?

javascript - 从缓冲区中删除多个字节的规范方法

javascript - 动态/自动 Javascript 和 CSS 组合和缩小

buffer - 协议(protocol)消息标记的线路类型无效

macos - Cocoa:如何创建 CFUrl/NSUrl 以从 ExtAudioFileOpenURL 的内存缓冲区中读取

java - Java中如何实现包含对象数组的对象的深拷贝?

java - 复合键映射 JPA+Hibernate

api - 获取与文件修订相关的日期和描述 - Java API Perforce

java - 创建一个方法来返回 DNA 链的 WC 补体