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()
,这很重要,因为只写入了一个对象。
我正在通过 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()
,这很重要,因为只写入了一个对象。