Java readObject()在特定对象上阻塞

Java readObject()在特定对象上阻塞,java,serialization,Java,Serialization,我正在写一个服务器/客户端程序。客户端向服务器发送“请求”(即为此目的而设计的对象),服务器使用ObjectInputStream对其进行解码。所有“请求”对象都属于同一类,只是数据字段不同 一切正常;但是在某些特定的状态下(可能是当请求对象稍微大一点,但不超过200 kb!),服务器端的readObject()会毫无例外地阻塞 有什么想法吗 服务器代码: public class ConnectionThread extends Thread { Socket con; Re

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

服务器代码:

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,这几乎肯定是错误的线程。

我认为您需要一个带异常的捕获,以捕获您没有想到的任何其他异常。我可以看到in.readObject()可能不会返回“Request”类型的对象“
readObject()
不会“阻止特定对象”。当没有数据要接收时,它会阻塞。