繁体   English   中英

通过序列化在对象中发送BufferedImage的正确方法。 writeObject readObject

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM