1214 日 , 2023 23:33:36
byte流编码成字符串二三事

遇到了这样一个场景:
我需要使用消息队列将一个object发送出去;
但是公司的kafka只支持接受String(具体原因很复杂,但是这个是绕不过去的)。
现在就有了这么几个方案

  1. 直接使用json序列化
  2. 使用序列化产品进行序列化(hessian,Kryo)等

验证之后发现直接json的性能实在是太差了,耗时长且占CPU。

所以优化的方向变成了使用序列化协议进行序列化;
但是序列化出来的一定都是byte流而不是字符串,发送出去时需要再编码成字符串;
这里最初使用的是new String(bytes, StandardCharsets.UTF_8)这种方法。
问题有:

  1. 序列化结果中会有UTF_8中不包含的比特组合;java会将这些bit丢弃,导致得到的消息无法反序列化
  2. 由于UTF_8是变长编码,所以慢的令人发指

之后想到了使用base64;可以胜任但是耗时还是有一些长;

最后发现了ISO_8859_1 这个编码集;定长编码所以速度快& 全覆盖所以不会丢bit,使用它将byte转字符串的速度是base64的五十倍,uft-8的500倍!

file

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!