-1

わかりました、私はこれに長い間取り組んできました、私は映画の在庫を持っています

    Iroman 3
    Momento 2
    LifeofPi 2
    Superman 2
    The Crazies 1

例外を取得します: java.io.StreamCorruptedException: 無効なストリーム ヘッダー: 49726F6E (つまり、入力ファイルの最初の部分をアイロンします。)

ロードできない理由がわかりました。ObjectInputStream は、ObjectOutputStream を使用して以前に書き込まれたプリミティブ データとオブジェクトを逆シリアル化します。「inventory.dat は、以前に ObjectOutputStream を使用して書き込まれたシリアル化されたオブジェクトのファイルではない可能性があります。代わりに InputStreamReader を使用することをお勧めします。

InputStreamreader を使用してみましたが、明らかに、使用するオブジェクトはこのタイプの入力メソッドでは機能しません。

-------目録は、各項目が表すタイトルでソートされた、データ項目のソートされたリスト (データ項目のリンクされたリストとして実装された ADT ソート済みリスト) です。

-------- 各在庫項目には、タイトル、所有値、希望値、および顧客のリスト (待機リスト) が含まれています。

 public static void main(String[] args)
{
    //
    //  Loading from the inventory.dat
    //
    try {
        FileInputStream fis = new 
                            FileInputStream("inventory.dat");
        ObjectInputStream ois = new ObjectInputStream(fis);
        Object o = ois.readObject();
        inventory = (SortedList)o;
    }
    catch (FileNotFoundException fnfe) {
        inventory = new SortedList();
    }
    catch (Exception e) {
        System.out.println(e);
    }
4

2 に答える 2

2

あなたは次のように述べています:

InputStreamreader を使用してみましたが、明らかに、使用するオブジェクトはこのタイプの入力メソッドでは機能しません。

いいえ、このタイプの入力方法では機能しないことを示唆する問題について明らかなことは何もありません。あなたのコードが機能するまで何も仮定しないでください。明らかな唯一のことは、ファイルにテキストデータが含まれている場合、これはテキストではなくシリアル化されたデータ用であるため、ObjectInputStream を使用しないでください。代わりに、BufferedReader でラップされた InputStreamReader を使用する必要があります。それか、ファイルでスキャナーを使用します。

データを読み取り、データを分割し、読み取ったデータ行ごとにコンストラクターを使用してインベントリ オブジェクトを作成します。

擬似コード:

Create File from your file path String
Create Scanner object, fileScanner with the File
while the fileScanner has a nextLine to read
  String line gets fileScanner's nextLine.
  Create a line Scanner object, lineScanner, with line of text.
  name String gets lineScanner's next token
  value int gets lineScanner's next int.
  close lineScanner
  Create your object of interest with the name and value values
  put it in your collection
end while loop
close fileScanner
于 2013-09-25T02:34:37.033 に答える