我正在使用naga进行一些异步套接字编程。
但是我需要能够将任意数据附加到Socket对象。
例如我有这样的代码:
service = new NIOService();
// Server is JSONObject
NIOSocket socket = service.openSocket(Server.getString("ip"), Server.getInt("port"));
??? Add mydata to socket
socket.listen(observer); // See class below
System.out.println(socket.mydata);// get new data
public static class Observer extends SocketObserverAdapter {
//Called when Socket makes connection
@Override
public void connectionOpened(NIOSocket socket) {
System.out.println(socket.mydata); // get data
socket.mydata = "yay!";// set data
}
}
我遇到的问题是我需要在Observer.connectionOpened
回调中的套接字对象上获取和设置数据,并且以后能够访问它。
我意识到可能没有办法只是向对象添加数据,但是将数据与对象关联起来的最佳方法是什么,以便我可以传递它并仍然访问(和修改)数据? / p>
我总是可以重新编译类代码以将变量添加到类中,但这似乎非常hackish,我试图远离它。
注意:我对Java编程很新,但不是一般的编程。
答案 0 :(得分:2)
我想到的两种方法是:
将Socket包装在一个包含
信息的类中class MySocketWithData {
private final Socket theSocket;
private String myData;
....
}
或者,维护一个包含您关注信息的Map
。
private final Map<Socket, MyCoolData> socketMap = new ConcurrentHashMap<>();
public void doSomething(Socket sock) {
MyCoolData data = socketMap.get(sock);
}
我可能更喜欢第一个。如果你需要在自己周围交出Socket
个实例并且无法替换自己的类,那么第二个更合适。