code: public EthereumBlock readBlock() throws IOException, EthereumBlockReadException {
  		ByteBuffer rawBlock = this.readRawBlock();
  		if (rawBlock==null) {
  			return null;
  		}
  		RLPObject blockObject =  EthereumUtil.rlpDecodeNextItem(rawBlock);
  		if ((blockObject==null) || (!(blockObject instanceof RLPList))){
  			throw new EthereumBlockReadException("Invalid Ethereum Block: Not encoded RLPList");
  		}
  		RLPList block = (RLPList)blockObject;
  		// block header
  		RLPList rlpHeader = (RLPList) block.getRlpList().get(0);
  		// transactions
  		RLPList rlpTransactions = (RLPList) block.getRlpList().get(1);
  		// uncles
  		RLPList rlpUncles =  (RLPList) block.getRlpList().get(2);
  		//// create header object
  		EthereumBlockHeader ethereumBlockHeader = parseRLPBlockHeader(rlpHeader);
  		List<EthereumTransaction> ethereumTransactions = parseRLPTransactions(rlpTransactions);
  		List<EthereumBlockHeader> uncleHeaders = parseRLPUncleHeaders(rlpUncles);	
  		return new EthereumBlock(ethereumBlockHeader,ethereumTransactions,uncleHeaders);
  	}
docs: /*
  
  Read a block into a Java object of the class Ethereum Block. This makes analysis very easy, but might be slower for some type of analytics where you are only interested in small parts of the block. In this case it is recommended to use {@link #readRawBlock}
  Basically, one raw Ethereum Block contains an RLP encoded list, which is parsed into processable Java objects
  
  @return