public ModuleDescriptorCacheEntry read(Decoder decoder) throws Exception {
byte type = decoder.readByte();
boolean isChanging = decoder.readBoolean();
String packaging = decoder.readNullableString();
long createTimestamp = decoder.readLong();
ModuleSource moduleSource = moduleSourceSerializer.read(decoder);
byte[] encodedHash = decoder.readBinary();
BigInteger hash = new BigInteger(encodedHash);
return new ModuleDescriptorCacheEntry(type, isChanging, packaging, createTimestamp, hash, moduleSource);
}