我想要将一个对象保存到文件,而这个对象里面又含有Image类的对象,
用ObjectOutputStream的时候提示要Serializable接口才可以,于是我把
我自己的那个类给加上接口,然后运行又报错,提示Image类没序列化
接口,这下我就不知道怎么办了,Image类是系统的抽象类,怎么序列化啊?
系统的类可以修改的吗?请问要如何做?
用ObjectOutputStream的时候提示要Serializable接口才可以,于是我把
我自己的那个类给加上接口,然后运行又报错,提示Image类没序列化
接口,这下我就不知道怎么办了,Image类是系统的抽象类,怎么序列化啊?
系统的类可以修改的吗?请问要如何做?
不过我发现一个严重的问题,ImageIcon读取50Kb的图片保存对象后,变为3倍大小。
请问要如何实现压缩?
//反序例化时的操作
private void readObject(ObjectInputStream in) throws IOException,ClassNotFoundException {
in.defaultReadObject();
int imageLen = in.readInt();//读取图片长度
ByteArrayOutputStream buff = new ByteArrayOutputStream();//buff
int readLen = 0;
byte[] readBuff = new byte[1024];
while((len = in.read(readBuff) != -1) {
buff.write(readBuff,0,readLen);
}
ByteArrayInputStream imageReadBuff = new ByteArrayInputStream(buff.toByteArray());
image = ImageIO.read(imageReadBuff);
}
//序列化
private void writeObject(ObjectOutputStream out) throws IOException {
out.defaultWriteObject(); ByteArrayOutputStream buff = new ByteArrayOutputStream();
//这里选用了JPG格式,其他格式也可以重点是将图片转换成某种格式的字节码
//一般可以用"PNG","GIF","JPG"吧.
ImageIO.write(image,"JPG",buff);
byte[] images = buff.toByteArray();
out.writeInt(image.length);
out.write(images);
}
}