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

时间:2015-04-25 08:47:45

标签: java sockets serialization

我试图通过套接字发送带有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()正在抛出它。

2 个答案:

答案 0 :(得分:1)

你的writeObject永远不会写出来。它写入ByteArrayOutputStream,稍后不再使用

UPDATE 参见例如post图像列表是如何序列化的。你可以跳过计数写/读

答案 1 :(得分:0)

这里的问题是你正在阅读尚未编写的内容。如果您希望读取int,则需要一个int。相反,您将图像转储到流出的字节数组中,这对序列化没有任何影响。

您的代码没有意义。

如果您编写图像,将其写入对象流并以相同的方式阅读,ImageIO.

注意:如果你遇到异常,肯定会在某处出现堆栈跟踪。