code: protected synchronized XEvent read() throws IOException {
  		// reset file pointer position
  		storage.seek(position);
  		// compute next position from forward offset
  		long nextPosition = position + storage.readInt();
  		// skip backward offset (4 bytes)
  		storage.skipBytes(4);
  		// read payload size
  		int eventSize = storage.readInt();
  		// buffered implementation: reads the byte array representing the
  		// event and interprets it from that buffer subsequently.
  		byte[] eventData = new byte[eventSize];
  		storage.readFully(eventData);
  		DataInputStream dis = new DataInputStream(new ByteArrayInputStream(
  				eventData));
  		// read event data attributes in specified order from file
  		XID id = XID.read(dis);
  		// read event attribute set
  		XAttributeMap attributes = this.attributeMapSerializer.deserialize(dis);
  		// assemble event
  		XEvent event = factory.createEvent(id, attributes);
  		// adjust position of data access layer
  		position = nextPosition;
  		index++;
  		return event;
  	}
docs: Reads an event from the current position of the data access layer.
  Calling this method implies the advancement of the data access layer, so
  that the next call will yield the subsequent event.