java - HashMap 不可序列化

标签 java hashmap serializable

具有 Serializable 键/值的

HashMap 应该是 Serializable

但这对我不起作用。尝试了一些其他的 IO 流。没有工作。

有什么建议吗?

测试代码

public class SimpleSerializationTest {
    @Test
    public void testHashMap() throws Exception {
        HashMap<String, String> hmap = new HashMap<String, String>() {{
            put(new String("key"), new String("value"));
        }};

        ByteArrayOutputStream bos = new ByteArrayOutputStream();
        ObjectOutput out = null;
        out = new ObjectOutputStream(bos);
        out.writeObject(hmap);
        byte[] yourBytes = bos.toByteArray();
        if (out != null) {
            out.close();
        }
        bos.close();

        ByteArrayInputStream bis = new ByteArrayInputStream(yourBytes);
        ObjectInput in = null;
        in = new ObjectInputStream(bis);
        Object o = in.readObject();
        bis.close();
        if (in != null) {
            in.close();
        }

        assertEquals(hmap, o);
    }
}

堆栈跟踪

java.io.NotSerializableException: SimpleSerializationTest
    at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1184)
    at java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java:1548)
    at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1509)
    at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1432)
    at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1178)
    at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:348)
    at SimpleSerializationTest.testHashMap(SimpleSerializationTest.java:18)

Process finished with exit code 0

最佳答案

异常消息准确地告诉您问题出在哪里:您正在尝试序列化 SimpleSerializationTest 类的实例,但该类不可序列化。

为什么?好吧,您已经创建了一个 SimpleSerializationTest 的匿名内部类,它扩展了 HashMap,并且您正在尝试序列化该类的一个实例。内部类总是引用其外部类的相关实例,默认情况下,序列化将尝试遍历这些实例。

我观察到您使用双括号 {{ ... }} 语法,就好像您认为它具有某种特殊意义一样。重要的是要了解它实际上是两个独立的结构。在构造函数调用之后立即出现的一对外部大括号标记了内部类定义的边界。内部对绑定(bind)一个实例初始化程序 block ,例如您可以在任何 类主体中使用(尽管它们在匿名内部类以外的上下文中不常见)。通常,您还会在初始化程序 block 之前或之后的外部对内包含一个或多个方法实现/覆盖。

试试这个:

    public void testHashMap() throws Exception {
        Map<String, String> hmap = new HashMap<String, String>();

        hmap.put(new String("key"), "value");

        // ...
    }

关于java - HashMap 不可序列化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32790025/

相关文章:

java - 如何在删除对象之前清除集合

java - HashMap.get() 与继承的 hashCode() 方法一起正常工作,无法识别用户定义的 hashCode() 方法的键

Java NotSerializedException :

java - 将java应用程序移植到android - 是否可以使Serialized工作?

Java 客户端/服务器聊天室将消息作为对象发送

java - 清除 telnet 中的输出

java - 如何在java中连接sql查询?

java - Spring Data JPA 保存方法在 Java 8 功能图中的有效性

Java:可序列化的内部类和匿名类是否应该有 SerialVersionUID?

java - 重写 hashcode() 方法后出现奇怪的结果