提问人:user2852171 提问时间:12/10/2015 最后编辑:insertusernamehereuser2852171 更新时间:12/10/2015 访问量:72
ObjectInputStream 文件结束异常忽略 print 语句
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();
我的输出是:
连接开始 ..
映像 srv 连接到:/192.168.1.104
infrom:\storage\emulated\0\DCIM\Camera\20151209_110536_982.jpg
答:
1赞
Jon Skeet
12/10/2015
#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()
评论
0赞
user2852171
12/10/2015
我的输出似乎识别了温度(输出没有改变),我认为这可能是一个好兆头。如果您不介意的话,我唯一的其他问题与 BufferedImage 有关。我确实有一个 print 语句来显示图像的高度,但我不确定该代码是否正在运行。
0赞
Jon Skeet
12/10/2015
@user2852171:在这一点上,你真的需要开始学习如何使用调试器,这样你就可以单步执行代码。Stack Overflow 不是为“此位不起作用......现在这个位不起作用......现在这个位不起作用“的问题。
评论
ObjectOutputStream
ObjectInputStream
ObjectInputStream inFromServer = new ObjectInputStream(clientimage.getInputStream());
Socket pic_socket = new Socket(ip, 50505); ObjectOutputStream imageToServer = new ObjectOutputStream(pic_socket.getOutputStream()); imageToServer.writeObject(pictureToSend.getAbsoluteFile()); imageToServer.close();
writeObejct()
readByte
readUTF
readByte()