尝试将https://github.com/RuedigerMoeller/fast-serialization框架作为我的JVM序列化程序的替代品。作为第一步。
这是我的序列化器:
static FSTConfiguration conf = FSTConfiguration.createDefaultConfiguration();
public Serialiser() {
conf.registerClass(MapSerializableForm.class, // etc// ...
}
public byte[] serialise(Object obj) {
byte[] bytes = null;
try {
final ByteArrayOutputStream b = new ByteArrayOutputStream();
final FSTObjectOutput o = new FSTObjectOutput(b);
o.writeObject(obj);
bytes = b.toByteArray();
b.close();
} catch (IOException e) {
e.printStackTrace();
}
return bytes;
}
public Object deserialize(byte[] bytes) {
Object deser = null;
try {
final ByteArrayInputStream b = new ByteArrayInputStream(bytes);
final FSTObjectInput o = new FSTObjectInput(b);
deser = o.readObject();
b.close();
} catch (IOException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
return deser;
}
导致我出现问题的类是这样的:我用Swing图像包装JavaFX图像以帮助我序列化它们。我的代码可以使用标准的Java序列化程序,但速度很慢。如果我能让它发挥作用,我希望有所改进。结果是反序列化期间的nullpointerException。现在已经很晚了,但我已经试着说清楚了。
import javafx.embed.swing.SwingFXUtils;
import javafx.scene.image.Image;
import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.io.*;
public class SerializableImage implements Serializable {
private static final long serialVersionUID = 7984341875952256208L;
public transient Image image ;
public SerializableImage(Image image) {
this.image=image;
}
private void readObject(ObjectInputStream s) throws IOException, ClassNotFoundException {
s.defaultReadObject();
BufferedImage bufferedImage = ImageIO.read(s); //image comes back null !
image = SwingFXUtils.toFXImage(bufferedImage, null);
}
private void writeObject(ObjectOutputStream s) throws IOException {
s.defaultWriteObject();
ImageIO.write(SwingFXUtils.fromFXImage(image, null), "png", s);
}
public double getWidth() {
return image.getWidth();
}
在readObject方法中,(在流" s"中)我能够看到一个带有一个对象的wrappedStack的传入FSTObjectInput:希望包含#34中的SerializableImage ;探路者"领域。但是,我不确定如何将其输出到我的BufferedImage中:
BufferedImage bufferedImage = ImageIO.read(s);
因此,目前,图像返回null。我尝试添加FSTInput,但无法使其工作。谢谢你的帮助。