This project started out as a study of Pieroxy's lz-string compressor. LZ-string is quite good, but doesn't meet my goals. I needed something better,

Search code, repositories, users, issues, pull requests...

submited by
Style Pass
2025-08-01 11:00:21

This project started out as a study of Pieroxy's lz-string compressor. LZ-string is quite good, but doesn't meet my goals. I needed something better, especially for JSON payloads. I ended up implementing my own encoder as a combination of CBOR + LZW + base62.

Below, you find a few compression comparisons ratios (and extra details) when encoding this JSON sample: (see class be.goudvuur.base.bbor62.test.ComparisonTest)

Standard base64 compression on the UTF-8 based byte array. This is basically the reason why I invented bbor62 in the first place: it blows up the source data size by 33%, despite the redundant JSON formatting syntax chars.

Compression ratio: 133.33% Results in 2152 chars: ewogICJvcmdhbml6YXRpb24iOiB7CiAgICAibmFtZSI6ICJUZWNoIElubm92YXRvcnMgSW5jLiIsCiAgICAiZm91bmRlZCI6IDIwMTAsCiAgICAiaGVhZHF1YXJ0ZXJzIjogewogICAgICAic3RyZWV0IjogIjEyMyBJbm5vdmF0aW9uIFdheSIsCiAgICAgICJjaXR5IjogIlNhbiBGcmFuY2lzY28iLAogICAgICAic3RhdGUiOiAiQ0EiLAogICAgICAiemlwQ29kZSI6ICI5NDEwNSIKICAgIH0sCiAgICAiZW1wbG95ZWVzIjogWwogICAgICB7CiAgICAgICAgImlkIjogIkUwMDEiLAogICAgICAgICJmaXJzdE5hbWUiOiAiSm9obiIsCiAgICAgICAgImxhc3ROYW1lIjogIlNtaXRoIiwKICAgICAgICAicm9sZSI6ICJTb2Z0d2FyZSBFbmdpbmVlciIsCiAgICAgICAgImRlcGFydG1lbnQiOiAiRW5naW5lZXJpbmciLAogICAgICAgICJza2lsbHMiOiBbIkphdmFTY3JpcHQiLCAiUHl0aG9uIiwgIkFXUyJdLAogICAgICAgICJjb250YWN0SW5mbyI6IHsKICAgICAgICAgICJlbWFpbCI6ICJqb2huLnNtaXRoQHRlY2hpbm5vdmF0b3JzLmNvbSIsCiAgICAgICAgICAicGhvbmUiOiAiKzEtNTU1LTEyMy00NTY3IiwKICAgICAgICAgICJleHRlbnNpb24iOiAxMDEKICAgICAgICB9LAogICAgICAgICJwcm9qZWN0cyI6IFsKICAgICAgICAgIHsKICAgICAgICAgICAgIm5hbWUiOiAiQ2xvdWQgTWlncmF0aW9uIiwKICAgICAgICAgICAgInN0YXR1cyI6ICJpbi1wcm9ncmVzcyIsCiAgICAgICAgICAgICJkZWFkbGluZSI6ICIyMDI0LTEyLTMxIgogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgIm5hbWUiOiAiTW9iaWxlIEFwcCBEZXZlbG9wbWVudCIsCiAgICAgICAgICAgICJzdGF0dXMiOiAiY29tcGxldGVkIiwKICAgICAgICAgICAgImRlYWRsaW5lIjogIjIwMjQtMDYtMzAiCiAgICAgICAgICB9CiAgICAgICAgXQogICAgICB9LAogICAgICB7CiAgICAgICAgImlkIjogIkUwMDIiLAogICAgICAgICJmaXJzdE5hbWUiOiAiSmFuZSIsCiAgICAgICAgImxhc3ROYW1lIjogIkRvZSIsCiAgICAgICAgInJvbGUiOiAiUHJvZHVjdCBNYW5hZ2VyIiwKICAgICAgICAiZGVwYXJ0bWVudCI6ICJQcm9kdWN0IiwKICAgICAgICAic2tpbGxzIjogWyJBZ2lsZSIsICJTdHJhdGVneSIsICJVc2VyIFJlc2VhcmNoIl0sCiAgICAgICAgImNvbnRhY3RJbmZvIjogewogICAgICAgICAgImVtYWlsIjogImphbmUuZG9lQHRlY2hpbm5vdmF0b3JzLmNvbSIsCiAgICAgICAgICAicGhvbmUiOiAiKzEtNTU1LTEyMy00NTY4IiwKICAgICAgICAgICJleHRlbnNpb24iOiAxMDIKICAgICAgICB9LAogICAgICAgICJwcm9qZWN0cyI6IFsKICAgICAgICAgIHsKICAgICAgICAgICAgIm5hbWUiOiAiTWFya2V0IEFuYWx5c2lzIiwKICAgICAgICAgICAgInN0YXR1cyI6ICJwZW5kaW5nIiwKICAgICAgICAgICAgImRlYWRsaW5lIjogIjIwMjQtMDktMzAiCiAgICAgICAgICB9CiAgICAgICAgXQogICAgICB9CiAgICBdLAogICAgImFjdGl2ZVNpdGVzIjogdHJ1ZSwKICAgICJyZXZlbnVlIjogewogICAgICAiMjAyMiI6IDUwMDAwMDAsCiAgICAgICIyMDIzIjogNzUwMDAwMCwKICAgICAgInByb2plY3RlZDIwMjQiOiA5MjIzMzcyMDM2ODU0Nzc1ODA3CiAgICB9CiAgfQp9

Alphanumeric-only alternative to base64 (one of the goals). Compression is of course slightly worse than base64 because of the limited alphabet.

Leave a Comment
Related Posts