【问题标题】:Base64.encode() not working for large byte arrayBase64.encode() 不适用于大字节数组
【发布时间】:2020-01-08 20:03:11
【问题描述】:

当输入字节数组的大小太大时,这行代码似乎停止工作:

byte[] encoded = Base64.encode(content, Base64.DEFAULT);

输入是:byte[] content,非常大。

有没有办法解决这个大尺寸问题。

提前致谢!

肖恩

【问题讨论】:

  • “停止工作”是什么意思?它会抛出错误吗?会挂吗?数组必须有多大?另外,Base64 类来自哪个库?它看起来不像标准的 Java API。
  • 这看起来像android.util.Base64,在这种情况下你应该使用android.util.Base64OutputStream来编码大量数据
  • @thatotherguy,你能提供一些例子吗?
  • 很遗憾,我对 Android API 的了解还不够,所以其他人应该放心。使用 Base64OutputStream 很简单,棘手的部分是重写程序以允许使用 Input/OutputStream 而不是 byte[] 来处理您的特定数据源/接收器
  • @Shawn - 如果其中一个答案解决了您的问题,您可以通过将其标记为已接受来帮助社区。接受的答案有助于未来的访问者自信地使用该解决方案。查看meta.stackexchange.com/questions/5234/… 了解如何操作。

标签: java base64 encode


【解决方案1】:

您可以使用Base64InputStream 代替Base64,它以流方式(无限大小)提供Base64 编码和解码。您可以查看this 获取一些示例。

【讨论】:

    【解决方案2】:

    由于提供的信息有限,我唯一能想到的建议是将content 数组分解成更小的块并遍历它们。

    【讨论】:

    • 不知道该怎么做。分割chuck中的字节数组,比如长度为N,要分割多少块来保证encode()工作?另外我知道,在编码时,编码字符串中会有一些大小膨胀,我们可以简单地从字节数组的块中附加那些编码字符串,附加的字符串是否与从原始编码的字符串相同字节数组?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-18
    • 1970-01-01
    • 2013-05-11
    • 1970-01-01
    • 2014-10-25
    • 1970-01-01
    相关资源
    最近更新 更多