Если ваша цель - сжатие, просто скопируйте поток.Это будет работать лучше, чем ваша кодировка по длине прогона.
Тогда, если вам по какой-то причине нужно, чтобы он был текстовым, например, для безопасного прохождения через старые почтовые шлюзы, я бы также обратился к стандартной кодировке, такой как Base64.вместо того, чтобы придумывать свои собственные.
Но если вы хотите бросить свои собственные: сначала я бы отметил, что вам не нужны 'o' и 'z'.Вы уже знаете эти значения, так как они чередуются.Предположим, что он начинается с 0 (а если нет, закодируйте начальный 0, чтобы показать, что есть 0 0).
Текстовое кодирование чисел возможно, но, вероятно, неэффективно.Посмотрите на кодирование переменной длины для целочисленных значений, затем закодируйте эти байты.Затем каким-то образом «экранируйте» их в ASCII.
Но затем мы вернулись к кодированию, подобному Base64, и первое предложение gzip + Base64, вероятно, проще всего этого.