public byte[] toStream() throws OSerializationException {
    final long timer = OProfiler.getInstance().startChrono();

    try {
      final OMemoryStream outStream = new OMemoryStream();
      outStream.jump(0);
      outStream.set(pageSize);

      outStream.setAsFixed(parentRid.toStream());
      outStream.setAsFixed(leftRid.toStream());
      outStream.setAsFixed(rightRid.toStream());

      outStream.set(color);
      outStream.set(size);

      for (int i = 0; i < size; ++i) serializedKeys[i] = outStream.set(serializeNewKey(i));

      for (int i = 0; i < size; ++i) serializedValues[i] = outStream.set(serializeNewValue(i));

      final byte[] buffer = outStream.toByteArray();

      stream.setSource(buffer);
      record.fromStream(buffer);
      return buffer;

    } catch (IOException e) {
      throw new OSerializationException("Cannot marshall RB+Tree node", e);
    } finally {
      OProfiler.getInstance().stopChrono("OMVRBTreeMapEntry.toStream", timer);
    }
  }