2015-11-25 4 views
-3

У меня есть простой вопрос.Чтение сериализованных объектов из двоичного файла в java?

Как читать все содержимое двоичного файла в java?

Я написал некоторый код, но он только извлекает первый объект.

Вот мой код:

ObjectInputStream in = new ObjectInputStream(new FileInputStream("C:\\Users\\فاطمة\\Downloads\\student.bin")); 
    Binary b2 = (Binary)in.readObject(); 
    System.out.println("Student ID: " + b2.id); 
    System.out.println("Student Name: " + b2.name); 
    System.out.println("Student Grade: " + b2.grade); 
    in.close(); 
+2

Есть ли более одного объекта? Если есть, то вы хотите десериализовать как «Список» так: «Список binaries = (List) in.readObject();'. Если объект не является какой-либо формой списка, то в файле присутствует только один объект. – malinator

+1

. Вы должны отредактировать свой заголовок, указав, что вы читаете сериализованные объекты, а не любые двоичные данные. – Aaron

+6

Скопируйте и вставьте 4 средних строки столько раз, сколько там являются пользователями в файле. Или, что более серьезно, используйте цикл. –

ответ

2

Как упоминалась malinator, это плохая практика, чтобы сцепить сериализованные объекты в одном файле, они должны содержаться в коллекции.

Если у вас нет доступа к коду, создающего файл, может быть 2 ситуации:

  • либо вы знаете, количество объектов, то вы можете сделать нужное количество ObjectInputStream.readObject() вызовов, предпочтительно с a for loop
  • или вы этого не сделаете, проблема заключается в обнаружении конца файла. Вы можете использовать петлю while в сочетании с try/catch(EOFException).
+0

Это должно быть 'catch (EOFException)', и это неплохая практика, так как API предназначен для использования. – EJP

+0

Конечно, я уверен. Это то, что 'EOFException' * для. * Чтобы сигнализировать конец файла. Конец файла. – EJP

+0

@EJP Я отредактировал свой ответ соответственно – Aaron

Смежные вопросы