使用try-with-resources资源尝试外部

时间:2014-03-26 14:02:45

标签: java objectinputstream objectoutputstream socketchannel try-with-resources

我正在使用SocketChannel在服务器和客户端之间发送消息。客户端与服务器连接后,服务器会在try-with-resources尝试中打开InputStreamsOutputStream,以便从客户端接收消息并发送消息 客户端,如下:

try (ObjectOutputStream out = new ObjectOutputStream(socket.getOutputStream());
     ObjectInputStream in = new ObjectInputStream(socket.getInputStream())) {}

我想在试用之外访问out。该try包含一个while循环,它反复检查消息是否已到达in,这可以正常工作。

我尝试设置一个全局变量,比如说global_out

ObjectOutputStream global_out;
...
try (ObjectOutputStream out = new ObjectOutputStream(socket.getOutputStream());
     ObjectInputStream in = new ObjectInputStream(socket.getInputStream())) {

    setOut(out);
    while(should_check) {
        Object message = in.readObject();   
        //do something
    }
}

然后我尝试写这个OutputStream,如下所示:

public void sendMessage(Object message) {
    global_out.writeObject(message);
}

我只在sendMessage(Object)should_ceck时致电true并测试global_outnull,而不是sendMessage(Object)。但是,global_out永远不会返回。如果null 不是 try-with-resources,则必须将其设置为某个内容,那么为什么在{{1}}终止之前无法使用资源?

有什么方法可以解决这个问题吗?

0 个答案:

没有答案