2010-01-20 3 views
2

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

С уважением P1nG

ответ

1

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

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

Это зависит от того, почему данные нечитабельные.

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

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

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

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

1

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

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

Смежные вопросы