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

Java可序列化哈希映射到ByteArray以创建blob,java,Java,当我尝试时,我收到以下消息错误: java.io.NotSerializableException: private HashMap<String, XlsData> myMap= new HashMap<String, XlsData>(); ByteArrayOutputStream bObj = new ByteArrayOutputStream(); ObjectOutputStream out;

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

java.io.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;
            }
}
private HashMap myMap=new HashMap();
ByteArrayOutputStream bObj=新的ByteArrayOutputStream();
对象输出流输出;
试一试{
out=新对象输出流(bObj);
if(myMap!=null){
out.writeObject(myMap);
out.close();
bObj.close();
byte[]byteOut=bObj.toByteArray();
}
}捕获(IOE异常){
e、 printStackTrace();
}
公共类XlsData实现了可序列化{
私有字符串dataA;
私有字符串数据库;
公共字符串getDataA(){
返回数据a;
}
公共void setDataA(字符串dataA){
this.dataA=dataA;
}
公共字符串getDataB(){
返回数据;
}
公共void setDataB(字符串dataB){
this.dataB=dataB;
}
}

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

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

你的
XlsData
类需要是一个静态的内部类:

public static class XlsData implements Serializable {

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

显示其余的异常。它很可能会准确地告诉您地图中的哪个对象不可序列化。显示
myMap
defination什么代码?原来的问题没有显示外部类。您是否使用不可序列化的外部类运行它?我在不可序列化的外部类中运行了该代码,并获得了NotSerializableException。你确定你把XlsData变成了一个内部类吗?如果添加
System.out.println(XlsData.class)对于您的代码,您看到了什么?您正在序列化一个空映射。在映射中至少放置一个条目,然后查看它是否仍然成功序列化。我的外部类没有定义可序列化的实现。更改为Serializable后,现在可以工作了。谢谢