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

Java 缓冲字节数组(来自DatagramPacket),java,performance,buffer,bytebuffer,datagram,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(

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

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?看

1024字节这是UDP datagaram的正常安全值,使其变大会给路由器带来问题。(见附件)

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


已编辑。

您正在寻找tcp?@jtahlborn否。这是故意的UDP。为什么要测试地址和端口?测试永远不会失败。@EJP好吧,如果第三方向该IP和端口发送一个随机UDP数据包来模拟服务器呢?如果这些是源地址/端口,你应该使用
connect()
方法。是的,我考虑过Netty和Apache Mina,前者太复杂,太多我不需要的功能。后者没有提供太多的控制。请参阅主要netty开发分支中相当简单的示例,至少使用netty比编写自己的UDP服务器实现要简单。我发现使用自定义库实际上非常简单。对我来说,一切都简单多了。缓冲只是个小问题。哦,我明白了。谢谢你提供的信息。我已经计算出,我的平铺贴图最多可以容纳8100个这样的平铺,因此1024个平铺也可以,但您为我节省了大量调试时间。:)