使用Scanner / PrintWriter操作这些流时,是否需要显式关闭它们或关闭套接字,关闭Scanner和PrintWriter对象?
答案 0 :(得分:1)
大多数java IO类使用' Decorator'用于包装原始类型的模式。直接关闭套接字对象不会关闭Scanner / PrintWriter,但关闭Scanner / Printwrite会将操作级联到铺设原始类型下。
如果你直接关闭Socket,那么代码依赖于' Scanner / Printwriter'可能会得到意想不到的结果。
大多数的装饰类,提供包装类型方法和级联操作,但最好检查装饰类的来源。
如果是' PrintWriter',它会调用'关闭'在作家对象上。
public void close() {
try {
synchronized (lock) {
if (out == null)
return;
out.close();
out = null;
}
}
catch (IOException x) {
trouble = true;
}
}
flush()不会关闭流,但会确保缓冲区中的所有内容都写入目标。