ObjectInputStream не находит никаких данных для извлечения?

#java #inputstream #objectinputstream

#Ява #входной поток #поток ввода объекта

Вопрос:

Я пытаюсь читать и записывать объекты формы в файл для программы рисования, но когда я пытаюсь прочитать из файла, он показывает, что файл пуст. Файл определенно записывается и обновляется, но при попытке чтения из файла он показывает, что доступно ноль байтов. Класс shape сериализуем, поэтому я не уверен, почему это вообще не работает.

 public void writeToFile() {  try {  FileOutputStream fileOut = new FileOutputStream("C:\Users\johnm\eclipse-workspace\CSE205_Assignment05\save.ser");  ObjectOutputStream out = new ObjectOutputStream(fileOut);  for (Shape item : shapes) {  out.writeObject(item);  }  out.close();  fileOut.close();  System.out.println("Serialized data is saved in output.ser");  } catch (FileNotFoundException e) {  e.printStackTrace();  } catch (IOException e) {  e.printStackTrace();  }  }    public void loadFromFile() {  boolean cont = true;  Shape shape = null;  int count = 0;  while (cont) {  try {  FileInputStream fileIn = new FileInputStream("C:\Users\johnm\eclipse-workspace\CSE205_Assignment05\save.ser");  ObjectInputStream in = new ObjectInputStream(fileIn);  System.out.println(in.available()   " Bytes");  if (in.available() != 0) {  shape = (Shape) in.readObject();  if (shape != null) {  shapes.add(shape);  count  ;  } else {  System.out.println("Shape is null");  }  } else {  cont = false;  }  in.close();  fileIn.close();  System.out.println("Deserialized "   count   " Objects");  } catch (ClassNotFoundException c) {  System.out.println("Class not found");  } catch (FileNotFoundException e) {  e.printStackTrace();  } catch (IOException e) {  e.printStackTrace();  }  }  }  

Ответ №1:

Хорошо, по какой-то причине метод .available() не показывает никаких байтов, независимо от того, есть ли они на самом деле или нет. Чтобы противостоять этому, я просто добавил еще один оператор try/catch, в котором он непрерывно считывает объекты, пока не попадет в исключение EOFException и не поймает себя.

Мой код в конечном итоге выглядел так, как когда-то работал.

 public void loadFromFile() {  //** Loads set of shape objects from file  Shape shape = null;  int count = 0;  try {  FileInputStream fileIn = new FileInputStream("save.ser");  ObjectInputStream in = new ObjectInputStream(fileIn);  System.out.println(in.available()   " Bytes");  try {  while (true) {  shape = (Shape) in.readObject();  if (shape != null) {  shapes.add(shape);  count  ;  } else {  System.out.println("Shape is null");  }  }  } catch (EOFException e) {  System.out.println("End of file exception");  }  in.close();  fileIn.close();  System.out.println("Deserialized "   count   " Objects");  repaint();  } catch (ClassNotFoundException e) {  e.printStackTrace();  } catch (FileNotFoundException e) {  e.printStackTrace();  } catch (IOException e) {  e.printStackTrace();  }  }