DatagramPacket - getData всегда возвращает тот же самый буфер, который передается?

byte [] r = new byte[4096];
DatagramPacket dpr = new DatagramPacket(r, r.length);
sock.receive(r);

После receive будут ли теги dpr.getData() и r совпадать?

ex: могу ли я напрямую использовать массив байтов r или мне нужно вызвать getData(), чтобы снова получить буфер?

Тестирование, показало, что это одно и то же, но всегда ли это гарантировано?

Ответы

Ответ 1

byte [] r = new byte[4096];
DatagramPacket dpr = new DatagramPacket(r, r.length);
sock.receive(r);

Это должно быть sock.receive(dpr);

После приема, будут ли dpr.getData() и r всегда одинаковыми?

Да. r был предоставлен конструктору как "буфер для хранения входящей дейтаграммы", а getData() "возвращает буфер, используемый для приема или отправки данных".

то есть. могу ли я напрямую использовать массив байтов r или мне нужно вызвать getData(), чтобы снова получить буфер?

Вы можете использовать массив байтов, но почему? Используйте getData(), как и все остальные, не забывая также использовать getOffset() и getLength(), а не предполагая, что датаграмма заполнена массивом байтов: например, System.out.println(new String(datagram.getData(), datagram.getOffset(), datagram.getLength()));