我知道这可能是一个非常初学者的问题,但我找不到一个好的可靠资源来获取这些信息。
在Android应用程序中,我正在尝试通过不断添加更多数据来将数据保留在字符串中。最后,当用户关闭应用程序或点击“保存按钮”时,我会将其记录到数据 .csv 文件中。
我想知道Java中一个简单字符串可以容纳多少数据?这样,如果String数据类型耗尽了所分配的内存,应用程序就不会崩溃。 顺便说一下,我已经试图对我的应用程序进行压力测试,无论我存储多少数据在一个字符串中,它似乎都能正常运行。
Adit
我知道这可能是一个非常初学者的问题,但我找不到一个好的可靠资源来获取这些信息。
在Android应用程序中,我正在尝试通过不断添加更多数据来将数据保留在字符串中。最后,当用户关闭应用程序或点击“保存按钮”时,我会将其记录到数据 .csv 文件中。
我想知道Java中一个简单字符串可以容纳多少数据?这样,如果String数据类型耗尽了所分配的内存,应用程序就不会崩溃。 顺便说一下,我已经试图对我的应用程序进行压力测试,无论我存储多少数据在一个字符串中,它似乎都能正常运行。
Adit
这可能会受到应用程序可用堆大小的限制,这取决于手机型号和运营商/手机制造商。 对于Android设备,在此处的答案中列出了各种手机型号的最大堆大小; 它们的范围从16到256 MB不等。
请注意,Java将字符串存储为UTF-16代码,因此每个字符占用两个字节。 无论您是直接附加字符串还是使用StringBuilder(比较好的方法),您都将偶尔需要两倍的内存:一部分用于存储现有字符串,一部分用于在需要扩展时存储新的字符串/缓冲区。
综合考虑,最大字符串长度可能是4到6400万个字符左右,这取决于手机型号(远低于理论最大值231-1)。
你应该能够获得一个长度为Integer.MAX_VALUE的字符串(总是2147483647(2 31 - 1)按Java规范,最大数组大小,String类用于内部存储的最大值),或者半个最大堆大小(因为每个字符都是两个字节),以较小者为准。
然而,对于连接字符串序列,您应该使用StringBuilder,它专门用于此目的。
StringBuilder
的建议很好。 - Ted Hopp