一个字符串在java中可以容纳的最大数据量是多少? [复制]
Posted
技术标签:
【中文标题】一个字符串在java中可以容纳的最大数据量是多少? [复制]【英文标题】:What is the maximum amount of data that a String can hold in java? [duplicate] 【发布时间】:2013-02-28 10:21:45 【问题描述】:我知道这可能是一个非常愚蠢的问题,但我没有找到可以获取此信息的可靠资源。
在 android 应用程序中,我试图将数据保存在 String 中,方法是继续向其附加更多 data 。最后,当用户关闭应用程序或点击“保存按钮”时,我将其记录到数据 .csv 文件中。
我想知道java中一个简单的String可以容纳多少数据?,这样如果String数据类型用完分配的内存,应用程序就不会崩溃。 顺便说一句,我尝试对我的应用程序进行压力测试,无论我在一个字符串中存储多少数据,它似乎都运行良好。
修改
【问题讨论】:
你应该使用类似 StringBuilder 的东西 检查这个(***.com/questions/1179983/…)。 (2^31 - 1) 个字符 感谢所有出色的答案和建议。我认为 StringBuilder 概念是我所缺少的!谢谢 【参考方案1】:看到String 类的length() 方法返回一个int 值,该方法返回的最大长度将为Integer.MAX_VALUE,即2^31 - 1(或大约20 亿)。
所以理论上你可以拥有一个包含 2,147,483,647 个字符的字符串。我不认为你应该需要更多。
但是,正如@TedHopp 在 cmets 中指出并在他的回答中发布的那样,Android 系统会限制您的堆空间,低至 16 MB。因此,您实际上永远无法达到理论上的限制,并且将在 4-64 百万字符范围内的某个字符串中达到最大值。
【讨论】:
祝你好运,在 Android 设备上获得任何接近的结果。 OP 要求的是实际限制(“使应用程序不会崩溃”),而不是 Java 语言施加的理论限制。 @TedHopp 是的。我是根据标题“Java”来回答的。我会编辑我的答案 谢谢,使用 StringBuilder 也是个好主意,但我认为我的应用程序不需要超过 400 万个字符! 不可能的 20 亿? w O.o. 2 GB 字符串通常应该足够了 :) 如果您有那么多内存用于单个字符串。【参考方案2】:这可能会受到应用程序可用的堆大小的限制。这可能因手机型号和运营商/手机生产商而异。对于 Android 设备,答案here 列出了各种手机型号的最大堆大小;它们的范围从 16 到 256 MB。
请注意,Java 将字符串存储为 UTF-16 代码,因此每个字符占用两个字节。无论您是直接附加字符串还是使用 StringBuilder(更好),您有时都需要两倍的内存:一个用于存储现有字符串,另一个用于在需要扩展时存储新的字符串/缓冲区。
综合考虑,最大字符串长度可能约为 4 到 6400 万个字符,具体取决于电话(远低于 231-1 的理论最大值)。
【讨论】:
【参考方案3】:Bill the lizard 在this 问题中回答
您应该能够通过 Java 规范获得长度为 Integer.MAX_VALUE(始终为 2147483647 (231 - 1) 的字符串,即 String 类用于的数组的最大大小内部存储)或最大堆大小的一半(因为每个字符是两个字节),以较小者为准。
但是,对于您的字符串连接序列,您应该使用为此目的而制作的StringBuilder。
【讨论】:
OP 要求的是实际限制,而不是 Java 语言施加的理论限制。不过,关于使用StringBuilder
的好处。
这很有帮助,很好的答案..以上是关于一个字符串在java中可以容纳的最大数据量是多少? [复制]的主要内容,如果未能解决你的问题,请参考以下文章