gpt4 book ai didi

java - readObject() 在特定对象上阻塞

转载 作者:行者123 更新时间:2023-12-01 15:23:18 26 4
gpt4 key购买 nike

我正在编写一个服务器/客户端程序。客户端将“请求”(这是为此目的而设计的对象)发送到服务器,服务器使用 ObjectInputStream 对其进行解码。所有“Request”对象都属于同一类,只是数据字段不同。
一切正常;但在某些特定状态下(也许当 Request 对象稍大一点,但不超过 200 kb 时!),服务器端的 readObject() 毫无异常(exception)地会阻塞。
有什么想法吗?!

服务器代码:

public class ConnectionThread extends Thread {

Socket con;
Request request;

public ConnectionThread(Socket s) {
con = s;
try {
ObjectInputStream in = new ObjectInputStream(con.getInputStream());
// Works till here; the object "in" is initialized.
request = (Request) in.readObject();
// This line is not reached, in particular cases.
} catch (ClassNotFoundException ex) {
Logger.getLogger(ConnectionThread.class.getName()).log(Level.SEVERE, null, ex);
} catch (IOException ex) {
Logger.getLogger(ConnectionThread.class.getName()).log(Level.SEVERE, null, ex);
}
}

...
}

客户端代码:

public static void saveStoreDataForTable(DataTable tb) {
try {
Socket s = new Socket("localhost", portNo);
ObjectOutputStream out = new ObjectOutputStream(s.getOutputStream());
out.writeObject(new Request("saveStoreData",
new Object[]
{tb.getEdited(), tb.getRemoved(), tb.getNewTables(), tb.getAlterations()}));
out.flush();
// These lines work. But I can't get servers respone; again, in some particular cases.
...
}

最佳答案

您应该将该 I/O 从构造函数移至 start() 方法。目前,您正在构造该线程的线程中执行 I/O,这几乎肯定是错误的线程。

关于java - readObject() 在特定对象上阻塞,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10548772/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com