GWT 中的快速 base64 解码

Posted

技术标签:

【中文标题】GWT 中的快速 base64 解码【英文标题】:Fast base64 decoding in GWT 【发布时间】:2014-07-13 08:54:04 【问题描述】:

在 iPhone 4S 上解码 base64 时出现以下性能问题。我正在解码大小约为 80K 的“blob”。用于此的本机函数 atob() 非常快并且在几毫秒内完成。但是,这样的结果是一个字符串,其中字符串中每个字符的字符代码(使用 .charCodeAt() 获得)代表一个经过 base64 编码的二进制数据字节。我想将其转换为字节 [],但这似乎是一个非常缓慢的过程,尤其是 iPhone。只需遍历数组并在每个字符上调用 .charCodeAt() 并将其存储在例如在 iPhone 4S 上 UInt8Array 需要 1.2 秒——尽管我们谈论的只有 80K 并且 base64 解码已经完成——但字符到字节的解码需要这么长时间。如果将解码后的字符串(即 atob() 的输出)解析回 GWT 并在那里转换为 byte[](再次通过循环),则性能损失是相同的。所以我正在寻找的是:

    一种将 atob() 生成的字符串转换为 byte[] 的快速方法。与这样的操作相比,使用 charCodeAt() 将它们逐个字符转换似乎太慢了。 一种快速 base64 到 byte[] 解码器,不依赖 atob(),但可以原生生成 byte[]。

不幸的是,我为 #2 尝试的替代方法甚至比其他方法慢(3 倍)。

【问题讨论】:

出于兴趣,您实际上想做什么? 相关数据源仅提供 B64,因此必须在客户端对其进行解码。但是,请参阅我自己的回复。 【参考方案1】:

经过更多的实验,结果发现 String -> Uint8array 的转换确实没有之前所说的那么慢,这是由于另一个编程错误造成的。所以 1,2 秒实际上只有 40 毫秒左右。所以从我的 POV 来看,这可以关闭。

【讨论】:

以上是关于GWT 中的快速 base64 解码的主要内容,如果未能解决你的问题,请参考以下文章

快速从 Base64 格式解码

Swift 中的 Base64 编码不会在 Android 中解码

如何使用 php 解码 base64 中的字符串

Base64编解码中的坑

js中的blob,base64,url之间的关系

Swift base64 解码返回 nil