public synchronized long readFromEnd(final long datalen, final ByteBuffer buf) {
		if (!validState) {
			throw new InvalidStateException();
		}
		final long size = size();
		final long offset = (size - HEADER_LEN - datalen - FOOTER_LEN);
		return read(offset, buf);
	}
public synchronized long readFromEnd ( final long datalen , final ByteBuffer buf ) { if ( ! validState ) { throw new InvalidStateException ( ) ; } final long size = size ( ) ; final long offset = ( size - HEADER_LEN - datalen - FOOTER_LEN ) ; return read ( offset , buf ) ; }
Read desired block of datalen from end of file

@param datalen expected
@param ByteBuffer
@return new offset (offset+headerlen+datalen+footer)