sendRedirect()和ObjectOutputStream之间的java.io.EOFException

时间:2013-08-07 20:56:01

标签: java

问题是,当我尝试java.io.EOFException时,它会在服务器端启动ois = new ObjectInputStream(request.getInputStream());

private void writeObjectStream(HttpServletRequest request,
        HttpServletResponse response) {
    ObjectOutputStream oos = null;
    try {
        oos = new ObjectOutputStream(response.getOutputStream());
        oos.writeChars("x");
    } catch (IOException e) {
        e.printStackTrace();
    } finally {
        IOUtil.closeQuietly(oos, ois);
    }
}

writeObjectStream的调用:

....    
    response.setStatus(HttpServletResponse.SC_MOVED_TEMPORARILY);
                response.setHeader("Location", "www.sample.com");
                response.setHeader("Content-Length", "" + 500);
                writeObjectStream(request, response);
                return true;

2 个答案:

答案 0 :(得分:3)

对象流具有特定格式,如果您正在阅读不符合格式的内容,则可以轻松地将其混淆。使用此类型的流写入/读取的每种类型的数据都有一个标记,如果标记与预期的不匹配,则抛出的异常是EOFException。这在我看来是令人困惑的,因为它可以在不同的上下文中抛出StreamCorruptedException,这将更合适。

简而言之,您正在尝试读取不是ObjectInputStream的内容,或者您​​正在阅读的数据不是正确的类型,或者它已损坏。

答案 1 :(得分:0)

只需调用writeChars(),就不需要ObjectOutputStream。在另一端使用DataOutputStream和DataInputStream。