有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

Java可序列化哈希映射到ByteArray以创建blob

当我尝试时,我收到以下消息错误:

爪哇。木卫一。NotSerializableException:

  private HashMap<String, XlsData> myMap= new HashMap<String, XlsData>();

        ByteArrayOutputStream bObj = new ByteArrayOutputStream();
            ObjectOutputStream out;
                try {
                out = new ObjectOutputStream(bObj);
                if(myMap != null){
                out.writeObject(myMap);
                out.close();
                bObj.close();
                byte[] byteOut = bObj.toByteArray();
              }
              } catch (IOException e) {
                e.printStackTrace();
            }

    public class XlsData implements Serializable {

            private String dataA;
            private String dataB;

            public String getDataA() {
                return dataA;
            }
            public void setDataA(String dataA) {
                this.dataA= dataA;
            }
            public String getDataB() {
                return dataB;
            }
            public void setDataB(String dataB) {
                this.dataB= dataB;
            }
}

什么是必要的工作良好?可以看到,我的内部类也实现了serializabe类


共 (2) 个答案

  1. # 1 楼答案

    最有可能的情况是,地图中的一个元素不可序列化。或者映射的一个元素包含一个既不可序列化也不临时的成员。只要看看地图,你就会找到答案

  2. # 2 楼答案

    您的XlsData类必须是静态内部类:

    public static class XlsData implements Serializable {
    

    因为它不是静态的,所以其行为类似于非静态字段:它只能作为外部类实例的一部分存在。当序列化非静态内部类的实例时,还序列化了封闭的外部类对象,我猜它是不可序列化的(或者它的一个或多个字段是不可序列化的)