与Socket相关的流

时间:2015-05-04 16:49:34

标签: java

使用Scanner / PrintWriter操作这些流时,是否需要显式关闭它们或关闭套接字,关闭Scanner和PrintWriter对象?

1 个答案:

答案 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()不会关闭流,但会确保缓冲区中的所有内容都写入目标。