Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/328.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
一个字符串在java中可以保存的最大数据量是多少?_Java_Android - Fatal编程技术网

一个字符串在java中可以保存的最大数据量是多少?

一个字符串在java中可以保存的最大数据量是多少?,java,android,Java,Android,我知道这可能是一个真正的noobish问题,但我发现没有好的可靠资源,我可以得到这些信息 在Android应用程序中,我试图通过继续向数据追加更多数据来保存字符串中的数据。最后,当用户关闭应用程序或点击“保存”按钮时,我将其记录到data.csv文件中 我想知道一个简单的字符串在java中可以保存多少数据?,这样当字符串数据类型耗尽分配的内存时,应用程序不会崩溃。 顺便说一句,我试着对我的应用程序进行压力测试,无论我在一个字符串中存储了多少数据,它似乎都运行良好 有问题的回答 您应该能够获得长度

我知道这可能是一个真正的noobish问题,但我发现没有好的可靠资源,我可以得到这些信息

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

我想知道一个简单的字符串在java中可以保存多少数据?,这样当字符串数据类型耗尽分配的内存时,应用程序不会崩溃。 顺便说一句,我试着对我的应用程序进行压力测试,无论我在一个字符串中存储了多少数据,它似乎都运行良好

有问题的回答

您应该能够获得长度为Integer.MAX_值的字符串(根据Java规范,总是2147483647(231-1),字符串类用于内部存储的最大数组大小)或最大堆大小的一半(因为每个字符都是两个字节),以较小者为准

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

由于类的方法返回一个int值,因此该方法返回的最大长度将是Integer.MAX_值,即2^31-1(约20亿)

理论上,你可以有一个2147483647个字符的字符串。我认为你不应该需要更多


然而,正如@TedHopp在评论中指出的,并在他的回答中发布的那样,Android系统限制了你的堆空间,低至16MB。因此,实际上,您永远无法达到理论限制,并且将使用400-6400万字符范围内的某个字符串进行最大输出。

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

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


综合考虑,最大字符串长度可能为400万到6400万个字符,具体取决于手机(远低于理论上的最大长度231-1)。

您应该使用类似于StringBuilder的工具检查此()(2^31-1)字符感谢所有伟大的答案和建议。我想StringBuilder的概念是我错过的!感谢你在安卓设备上实现了这一点。OP要求的是实际的限制(“以便应用程序不会崩溃”),而不是Java语言强加的理论限制。@TedHopp说得对。我是根据标题“Java”来回答的。我会编辑我的回答谢谢,StringBuilder的使用也是一个好主意,但我不认为我的应用程序需要超过400万个字符!那是不可能的20亿?w O.O.2GB字符串通常应该足够了:)如果单个字符串有那么多ram。OP要求的是实际限制,而不是Java语言强加的理论限制。不过,关于使用
StringBuilder
,这是一个很好的观点。这非常有帮助,回答也很好。。