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

时间:2015-12-09 16:12:51

标签: java sockets eof

我正在通过Java套接字将文件从Google Glass设备读取到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();

我的输出是:

  

连接开始..
  图像srv连接到:/192.168.1.104
  infrom:\ storage \ emulated \ 0 \ DCIM \ Camera \ 20151209_110536_982.jpg

1 个答案:

答案 0 :(得分:1)

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

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()一次,这是至关重要的,因为只编写了一个对象。