1. Что не так?
В методе readObject(ObjectInputStream in) поле stream должно быть
инициализировано новым объектом типа FileOutputStream с параметрами(fileName, true).
2. Как понять метод flush() в этом коде? То есть мы сначала записываем строку в stream, а потом тут же очищаем её? Значит ничего не записываем в итоге?
public void writeObject(String string) throws IOException {
stream.write(string.getBytes());
stream.write("\n".getBytes());
stream.flush();
}
package com.javarush.task.task20.task2022;
import java.io.*;
/*
Переопределение сериализации в потоке
*/
public class Solution implements Serializable, AutoCloseable {
transient private FileOutputStream stream;
private String path;
public Solution(String fileName) throws FileNotFoundException {
this.stream = new FileOutputStream(fileName);
this.path = fileName;
}
public void writeObject(String string) throws IOException {
stream.write(string.getBytes());
stream.write("\n".getBytes());
stream.flush();
}
private void writeObject(ObjectOutputStream out) throws IOException {
out.defaultWriteObject();
}
private void readObject(ObjectInputStream in) throws IOException, ClassNotFoundException {
String path = (String) in.readObject();
stream = new FileOutputStream(path,true);
}
@Override
public void close() throws Exception {
System.out.println("Closing everything!");
stream.close();
}
public static void main(String[] args) throws IOException, ClassNotFoundException {
Solution solution = new Solution("Test");
solution.writeObject("1234");
FileOutputStream fileOutputStream = new FileOutputStream("C:\\Users\\Вадим\\Music\\Test\\Inside\\TestOutput.txt");
ObjectOutputStream objectOutputStream = new ObjectOutputStream(fileOutputStream);
objectOutputStream.writeObject(solution);
FileInputStream fileInputStream = new FileInputStream("C:\\Users\\Вадим\\Music\\Test\\Inside\\TestOutput.txt");
ObjectInputStream objectInputStream = new ObjectInputStream(fileInputStream);
Solution solution1 = (Solution) objectInputStream.readObject();
}
}