什么是一个string可以容纳在Java中的最大数据量?

我知道这可能是一个非常不好的问题,但我没有find可靠的资源,我可以得到这个信息。

在Android应用程序中,我试图通过继续添加更多数据来保存string中的数据。 最后,当用户closures应用程序或点击“保存button”时,我将其logging到数据.csv文件中。

我想知道一个简单的string可以在java中保存多less数据? 这样,如果String数据types用完了分配的内存,应用程序不会崩溃。 顺便说一句,我试图压力testing我的应用程序,它似乎运行良好,无论多less数据我存储在一个string。

平硐

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

所以理论上你可以有2,147,483,647个字符的string。 我认为你不需要太多。

不过,正如@TedHopp在评论中指出的那样,Android系统限制了你的堆空间,最低只有16MB。 因此,你实际上不可能达到理论上的极限,并且会在字符范围4-64万字符的范围内最大化string。

这可能会受到应用程序可用的堆大小的限制。 这可以根据手机型号和运营商/电话制造商而有所不同。 对于Android设备, 这里的答案列出了各种手机型号的最大堆大小; 它们的范围从16到256 MB。

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

综合考虑,最大string长度可能是4至6400万字符的量级,具体取决于电话(远低于理论最大值2 31 -1)。

比尔蜥蜴在这个问题上回答

您应该能够得到一个长度为Integer.MAX_VALUE的string(Java规范始终为2147483647(231 – 1),String类用于内部存储的最大数组大小)或最大堆大小的一半每个字符是两个字节),以较小者为准。

但是,对于串联的string序列,您应该使用为此目的而devise的StringBuilder 。