code: public synchronized int read(int blockNumber, int blockOffset, byte[] buffer, int bufferOffset, int length) 
  			throws IOException {
  		long pointer = getBlockOffset(blockNumber) + blockOffset;
  		int readable = blockSize - blockOffset;
  		int readLength = length;
  		if(readable < length) {
  			readLength = readable;
  		}
  		if(mapped == true) {
  			MappedByteBuffer map = NikeFS2FileAccessMonitor.instance().requestMap(this);
  			map.position((int)pointer);
  			map.get(buffer, bufferOffset, readLength);
  			return readLength;
  		} else {
  			rafile.seek(pointer);
  			return rafile.read(buffer, bufferOffset, readLength);
  		}
  	}
docs: Reads from the specified block.
  
  @param blockNumber Internal number of the block in question.
  @param blockOffset Offset, in bytes, within this block.
  @param buffer Buffer to store read data in.
  @param bufferOffset Offset in the given buffer to start writing at.
  @param length Number of bytes to be read.
  @return The number of read bytes.