В широком смысле буфер используется в качестве временных данных при обработке загрузки данных.
Вы заполняете буфер до его размера или меньше, но, конечно, не больше его емкости.
DatagramPacket
Javadoc подтверждает, что:
Аргумент length должен быть меньше или равен buf.length.
И вещь, которую вы не должны забывать: концептуально вы используете буфер, потому что данные должны загружаться постепенно или только определенная часть этого.
В некоторых случаях вы будете читать столько данных, сколько их максимальный объем, но в некоторых других случаях вам нужно будет прочитать только первые байты X или байты от смещения X до Y.
Таким образом, методы класса буфера обеспечивают, как правило, несколько способов чтения из буфера.
Такие как:
public DatagramPacket(byte buf[], int length);
public DatagramPacket(byte buf[], int offset, int length);
Теперь концептуально вы не ошибаетесь, иногда вы хотите заполнить весь буфер, потому что вы знаете, что вам нужно будет прочитать именно такой размер данных.
java.net.DatagramSocket
подтверждает, что:
public synchronized void receive(DatagramPacket p) throws IOException {
...
tmp = new DatagramPacket(new byte[1024], 1024);
...
}
Так что дополнительная перегрузка такая как:
public DatagramPacket(byte buf[]);
будет иметь смысл.