подскажите плз, почему close закрывает поток который принимаем в качестве параметра?
ведь у нас метод переопределен :
@Override
public void close() throws Exception {
System.out.println("Closing everything!");
stream.close();
}
и тут видно что close вызывается именно у stream, а не у ObjectOutputStream out или ObjectInputStream in.
Спасибо!
ниже решенная задача:
public class Solution implements Serializable, AutoCloseable {
private transient FileOutputStream stream;
String filename;
public Solution(String fileName) throws FileNotFoundException {
this.stream = new FileOutputStream(fileName);
this.filename = 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(this.filename,true);
// in.close();
}
@Override
public void close() throws Exception {
System.out.println("Closing everything!");
stream.close();
}
public static void main(String[] args) {
}
}
REM
29 уровень
почему close вызывает закрытие у потока полученного в качестве параметра???
Обсуждается
Комментарии (3)
- популярные
- новые
- старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
Ярослав Java Developer Master
17 марта 2019, 09:03
Слишком мало кода скинул. Тут не видно ни то, что такое stream, ни твои ObjectOutputStream out и ObjectInputStream in.
0
REM
17 марта 2019, 09:20
спс, выложил код задачи.
0
Ярослав Java Developer Master
17 марта 2019, 09:58
В общем, задачи методов readObject и writeObject - записать и сохранить объект. И это приватные методы, они вызываются где-то в JVM через рефлексию или каким-то другим способом, и туда передаёт ObjectInputStream и ObjectOutputStream. И после нужных манипуляций, оно автоматически закрывает потоки, точно так же, как и открывает.
Другими словами, это все делается под капотом, а методы readObject и writeObject должны только читать/сохранять объект, не более.
0