Нечитаемые строки Java - PullRequest
       4

Нечитаемые строки Java

2 голосов
/ 20 января 2010

Я сделал прослушиватель сокета Java, который прослушивает порт 80. В основном он собирает данные, которые прослушивает порт 80, и сохраняет их во временной строке, которая затем используется для дальнейшей работы (преобразования типов и т. Д. все). Теперь основная проблема заключается в том, что данные, поступающие на порт 80, содержат части, которые невозможно прочитать (например, @ [Qô - z ‡). И теперь, когда я храню его в строке и когда я печатаю строку, он печатает только читаемые части, что понятно, но меня удивляет то, что когда я печатаю длину строки, он печатает только длину читаемой части , Итак, я хочу знать, является ли мой подход хранения нечитаемых частей строки в строке приемлемым, чтобы разрешить дальнейшие операции над ними. Если нет, то я также хотел бы получить несколько советов о том, как я могу хранить такие входящие данные.

С уважением P1nG

Ответы [ 2 ]

1 голос
/ 20 января 2010

Что-то здесь не имеет смысла.Если вы храните «нечитаемую» часть данных в строке, она будет отражаться на длине строки.

Я хочу знать, если мой подходхранение нечитаемых строковых частей в строке допустимо, чтобы разрешить дальнейшие операции над ними.Если нет, я также хотел бы получить несколько указаний о том, как я могу хранить такие входящие данные.

Это зависит от того, почему данные не читаются.

  • OneВозможно, удаленная система отправляет данные в некотором неожиданном наборе символов или кодировке.Например, если он отправляет Latin-1 и вы ожидаете UTF-8 (или наоборот), некоторые разделы текста могут быть нечитаемыми.Решение состоит в том, чтобы выяснить, какой набор символов и кодировка отправляет удаленная система, и использовать правильное имя набора символов Java при преобразовании в символы Java.

  • Другая возможность состоит в том, что некоторые изданные являются двоичными данными.Если это так, вы должны отделить текст от двоичных данных на основе протокола приложения, используемого удаленной системой.

  • Наконец, нечитаемые данные могут быть вызваны шумом линии или тому подобным,Если это так, вы, вероятно, должны оставить его без изменений.

Альтернативный подход заключается в использовании байтового массива (или чего-то подобного), а не String для хранения данных.Проблема с попыткой преобразования байтов в символы, когда вы не уверены в наборе символов и кодировке, заключается в том, что преобразование может быть с потерями.Сохраняя необработанные байты, ваше приложение, по крайней мере, имеет возможность исправить это позже ... когда вы выясните, что такое правильное преобразование.

1 голос
/ 20 января 2010

вы можете сохранить данные в java.nio.ByteBuffer , чтобы избежать всего искажения строки ...

если это действительно текст, отправляемый в некоторой кодировке широких символов, вы 'Я захочу преобразовать буфер байтов в строку, используя соответствующий набор символов с удобным java.nio.charset.Charset.decode

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...