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 楼答案
你确定需要使用UDP吗? 看来你应该改成TCP推进。你想用netty吗?见here
1024字节这是UDP datagaram的正常安全值,使其更大可能会给路由器带来问题。(见https://stackoverflow.com/a/13089776/3502543)
如果你不想使用netty,你应该提供类似DelimiterBasedFrameDecoder的东西
编辑