Я работаю с прослушивателем сокета tcp / ip, который прослушивает на порту 80 данные, поступающие с удаленных хостов. Теперь эти входящие данные находятся в нечитаемом формате, и поэтому я сохранил эти входящие данные, поскольку они изначально находятся в строке, а затем преобразовал эту строку в массив символов, а затем для каждого индекса в массиве я преобразовал содержимое в шестнадцатеричное. Теперь проблема заключается в том, что данные преобразуются в шестнадцатеричный формат, но в некоторых местах преобразование происходит некорректно, и в результате получается шестнадцатеричная часть 'fffd'. находится в том месте, где результирующий гекс должен быть 'bc' (0xBC), это 'fffd' (0xFF 0xFD). Я вынужден поверить, что некоторые части входящих данных не читаются должным образом моей Java-программой.
Я использую BufferefInputStream и InputStreamReader для чтения входящих данных и проверяю конец потока следующим образом.
BufferedInputStream is = new BufferedInputStream(connection.getInputStream());
InputStreamReader isr = new InputStreamReader(is);
while(isr.read()!=-1)
{
...
}
где 'connection' - объект сокета.
Входные данные, которые я получаю через сокет: # SR, IN-0002005,10: 49: 37,16 / 01/2010, $ <49X ™ соответствуют @ @ (bN> ™ значениямBB ©: 4ä ýÕ 01300 > ÀäCåKöA ÷ Ð>.
Шестнадцатеричное преобразование, которое делает моя программа, имеет 'fffd' во многих местах, где должны быть другие шестнадцатеричные значения. Хотя преобразование корректно для 60% входной строки
Любые указатели на то, почему мое полученное в результате преобразование в гекс не является тем, чем должно быть, очень помогли бы.