序列化问题:de.ruedigermoeller

时间:2017-08-21 22:31:16

标签: java swing serialization javafx

尝试将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,但无法使其工作。谢谢你的帮助。

0 个答案:

没有答案