我试图通过套接字发送带有BufferedImage的对象。我现在意识到我必须使它成为瞬态,类实现可序列化,并覆盖writeObject和readObject方法。我认为我的写作是正确的,但我的阅读我一直在给我一个EOFException。这是我的班级:
private void writeObject(ObjectOutputStream out)throws IOException{
out.defaultWriteObject();
//write buff with imageIO to out
ByteArrayOutputStream baos = new ByteArrayOutputStream();
ImageIO.write(image, "jpg", baos);
}
private void readObject(ObjectInputStream in) throws IOException, ClassNotFoundException{
in.defaultReadObject();
//read buff with imageIO from in
DataInputStream dis = new DataInputStream(in);
int len = dis.readInt();
byte[] data = new byte[len];
dis.readFully(data);
dis.close();
in.close();
InputStream ian = new ByteArrayInputStream(data);
image= ImageIO.read(ian);
}
我认为readObject中的readInt()正在抛出它。
答案 0 :(得分:1)
你的writeObject永远不会写出来。它写入ByteArrayOutputStream,稍后不再使用
UPDATE 参见例如post图像列表是如何序列化的。你可以跳过计数写/读
答案 1 :(得分:0)
这里的问题是你正在阅读尚未编写的内容。如果您希望读取int,则需要写一个int。相反,您将图像转储到流出的字节数组中,这对序列化没有任何影响。
您的代码没有意义。
如果您编写图像,将其写入对象流并以相同的方式阅读,ImageIO.
注意:如果你遇到异常,肯定会在某处出现堆栈跟踪。