小编Den*_*nis的帖子

EnumSet序列化

我刚刚失去了几个小时调试我的应用程序,我相信我偶然发现了一个(另一个o_O)Java bug ...嗅...我希望它不是,因为这会很难过:(

我正在做以下事情:

  1. mask使用一些标志创建EnumSet
  2. 序列化(带ObjectOutputStream.writeObject(mask))
  3. 清除并设置其中的一些其他标志 mask
  4. 再次序列化

预期结果:第二个序列化对象与第一个序列化对象不同(反映实例中的更改)

获得的结果:第二个序列化对象是第一个的精确副本

代码:

enum MyEnum {
    ONE, TWO
}

@Test
public void testEnumSetSerialize() throws Exception {           
    ByteArrayOutputStream bos = new ByteArrayOutputStream();
    ObjectOutputStream stream = new ObjectOutputStream(bos);

    EnumSet<MyEnum> mask = EnumSet.noneOf(MyEnum.class);
    mask.add(MyEnum.ONE);
    mask.add(MyEnum.TWO);
    System.out.println("First serialization: " + mask);
    stream.writeObject(mask);

    mask.clear();
    System.out.println("Second serialization: " + mask);
    stream.writeObject(mask);
    stream.close();

    ObjectInputStream istream = new ObjectInputStream(new ByteArrayInputStream(bos.toByteArray()));

    System.out.println("First deserialized " + istream.readObject());
    System.out.println("Second deserialized " + istream.readObject());
}
Run Code Online (Sandbox Code Playgroud)

它打印:

First serialization: …
Run Code Online (Sandbox Code Playgroud)

java serialization enumset

9
推荐指数
1
解决办法
1075
查看次数

MongoDB Compass“拓扑类型:未知不可写”

我已将 MongoDB 数据库配置为单节点副本集。我可以通过 api 访问它(向它写入数据),也可以从 shell 访问它:

rs0:PRIMARY> rs.status()
{
    "set" : "rs0",
    "date" : ISODate("2017-12-18T14:37:13.487Z"),
    "myState" : 1,
    "term" : NumberLong(1),
    "heartbeatIntervalMillis" : NumberLong(2000),
    "optimes" : {
            "lastCommittedOpTime" : {
                    "ts" : Timestamp(1513607826, 1),
                    "t" : NumberLong(1)
            },
            "readConcernMajorityOpTime" : {
                    "ts" : Timestamp(1513607826, 1),
                    "t" : NumberLong(1)
            },
            "appliedOpTime" : {
                    "ts" : Timestamp(1513607826, 1),
                    "t" : NumberLong(1)
            },
            "durableOpTime" : {
                    "ts" : Timestamp(1513607826, 1),
                    "t" : NumberLong(1)
            }
    },
    "members" : [
            {
                    "_id" : 0, …
Run Code Online (Sandbox Code Playgroud)

mongodb mongodb-compass

3
推荐指数
1
解决办法
2174
查看次数

标签 统计

enumset ×1

java ×1

mongodb ×1

mongodb-compass ×1

serialization ×1