String在Java中可容纳的最大数据量是多少?

时间:2013-03-12 18:22:53

标签: java android

我知道这可能是一个非常无礼的问题,但我找不到可靠的资源,我可以获得这些信息。

在Android应用程序中,我试图通过继续向其附加更多数据来保存String中的数据。最后,当用户关闭应用程序或点击“保存按钮”时,我将其记录到数据.csv文件中。

我想知道java中一个简单的字符串可以保存多少数据?,这样如果String数据类型用完了已分配的内存,应用程序就不会崩溃。 顺便说一下,我试图强调测试我的应用程序,无论我在一个字符串中存储多少数据,它似乎运行良好。

Adit

3 个答案:

答案 0 :(得分:28)

看到String类'length()方法返回一个int值,该方法返回的最大长度为Integer.MAX_VALUE,即2 ^ 31 - 1(或大约20亿。)

理论上你可以拥有2,147,483,647个字符串。我认为你不应该需要更多。

然而,正如@TedHopp在评论中指出并在他的回答中发表的那样,Android系统限制了你的堆空间,最低可达16 MB。因此,你实际上永远不会达到理论极限,并且会在4-64百万字符范围内的某个字符串中最大化。

答案 1 :(得分:9)

这可能会受到应用程序可用的堆大小的限制。这可能因手机型号和运营商/电话生产商而异。对于Android设备,答案here列出了各种手机型号的最大堆大小;它们的范围从16到256 MB。

请注意,Java将字符串存储为UTF-16代码,因此每个字符占用两个字节。无论是直接附加字符串还是使用StringBuilder(更好),您偶尔需要两倍的内存:一个用于存储现有字符串,另一个用于在需要扩展时存储新字符串/缓冲区。

一起考虑,最大字符串长度可能大约为4到6400万个字符,具体取决于电话(远低于理论最大值2 31 -1)。

答案 2 :(得分:6)

Bill the lizardthis问题

中回答
  

您应该能够通过Java规范获取长度为Integer.MAX_VALUE的字符串(总是2147483647(2 31 - 1),这是String类用于的最大数组大小内部存储)或最大堆大小的一半(因为每个字符是两个字节),以较小者为准。

但是,对于串联的字符串序列,您应该使用为此目的而制作的StringBuilder