【问题标题】:DatagramPacket - will getData always return the same buffer which is passed?DatagramPacket - getData 是否总是返回传递的相同缓冲区?
【发布时间】:2016-09-30 07:27:29
【问题描述】:
byte [] r = new byte[4096];
DatagramPacket dpr = new DatagramPacket(r, r.length);
sock.receive(dpr);

receive 之后,dpr.getData()r 会一直保持不变吗?

例如:我可以直接使用字节数组r 还是需要调用getData() 再次检索缓冲区?

测试它,显示它是相同的,但这总是保证吗?

【问题讨论】:

    标签: java sockets udp datagram


    【解决方案1】:
    byte [] r = new byte[4096];
    DatagramPacket dpr = new DatagramPacket(r, r.length);
    sock.receive(r);
    

    应该是sock.receive(dpr);

    receive之后dpr.getData() & r会一直一样吗?

    是的。 r 作为“保存传入数据报的缓冲区”提供给构造函数,getData()“返回用于接收或发送数据的缓冲区”。

    即我可以直接使用字节数组 r 还是需要调用 getData() 再次检索缓冲区?

    你可以使用字节数组,但为什么呢?像其他人一样使用getData(),不要忘记也使用getOffset()getLength(),而不是假设数据报填充了字节数组:例如System.out.println(new String(datagram.getData(), datagram.getOffset(), datagram.getLength()));

    【讨论】:

    • 为什么 getOffset 永远不是 0?
    • 在您的情况下它将为 0,但还有其他构造函数,其中字节数组与偏移量一起传递。在这种情况下,将使用构造函数中给出的偏移量。如果将来有人更改对构造函数的调用,您应该调用 getOffset 以保护您的代码免受令人讨厌的意外。
    猜你喜欢
    • 1970-01-01
    • 2019-09-15
    • 1970-01-01
    • 2020-09-15
    • 1970-01-01
    • 2012-09-21
    • 1970-01-01
    • 1970-01-01
    • 2020-09-20
    相关资源
    最近更新 更多