1

I create a client similarity, where clients register an account (an object is created) which is stored in a file.

Objects are written to the file as required, I override the writeStreamHeader() method. But when I try to read them all, their file throws an exception.

Write the objects to the file here.

 public static void saveAccaunt(LoginAndPass gamers) {
    boolean b = true;
    FileInputStream fis = null;
    try{
        fis = new FileInputStream("student.ser");
        fis.close();
    }
    catch (FileNotFoundException e)
    {
        b = false;
    } catch (IOException e) {
        e.printStackTrace();
    }

    try {
        FileOutputStream fileOutputStream = new FileOutputStream("student.ser",true);
        ObjectOutputStream os = null;
        if(b = true){
            os = new AppendingObjectOutputStream(fileOutputStream);
            System.out.println("Объект добавлен!");
        }else {
            os = new ObjectOutputStream(fileOutputStream);
            System.out.println("Создан");
        }
        os.writeObject(gamers);
        os.close();
        fileOutputStream.close();
    } catch (FileNotFoundException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }
}


 public static void main(String[] args) {
    try {
        FileInputStream fileInputStream = new FileInputStream("student.ser");
        ObjectInputStream objectInputStream = new ObjectInputStream(fileInputStream);
        test = new ArrayList<>();
        while (true){
            test.add(objectInputStream.readObject());
        }

    } catch (FileNotFoundException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    } catch (ClassNotFoundException e) {
        e.printStackTrace();
    }
    System.out.println(test.get(0));

}

Here is the error log for the exception thrown:

java.io.StreamCorruptedException: invalid stream header: 79737200
at java.io.ObjectInputStream.readStreamHeader(ObjectInputStream.java:866)
at java.io.ObjectInputStream.(ObjectInputStream.java:358)
at Registratsiya.AllGamers.main(AllGamers.java:48)
Exception in thread "main" java.lang.NullPointerException at Registratsiya.AllGamers.main(AllGamers.java:61)

Kebab Programmer
  • 1,213
  • 2
  • 21
  • 36
WolF Ram
  • 11
  • 4
  • 5
    I think that the problem is this: `if(b = true){`. Note that you have mistakenly used `=` instead of `==`. This means that you will be calling your `AppendingObjectOutputStream` every time, and that (presumably) means there will be no valid stream header. – Stephen C Feb 21 '19 at 12:22
  • And note that `if (b)` is simpler, more efficient, and cannot possibly have this problem. Don't compare booleans to true or false. They already are one or the other. – user207421 Feb 21 '19 at 14:19

0 Answers0