2012-02-26 88 views
0

我需要一种方法来将字节[]转换为字符串而不创建新的字符串对象。字节数组到字符串在Android

我不想要什么:

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

是否有另一种方式来达到同样的事情,而无需创建一个新的String对象?

我一直在寻找Base64类。那样有用吗?

+4

你想创建一个String对象而不创建它? :\ – amit 2012-02-26 08:09:01

+0

你为什么认为你需要这个? – 2012-02-26 08:11:00

+0

内存问题。我得到吨和吨字节数组,我需要变成字符串。垃圾收集似乎不能很好地工作,因为一段时间后我会发现内存异常。 – user1233527 2012-02-26 08:25:46

回答

2

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

字符串是不变的,所以你不能把新的数据到现有串 - 所以,除非你能找到已经有正确的数据(缓存我前面提到的),你会现有字符串必须创建一个新的字符串。

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

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

+0

但是,你*可以*拥有一个'String'池,并使用反射来改变它们。我同意这可能是一个可怕的解决方案,并可能对jvm造成严重破坏。 – amit 2012-02-26 08:11:31

+0

@amit:如果安全管理器允许,您可以在反射时更改它们。我不知道它是否在Android上,我认为这是一个不好的解决方案,我不会在答案中提到它:) – 2012-02-26 08:12:41

+0

同意。刚才提到理论上可能 - 对于未来的读者。如果我认为它实际上是一种解决方案,那么我会将其作为答案发布。 – amit 2012-02-26 08:14:06