gpt4 book ai didi

java - StreamCorruptedException,当使用 ObjectInputStream 时

转载 作者:可可西里 更新时间:2023-11-01 16:57:59 25 4
gpt4 key购买 nike

我需要通过序列化将对象从客户端发送到服务器。
这是我的代码:

     HttpURLConnection con = null;
ObjectOutputStream out = null;
ObjectInputStream inputStream = null;

URL servlet = new URL("MY_URL");
con = (HttpURLConnection) servlet.openConnection();
con.setDoInput(true);
con.setDoOutput(true);
con.setUseCaches(false);
con.setDefaultUseCaches(false);
con.setRequestProperty("Content-type", "application/octet-stream");
con.setRequestMethod("POST");
out = new ObjectOutputStream(con.getOutputStream());
out.writeObject(myobject);
out.flush();
out.close();

inputStream = new ObjectInputStream(con.getInputStream());
inputStream.close();
}
catch (Exception e)
{
e.printStackTrace();
}

finally
{
// inputStream.close();
con.disconnect();
}
return true;

现在,我可以访问 Servlet,并且可以通过那里检索对象。
唯一的问题是,一旦我到达这一行:

inputStream = new ObjectInputStream(con.getInputStream());

我在客户端收到异常 StreamCorruptedException。 (在服务器端一切正常!)如果我取消这条线,servlet 不会被触发(我的意思是 doGet()doPost() 不会在 servlet 中被调用)

我做错了什么?

这是确切的错误:

06-02 12:41:53.549: WARN/System.err(4260): java.io.StreamCorruptedException
06-02 12:41:53.549: WARN/System.err(4260): java.io.ObjectInputStream.readStreamHeader(ObjectInputStream.java:2399)
06-02 12:41:53.549: WARN/System.err(4260): at java.io.ObjectInputStream.<init>(ObjectInputStream.java:447)

谢谢,

最佳答案

客户端期望 servlet 将对象写回响应,例如:

ObjectOutputStream oos = new ObjectOutputStream(response.getOutputStream());
oos.writeObject(someObject);

但是 servlet 显然实际上并没有写回任何对象。所以客户端不应该用 ObjectInputStream 装饰它。只需这样做:

InputStream inputStream;
// ...
inputStream = connection.getInputStream();

或者只是

connection.connect();

如果您对响应不感兴趣的话。连接仅按需执行。 getInputStream() 将隐式执行此操作。这就是为什么在调用 getInputStream() 之前不会触发请求的原因。另见 this answer获取更多提示。

关于java - StreamCorruptedException,当使用 ObjectInputStream 时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2958385/

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