Коллеги а кому не сложно, подскажите пожалуйста, у меня валидатор ругается по предпоследнему пункту. Но что-то я никак не могу понять что я делаю не правильно. По сути defaultReadObject восстанавливает при десериализации все поля кроме transient, я же отдельно создаю новый объект стрима и кладу его в переменную stream. Вроде все логично )))
package com.javarush.task.task20.task2022;
import java.io.*;
/*
Переопределение сериализации в потоке
*/
public class Solution implements Serializable, AutoCloseable {
private transient FileOutputStream stream;
public Solution(String fileName) throws FileNotFoundException {
this.stream = new FileOutputStream(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();
//out.close();
}
private void readObject(ObjectInputStream in) throws IOException, ClassNotFoundException {
in.defaultReadObject();
this.stream = new FileOutputStream("testFile",true);
//in.close();
}
@Override
public void close() throws Exception {
System.out.println("Closing everything!");
stream.close();
}
public static void main(String[] args) throws IOException, ClassNotFoundException {
Solution sol = new Solution("testFile");
sol.writeObject("Тестовая строка");
ObjectOutputStream oos = new ObjectOutputStream(sol.stream);
sol.writeObject(oos);
FileInputStream fis = new FileInputStream("solution");
ObjectInputStream ois = new ObjectInputStream(fis);
Solution newSol = (Solution) ois.readObject();
// newSol.writeObject("Еще одна строка для теста");
}
}package com.javarush.task.task20.task2022;
import java.io.*;
/*
Переопределение сериализации в потоке
*/
public class Solution implements Serializable, AutoCloseable {
private transient FileOutputStream stream;
public Solution(String fileName) throws FileNotFoundException {
this.stream = new FileOutputStream(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();
//out.close();
}
private void readObject(ObjectInputStream in) throws IOException, ClassNotFoundException {
in.defaultReadObject();
this.stream = new FileOutputStream("testFile",true);
//in.close();
}
@Override
public void close() throws Exception {
System.out.println("Closing everything!");
stream.close();
}
public static void main(String[] args) throws IOException, ClassNotFoundException {
Solution sol = new Solution("testFile");
sol.writeObject("Тестовая строка");
ObjectOutputStream oos = new ObjectOutputStream(sol.stream);
oos.writeObject(sol);
FileInputStream fis = new FileInputStream("solution");
ObjectInputStream ois = new ObjectInputStream(fis);
Solution newSol = (Solution) ois.readObject();
// newSol.writeObject("Еще одна строка для теста");
}
}