我正在使用SocketChannel
在服务器和客户端之间发送消息。客户端与服务器连接后,服务器会在try-with-resources尝试中打开InputStreams
和OutputStream
,以便从客户端接收消息并发送消息 客户端,如下:
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_out
是null
,而不是sendMessage(Object)
。但是,global_out
永远不会返回。如果null
不是 try-with-resources
,则必须将其设置为某个内容,那么为什么在{{1}}终止之前无法使用资源?
有什么方法可以解决这个问题吗?