Как я могу сжать строку в Java? - PullRequest
1 голос
/ 06 апреля 2011

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

Ответы [ 3 ]

4 голосов
/ 06 апреля 2011

Если вы преобразовали изображение в текст, взяв существующий файл (например, JPG) и закодировав его в base64, сжатие будет незначительным - исходный файл, вероятно, будет уже сильно сжат.

(Надеюсь, вы не конвертировали произвольные двоичные данные, используя new String(bytes) или что-то похожее ужасное.)

Обратите внимание, что если ваш выходной формат должен быть текстовым, то этоеще сложнее - одним из очевидных решений было бы преобразовать существующий текст в байтовый массив и сжать его ... но если вам нужно преобразовать обратно в текст, вы захотите снова использовать base64, что приведет к его увеличению в несколько раз4 / 3.

1 голос
/ 06 апреля 2011

Если вы имеете дело с jpeg, то - по определению, он не может быть сжат гораздо дальше, но может быть лучше закодирован.

Как ты это кодируешь? Если вы используете кодировку base-64 (вы кодируете ее в 64 буквы), то у вас все хорошо. Вы МОЖЕТЕ быть в состоянии закодировать его в 128 символов, что вдвое меньше размера вашего сообщения, но вам нужно найти 128 уникальных символов ASCII, которые все будут передаваться через любую используемую вами среду (например, 0x08 может передавать через одну среду как уникальный персонаж, но на другом носителе он может просто удалить предыдущий символ).

1 голос
/ 06 апреля 2011

На самом деле это зависит от формата входного изображения, но вы больше не можете сжимать его, если изображение уже обработано алгоритмами сжатия изображений, такими как JPEG или PNG (сжатый DEFLATE).

Однако вы все равно можете попробовать сжать строку. Просто преобразуйте его в байтовый массив и используйте пакет java.util.zip .

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