1

または、ジェネリックオブジェクト(元々は2Darrayでした)をサイズを知らずに2D配列にキャストする方法はありますか?

ユーザーがデータを入力し、そのデータがユーザーが入力した量に応じてサイズが異なる2D配列に送信されるプログラムがあります。このチュートリアルで学んだことを使用して、配列をオブジェクトとしてファイルに保存しました。

http://beginwithjava.blogspot.com/2011/04/java-file-save-and-file-load-objects.html

([保存するには]ファイルを開き、オブジェクトストリームを開き、オブジェクトを書き込み、閉じます)([復元するには]ファイルを開きます。ファイルからオブジェクトストリームを開きます。オブジェクトをストリームに読み取ります。オブジェクトをキャストし、ストリームとファイルを閉じます。)

ただし、2D配列の大きさがわからないため、復元するときにオブジェクトを2dArrayにキャストする方法がわかりません。

4

2 に答える 2

2

読み取る前にサイズを知る方法はないため、最も一般的な解決策は、データを保存する前にサイズを保存することです。リーダーは、サイズを読み取り、十分なメモリを割り当て、通常の方法でデータの読み取りを続行します。

他のあまり一般的ではない方法は、データの各行がどこで終了するかを示すためにファイルにマーカーを保存することです。ある意味で、これはCで文字列をnullで終了することに似ています。この場合、文字列の長さは明示的に格納されませんが、毎回再計算する必要があります。この方法には、事前割り当てができないという欠点があります。つまり、適切なサイズのデータ​​を収容するのに十分なメモリを割り当てるか、移動中に動的に再割り当てする必要があります。

于 2012-12-03T02:35:11.390 に答える
0

javas ArrayListは必要に応じて自動的に大きくなり、要素の数が不明であるという不幸な状況にある場合に役立ちます。ファイルが読み取られた後、これらの配列リストを配列に変換できます。

ただし、ファイルの先頭にサイズを保存する方がはるかに優れています。

于 2012-12-03T02:51:00.700 に答える