2012-03-16 5 views
1

私は自分のゲームにセーブ/ロードロジックを書く必要がありますが、私はJavaを初めて使い、バイナリI/Oを使っていません。私はまだ書込みを始めていないので、書込み/読み込み速度のように、それをより簡単にまたはより速くするライブラリはありますか?または、以下のデータを保存するための良いアプローチですか?バイナリセービングゲームをJava上でより簡単にまたはより速くするためのライブラリや良いアプローチはありますか?

保存データは、約2000単位(Array-Int(2000)、Array-String(100)、Array-Boolean(500)、Array-Float(500))で構成されます。

私はそれが非常に大きいことを知っています。私はそれをシリアル化するためにxstreamを使用していましたが、ファイルのサイズは、おそらく生のxmlデータで100〜200MBのようになり、また保存が遅くなります。

+0

JSONについて教えてください。 – GreyBeardedGeek

+0

私は多くのシリアライズライブラリを試しましたが、データが大きすぎてシリアル化できないと思います。バイナリセーブ/ロードメソッドを手動で作成するつもりです – Elonoa

+0

あなたのプラットフォームにもタグを付けることができます。これがAndroidのようにハンドヘルドなら、誰かがすでにこれに取り組んでいると確信しています。 –

答えて

2

I/Oでは、ストレージデバイスは一般的に制限要因であり、ファイルサイズに比例します。 XMLの代わりにバイナリ形式を使用することは、ファイルサイズと処理オーバーヘッドの両方を削減するため、確かに正しい方向への一歩です。

しかし、さらにサイズを縮小することを検討する価値があるかもしれません。例えば、あなたはintsが本当に必要なのですか?文字列がUnicodeアルファベット全体を使用するか、1バイト文字エンコーディングを使用することで逃れることができますか?

バイナリデータファイルを書き込む最も簡単な方法は、Java Serializationを使用することです。そのため、最初に試してみましょう(もちろん、BufferedOutputStreamを使用してください)。単純なDataOutputStreamを使用すると、実行時間が少し短くなります(タイプ記述子がないためにファイルがわずかに短くなります)が、フィールドを自分で記述する必要があります。

これを実行したら、CPUやI/Oが制限要因になるかどうかを調べる価値があります(たとえば、ファイルが書き込まれるときにCPU使用率を監視するなど)。スペアCPUと非常に規則的なデータを持っている場合は、GZipOutputStreamを使用して、その場でファイルを圧縮して書き込みをスピードアップすることができます。

+0

私はいつもJavaのシリアライゼーションが非常に遅いと思っていましたが、それをxstreamに置き換えました.xstreamを使用して2秒かかっている間にゲームをシリアライズするのにわずか0.2秒かかりました。データ。ありがとう – Elonoa

関連する問題