29

私はこれが本当にお粗末な質問かもしれないことを知っていますが、私はこの情報を得ることができる良い信頼できるリソースを見つけられませんでした。

Androidアプリケーションでは、データを追加し続けるだけで、データを文字列に保持しようとしています。そして最後に、ユーザーがアプリケーションを閉じるか、「保存ボタン」を押すと、データの.csvファイルにログインします。

単純な文字列がJavaで保持できるデータの量を知りたいですか?、Stringデータ型が割り当てられたメモリを使い果たした場合に、アプリがクラッシュしないようにします。ところで、私は自分のアプリケーションのストレステストを試みましたが、1つの文字列にいくらデータを保存しても問題なく動作するようです。

Adit

4

3 に答える 3

36

Stringクラスのlength()メソッドがint値を返すので、メソッドによって返される最大の長さはInteger.MAX_VALUEになります。これは、2 ^ 31-1(または約20億)です。

したがって、理論的には、2,147,483,647文字の文字列を持つことができます。それ以上は必要ないと思います。

ただし、@ TedHoppがコメントで指摘し、彼の回答に投稿したように、Androidシステムはヒープスペースを制限し、16MBまで低くします。したがって、実際には理論上の制限に達することはできず、4〜6400万文字の範囲の文字列で最大になります。

于 2013-03-12T18:27:16.540 に答える
9

これはおそらく、アプリケーションで使用可能なヒープサイズによって制限されます。これは、電話モデルと携帯電話会社/電話メーカーの両方によって異なる場合があります。Androidデバイスの場合、ここでの回答は、さまざまな電話モデルの最大ヒープサイズを示しています。それらの範囲は16〜256MBです。

Javaは文字列をUTF-16コードとして格納するため、各文字は2バイトを占めることに注意してください。文字列を直接追加する場合でも、StringBuilderを使用する場合(はるかに優れています)でも、場合によっては2倍のメモリが必要になります。1つは既存の文字列を格納し、もう1つは拡張が必要な​​ときに新しい文字列/バッファを格納します。

まとめると、文字列の最大長は、電話によって異なりますが、400万から6400万文字程度になる可能性があります(理論上の最大値である2 31 -1をはるかに下回ります)。

于 2013-03-12T18:32:37.323 に答える
6

トカゲのビルがこの質問に答えました

長さInteger.MAX_VALUE(Java仕様では常に2147483647(2 31-1 、Stringクラスが内部ストレージに使用する配列の最大サイズ)または最大ヒープサイズの半分(各文字は2バイトであるため)、どちらか小さい方。

ただし、文字列のシーケンスを連結するには、そのような目的で作成されたStringBuilderを使用する必要があります。

于 2013-03-12T18:27:09.263 に答える