2016-06-11 2 views
-1

文字列、バイト[]、およびカスタムクラスを含むArrayListがあるとしましょう。MyClass 。私は3つすべてのファイルを同じファイルに複数回保存する必要があります。すべてをバイト配列に変換して保存することで、そのように思っていました。文字列はかなり単純です:バイト[]に変換してファイルに書き込んで、バイト配列と同じものを作成し、ArrayListをbyte []またはbyte []の束に変換してファイルに書き込むこともできます。可変サイズのバイナリチャンクをファイル(おそらくバイト[]より大きい)に読み書きする方法

書き込み/読み込みしようとすると、問題が顕在化します。これは、1バイトに収まるサイズよりも長くなり、そのための良い解決策が見つかりませんでした。たとえば、文字列が非常に非常に長く、utf-8でエンコードされた文字を含んでいる、あるいはArrayListに含まれる要素が多すぎてbyte []に​​収まらない場合は、ファイルに書き込むか、読み込むのに良い方法がありませんファイルから。

私が理解しているように、long型のインデックスをとる配列型はありません。私のファイルは少なくとも数GB(5〜25GBのようなもの)のファイルサイズを超えることができなければならないので、ファイル全体を読むことは4GB未満のサイズのファイルに対してのみ機能します(私は思う)。ここで

は、私が出ているものです:最初

私は次のxバイトに格納していたデータの種類を保存します。このために私はビットマスクと私が保存したいデータのすべての種類(文字列、文字列の種類、MyClassのさまざまな内容など)を1バイトで表すことができます。次に、データの長さをバイト(x)に格納し、次にデータそのものを格納します。今のところ私はint型のxのためにこれを行うことしかできませんでしたが、私はそれも長く働く必要があります。最後に、最後に編集されてから破損していないかどうかを確認するために、保存されたデータのチェックサム(md5?)を作成し、ファイルにチェックサムを追加することもできます。

これは、読み書きのためにこれを達成する方法(必ずしも速く効率的である必要はありません)または正しい方向に押すことに関するアドバイスが必要です。

答えて

0

おそらく、シリアライズライブラリが役立ちますか?以下のQ/Aを見てみましょう:それをチェックサムについてはJava: Serializing a huge amount of data to a single file

を、あなたはこの答えを見てすることができます:https://stackoverflow.com/a/32760172/6335364

基本的にあなたが戻ってそれとしてハッシュを計算しDigestInputStream、にファイルを読み込みますそれで、あなたは操作の終わりにそれを取り出すことができます。

関連する問題