Mar*_*aux 4 java io serialization objectoutputstream
有时,我想使用an ObjectOutputStream来写文件或通过网络发送一些小图像.但是BufferedImage许多其他类没有实现java.io.Serializable,然后Stream取消了写入.有没有办法避免这种情况?
谢谢,Martijn
只有支持java.io.Serializable接口的对象才能写入流.
但是,您可以通过使用其中一个类来避免所有这些javax.imageio.特别是ImageIO.write(RenderedImage, String, OutputStream)方法,因为BufferedImage实现RenderedImage.然后你可以用它来回读它ImageIO.read(InputStream),它返回一个BufferedImage.
不过,你可能想要一种不同的OutputSteam类型.除了正常的OutputStreams,还有几个特殊的ImageOutputStreams.
编辑:之前我错过了:要获得中间参数的有效字符串列表,您可以调用 ImageIO.getWriterFormatNames()
小智 5
处理不可序列化对象的一种方法是跳过它们。您可以扩展ObjectOutputStream并实现replaceObject方法来检查对象是否可序列化。
public class MyOOS extends ObjectOutputStream {
public MyOOS(OutputStream out) throws IOException {
super(out);
enableReplaceObject(true);
}
@Override
protected Object replaceObject(Object obj) throws IOException {
if ((obj instanceof Serializable))
return obj;
System.err.println("Skipping serialization of "+obj);
return null;
}
}
Run Code Online (Sandbox Code Playgroud)