我刚刚失去了几个小时调试我的应用程序,我相信我偶然发现了一个(另一个o_O)Java bug ...嗅...我希望它不是,因为这会很难过:(
我正在做以下事情:
mask使用一些标志创建EnumSetObjectOutputStream.writeObject(mask))mask预期结果:第二个序列化对象与第一个序列化对象不同(反映实例中的更改)
获得的结果:第二个序列化对象是第一个的精确副本
代码:
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)
它打印:
Run Code Online (Sandbox Code Playgroud)First serialization: …
我已将 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)