[英]Correct way to send BufferedImage in object with serialization. writeObject readObject
我正在尝试通过套接字发送带有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()会将其抛出。
您的writeObject永远不会写出。 它写入ByteArrayOutputStream,以后不再使用
更新参见例如文章如何序列化图像列表。 您可以跳过计数写作/阅读
这里的问题是您正在阅读尚未编写的内容。 如果您希望读取一个int,则需要编写一个int。 相反,您是将图像转储到流外的字节数组中,这对序列化的影响为零。
您的代码没有意义。
如果写入图像,则将其写入对象流,然后使用ImageIO.
以相同的方式读回ImageIO.
注意:如果您遇到异常,则肯定在某处存在堆栈跟踪。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.