Java Неограниченный массив - PullRequest
1 голос
/ 30 марта 2012

Часть моего кода:

byte[] bytes = new byte[8000];
final DataInputStream in = new DataInputStream(s.getInputStream());
final int input = in.read(bytes);

Я не знаю, сколько байтов придет ко мне. Могу ли я сделать неограниченный массив? Какой путь лучше в этой ситуации?

Ответы [ 2 ]

1 голос
/ 30 марта 2012

Вы не знаете, сколько данных будет доступно при чтении.Например, если последний раз, когда сокет был записан, был, например, 16 КБ, вы можете прочитать меньше этого или больше этого.

Вы должны написать код, который предполагает, что вам не нужно знать.Это позволяет обрабатывать данные по мере их поступления независимо от длины.


Если вы ожидаете отправить блок данных фиксированной длины, сначала отправьте размер.

byte[] bytes = new byte[1024];
final DataInputStream in = new DataInputStream(s.getInputStream());

int length = in.readInt();
if (length > bytes.length) bytes = new byte[length];
in.readFully(bytes, 0, length); // read length bytes or throw an exception.
1 голос
/ 30 марта 2012

Намного лучше использовать ByteBuffer , если вы используете версию Java, которая поддерживает его

...