2010-11-27 8 views
1

私はJavaにとって非常に新しいです。Javaで32000文字の文字列ストアを行うには?

イメージピクセルを文字列の中に保存したいと思います。しかし、画像が4000ピクセルを超える場合は、文字列にすべての文字を格納することができません。

複数の文字を格納する文字列を定義するにはどうすればよいですか?

+3

なぜ、バイトまたは整数配列を使用する代わりにイメージピクセルを文字列に格納したいですか? –

+0

イメージピクセルに特定のパターンがあるかどうかを確認したい。文字列があれば "substring"メソッドを使って簡単に見つけることができます。私は整数またはバイトでそれを格納する場合、私はこれを行うことはできません。 – Blacklabel

+0

@Blacklabel、もう少し詳しく説明できますか?それらのピクセルで何をしようとしているのかの例を示してください。より良い方法があるかもしれません。 –

答えて

2

エラーは何ですか? java.lang.Stringは、私が知っている限り、メモリに縛られています。 -Xmx引数でVMのヒープサイズを大きくすることができます。

java -Xmx1024m my.Thingy 

Javaヒープサイズに1024メガバイトのメモリを設定します。

+0

eclipseでこれを行う方法はありますか? – Blacklabel

+0

eclipseのヒープサイズを変更すると、Eclipse内でコードを実行している間にのみ影響を受けます。これは、通常、どのように物事を展開するかではありません。あなたはおそらく、日食を使用していくつかのデータ処理を行っていると述べています。 Eclipseで "http://wiki.eclipse.org/Eclipse.ini –

+0

"の設定を実行すると、Eclipseで実行している場合は、プログラムを起動するためのJVMオプションを設定できます –

0

実際に文字列にバイト配列を格納する必要がある場合は、適切な方法はBase64にエンコードすることです。 commons-codecにはこれを行うユーティリティクラスがBase64あります。

0

文字列には最大20億文字を使用できます。おそらく、イメージのすべてのバイトをStringに格納しようとするとどうなるか説明できますか?ストリングはバイナリデータを格納するためのものではないので、おそらくあなたはエンコーディングの問題に遭遇しているでしょう。

バイナリデータをStringに格納する最も簡単で安全な方法は、データを管理できるエンコーディングを使用するのではなく、リテラル変換を​​使用することです。

byte[] bytes 
// takes each byte as is with 0 as the "high" byte. 
String string = new String(bytes, 0); 
0

まず第一に、あなたの主な関心事は、私の知る限り、文字列内の文字を大量に保管についてであれば、それのための唯一の制約はintを返し文字列の長さ()メソッド、(ありますあなたはMAX_INT文字に制限されています)とJVMメモリは、Martinが指し示すように変更できます。 Eclipse内でこれを行うには、現在の実行構成を編集する必要があります。また、引数(Javaコマンド自体を除く)をすべて入れることができる「引数」という名前のタブがあります。

「こんにちは」という単語を見つけることについては、私の賭けはchar配列を使ってループを書くことになります。 Javaでの文字列の動作は、ロケールとcharエンコーディングの影響を受ける可能性があるため、結果が乱れる可能性があります。とにかく、あなたがステガノグラフィーのように私に聞こえる音を提案します。ステガノグラフィーで隠されたデータが含まれているイメージを見つけて抽出する技術については、実際にはいくつかの文献がありますので、steganalysisに関する研究に焦点を当てるべきでしょう(これが正しい単語であるかどうかは不明です)。

乾杯。