Я делаю приложение на сокете в Java, которое получает некоторые данные HTML с сервера в ASCII, а затем анализирует данные соответствующим образом.
byte[] receivedContent = new byte[12500];
receivedSize = inputStream.read(receivedContent);
receivedContent = Arrays.copyOf(receivedContent, receivedSize+1);
if (receivedSize == -1) {
System.out.println("ERROR! NO DATA RECEIVED");
System.exit(-1);
}
lastReceived = new String(receivedContent, StandardCharsets.US_ASCII);
Это должно быть довольно просто, но это не так.Я распечатал некоторые отладочные сообщения и обнаружил, что, несмотря на получение нескольких байтов данных (для примерной печати, полученныйSize сообщает мне о полученных 784 байтах), результирующая строка из этих байтов имеет длину всего несколько символов, например:
Ard</a></li><li><a
Я ожидаю полный документ HTML, и это явно неправильно.Также нет явной картины того, когда это может произойти.Это кажется совершенно случайным.Так как я выделяю новую память для буфера, в нем действительно не должно быть старых данных, которые бы мешали новым данным из сокета.Может кто-нибудь пролить свет на это странное поведение?Кроме того, кажется, что это происходит реже на моей машине с Windows, на которой работает OracleJDK, а не на моей удаленной машине Ubunut, на которой работает OpenJDK. Может ли это быть причиной и как я могу это исправить?
ОБНОВЛЕНИЕ: в конце я проверил вручнуюASCII-кодирование байтового массива по таблице ASCII и обнаружение того, что сервер намеренно отправляет искаженные данные.Тайна раскрыта.