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