code: void readObject(java.io.ObjectInputStream in) throws IOException, ClassNotFoundException {
          // when deserializing, parse the json string
          try {
              int length = in.readInt();
              byte[] buf = new byte[length];
              in.readFully(buf);
              if (parser == null) {
                  // create it lazily, static so won't increase object size
                  parser = new JsonParser();
              }
              JsonElement o = parser.parse(new String(buf, StandardCharsets.UTF_8));
              Field f = getClass().getDeclaredField("intMap");
              f.setAccessible(true);
              f.set(this, new SimpleIntKeyMap<>());
  
              for (Entry<String, JsonElement> e : o.asObject().entrySet()) {
                  put(e.getKey(), e.getValue());
              }
          } catch (NoSuchFieldException | SecurityException | IllegalArgumentException | IllegalAccessException e) {
              throw new IllegalStateException(e);
          }
      }
docs: used by java serialization