Кодировать двоичные данные как ASCII в Java - PullRequest
0 голосов
/ 16 сентября 2011

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

111110001000000000000111

становится:

5o3z1o12z3o

(например, 5 единиц, 3 нуля, 1 один, 12 нулей, 3 единицы).затем сожмите это далее в компактную строку ASCII (то есть строку, использующую полный диапазон символов ASCII, а не цифры плюс 'o' и 'z').Кто-нибудь может порекомендовать подходящий подход и / или стороннюю библиотеку, чтобы сделать это на Java?

1 Ответ

3 голосов
/ 16 сентября 2011

Если ваша цель - сжатие, просто скопируйте поток.Это будет работать лучше, чем ваша кодировка по длине прогона.

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

Но если вы хотите бросить свои собственные: сначала я бы отметил, что вам не нужны 'o' и 'z'.Вы уже знаете эти значения, так как они чередуются.Предположим, что он начинается с 0 (а если нет, закодируйте начальный 0, чтобы показать, что есть 0 0).

Текстовое кодирование чисел возможно, но, вероятно, неэффективно.Посмотрите на кодирование переменной длины для целочисленных значений, затем закодируйте эти байты.Затем каким-то образом «экранируйте» их в ASCII.

Но затем мы вернулись к кодированию, подобному Base64, и первое предложение gzip + Base64, вероятно, проще всего этого.

...