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;
	}
protected synchronized XEvent read ( ) throws IOException { storage . seek ( position ) ; long nextPosition = position + storage . readInt ( ) ; storage . skipBytes ( 4 ) ; int eventSize = storage . readInt ( ) ; byte [ ] eventData = new byte [ eventSize ] ; storage . readFully ( eventData ) ; DataInputStream dis = new DataInputStream ( new ByteArrayInputStream ( eventData ) ) ; XID id = XID . read ( dis ) ; XAttributeMap attributes = this . attributeMapSerializer . deserialize ( dis ) ; XEvent event = factory . createEvent ( id , attributes ) ; position = nextPosition ; index ++ ; return event ; }
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.