HashMap 不可序列化

2024-03-08

HashMap with Serializable键/值应该是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,并且您正在尝试序列化该类的实例。内部类始终引用其外部类的相关实例,并且默认情况下,序列化将尝试遍历这些实例。

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

试试这个:

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

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

        // ...
    }
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

HashMap 不可序列化 的相关文章

随机推荐