docs: @Override
      public void readExternal(ObjectInput input) throws IOException, ClassNotFoundException {
  
          // recreate the local header storage
          int len = input.readInt();
          if (SERIALIZATION_V2 == len) {
              if (TraceComponent.isAnyTracingEnabled() && tc.isDebugEnabled()) {
                  Tr.debug(tc, "Deserializing a V2 object");
              }
              this.deserializationVersion = SERIALIZATION_V2;
              len = input.readInt();
          }
          this.storage = new HashMap<Integer, HeaderElement>();
  
          // now read all of the headers
          int number = input.readInt();
          if (SERIALIZATION_V2 == this.deserializationVersion) {
              // this is the new format
              for (int i = 0; i < number; i++) {
                  appendHeader(readByteArray(input), readByteArray(input));
              }
          } else {
              // this is the old format
              for (int i = 0; i < number; i++) {
                  appendHeader((String) input.readObject(), (String) input.readObject());
              }
          }
      }