ObjectInputStream 文件结束异常忽略打印语句

ObjectInputStream End of file exception ignores print statements

我正在通过 java 套接字将文件从 Google 玻璃设备读取到 PC。 由于 catch 语句抛出 eof 异常,我的其余代码被忽略了。我该如何解决这个问题?

代码:接收图像(并将其放入简单的 jfame 中)

ObjectInputStream inFromServer = new ObjectInputStream(
clientimage.getInputStream());

System.out.println("infrom: "  + inFromServer.readObject() + "\n");

System.out.println("infrom bytes: " + inFromServer.readByte() + "\n");
System.out.println("infrom something: " + inFromServer.readUTF());


File temp = (File) inFromServer.readObject();
BufferedImage image = ImageIO.read(temp);
System.out.println("image height: " + image.getHeight());


JFrame frame = new JFrame();
JLabel label = new JLabel(new ImageIcon(image));
JFrame f = new JFrame();
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.getContentPane().add(label);
f.pack();
f.setLocation(200,200);
f.setVisible(true);

客户端正在拍照并将文件发送到PC:

Socket pic_socket = new Socket(ip, 50505);
ObjectOutputStream imageToServer = new ObjectOutputStream(pic_socket.getOutputStream());
imageToServer.writeObject(pictureToSend.getAbsoluteFile());
imageToServer.close();

我的输出是:

Connection starting ..
image srv connected to: /192.168.1.104
infrom: \storage\emulated[=12=]\DCIM\Camera151209_110536_982.jpg

您显示的输出表明此行有效:

System.out.println("infrom: "  + inFromServer.readObject() + "\n");

这行抛出异常:

System.out.println("infrom bytes: " + inFromServer.readByte() + "\n");

这是有道理的,因为您只写了一个对象,然后关闭了流。您的代码 应该 是:

File temp;
try (ObjectInputStream inFromServer =
        new ObjectInputStream(clientimage.getInputStream()) {
    temp = (File) inFromService.readObject();
}
System.out.println("infrom: "  + temp + "\n");

... 然后摆脱对 readByte()readUTF() 的调用。它们对应于尚未写入的数据。请注意,使用上面的代码,您也只调用了一次 readObject(),这很重要,因为只写入了一个对象。