code: static DeserializedEntry readEntryComponents(InputStream input, long segmentOffset, EntrySerializer serializer) throws IOException {
          val h = serializer.readHeader(input);
          long version = getKeyVersion(h, segmentOffset);
          byte[] key = StreamHelpers.readAll(input, h.getKeyLength());
          byte[] value = h.isDeletion() ? null : (h.getValueLength() == 0 ? new byte[0] : StreamHelpers.readAll(input, h.getValueLength()));
          return new DeserializedEntry(h, version, key, value);
      }
docs: Reads a single {@link TableEntry} from the given InputStream. The {@link TableEntry} itself is not constructed,
  rather all of its components are returned individually.
  
  @param input         An InputStream to read from.
  @param segmentOffset The Segment Offset that the first byte of the InputStream maps to. This wll be used as a Version,
  unless the deserialized segment's Header contains an explicit version.
  @param serializer    The {@link EntrySerializer} to use for deserializing entries.
  @return A {@link DeserializedEntry} that contains all the components of the {@link TableEntry}.
  @throws IOException If an Exception occurred while reading from the given InputStream.