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