Символы в Java предназначены для текста данных. Вы уверены, что протокол действительно определяет длину сообщения таким образом? Скорее всего, первые четыре байта представляют 32-битную длину.
Если вы говорите с разработчиками на C или C ++, они могут использовать "char" как синоним "byte".
РЕДАКТИРОВАТЬ: Хорошо, основываясь на комментарии:
Я бы создал метод, который брал бы Reader
и число и неоднократно вызывал read()
, пока он не прочитал правильное количество данных или не выдал исключение. Примерно так:
public static String readFully(Reader reader, int length) throws IOException
{
char[] buffer = new char[length];
int totalRead = 0;
while (totalRead < length)
{
int read = reader.read(buffer, totalRead, length-totalRead);
if (read == -1)
{
throw new IOException("Insufficient data");
}
totalRead += read;
}
return new String(buffer);
}
Тогда ваш код может быть:
String lengthText = readFully(reader, 4);
int length = Integer.parseInt(lengthText);
String data = readFully(reader, length);
// Use data now
Вам следует проверить, что происходит, когда они хотят отправить менее 1000 (или более 9999) символов, хотя ...