如何将ImageIcon转换为String以存储在JSON中

时间:2017-08-19 14:30:49

标签: java json imageicon

您好,谢谢您的帮助。

我正在研究RPG角色构建器。每个字符都存储为JSON文件,我想包含字符图像。它存储为ImageIcon,但不能存储在JSON中。

如何将ImageIcon转换为String并再次返回?

这是我到目前为止所做的:

public ImageIcon getImageIcon() {
    byte b[];
    ByteArrayInputStream bi;
    ObjectInputStream si;
    ImageIcon image = null;

    try {
        b = this.imageIcon.getBytes(); 
        bi = new ByteArrayInputStream(b);
        si = new ObjectInputStream(bi);
        image = (ImageIcon) si.readObject();
    } catch (IOException | ClassNotFoundException ex) {
        System.out.println(ex);
    }
    return image;
}

public void setImageIcon(ImageIcon imageIconIn) {
    ByteArrayOutputStream bo;
    ObjectOutputStream so;
    try{
        bo = new ByteArrayOutputStream();
        so = new ObjectOutputStream(bo);
        so.writeObject(imageIconIn);
        so.flush();
        this.imageIcon = bo.toString();
    } catch (IOException ex){
        System.out.println(ex);
    }
}

问题是我将String转换回ImageIcon时出现以下错误:

java.io.StreamCorruptedException: invalid stream header: EFBFBDEF

我认为setImageIcon()方法没问题,但我不确定如何修复getImageIcon()方法。

我使用的是Java 1.8和GSON 2.8.0

再次感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

您的图标应存储:

  • 使用Base64编码将您的JSON文件内联为字符串。

  • 在一个单独的文件中,文件名存储为JSON中的String。

    • { "iconFile": "./characters/dwarf.png" }