【问题标题】:byte array to String in AndroidAndroid中的字节数组到字符串
【发布时间】:2012-02-26 08:05:08
【问题描述】:

我需要一种将 byte[] 转换为 String 而无需创建新 String 对象的方法。

我不想要的:

String s= new String(byte[], int offset, int byteCount);

是否有另一种方法可以在不创建新的 String 对象的情况下实现相同的目标?

我一直在研究 Base64 类。这行得通吗?

【问题讨论】:

  • 您想创建一个String 对象,而不创建它? :\
  • 你认为你为什么需要这个?
  • 内存问题。我需要将大量字节数组转换为字符串。垃圾收集似乎无法正常工作,因为我在一段时间后出现内存不足错误。

标签: android string bytearray base64


【解决方案1】:

这只有在您在某个地方缓存了从您要获取的每个输入生成的字符串时才有可能。

字符串是不可变的,因此您不能将新数据放入 现有 字符串中 - 因此,除非您可以 找到 一个已经拥有正确数据的现有字符串(我之前提到的缓存)你必须创建一个新字符串。

(我也强烈建议您指定要使用的字符编码,而不是依赖系统默认编码。)

当然,如果这不是真正编码的文本开头(例如,如果 byte[] 数据来自图像),那么 Base64 无论如何都会更合适 - 但这与您是否需要新字符串是正交的.

【讨论】:

  • 但是,您可以拥有一个Strings 池,并使用反射动态更改它们。我同意这可能是一个糟糕的解决方案,并且可能会对 jvm 造成严重破坏。
  • @amit:如果安全管理器允许,您可以通过反射更改它们。我不知道它是否适用于 Android,我认为这是一个糟糕的解决方案,我不会在答案中提及它:)
  • 同意。刚刚提到它在理论上是可能的 - 对于未来的读者。如果我认为它实际上是一个解决方案,我会发布它作为答案。
【解决方案2】:

只需将 Base64.java 文件放入您的项目包中。 & 采用 String str = Base64.encodeBytes(字节数组);这会给你 byte[] 到字符串的转换。你可以从http://iharder.sourceforge.net/current/java/base64/下载base64.java

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-10-04
    • 2015-07-13
    • 1970-01-01
    • 2011-02-04
    • 1970-01-01
    • 2021-01-03
    • 1970-01-01
    相关资源
    最近更新 更多