code: public long getNextLong(final int pLength) {
  		// allocate Size of Integer
  		ByteBuffer buffer = ByteBuffer.allocate(BYTE_SIZE * 2);
  		// final value
  		long finalValue = 0;
  		// Incremental value
  		long currentValue = 0;
  		// Size to read
  		int readSize = pLength;
  		// length max of the index
  		int max = currentBitIndex + pLength;
  		while (currentBitIndex < max) {
  			int mod = currentBitIndex % BYTE_SIZE;
  			// apply the mask to the selected byte
  			currentValue = byteTab[currentBitIndex / BYTE_SIZE] & getMask(mod, readSize) & DEFAULT_VALUE;
  			// Shift right the read value
  			int dec = Math.max(BYTE_SIZE - (mod + readSize), 0);
  			currentValue = (currentValue & DEFAULT_VALUE) >>> dec & DEFAULT_VALUE;
  			// Shift left the previously read value and add the current value
  			finalValue = finalValue << Math.min(readSize, BYTE_SIZE) | currentValue;
  			// calculate read value size
  			int val = BYTE_SIZE - mod;
  			// Decrease the size left
  			readSize = readSize - val;
  			currentBitIndex = Math.min(currentBitIndex + val, max);
  		}
  		buffer.putLong(finalValue);
  		// reset the current bytebuffer index to 0
  		buffer.rewind();
  		// return integer
  		return buffer.getLong();
  	}
docs: This method is used to get a long with the specified size
  
  Be careful with java long bit sign. This method doesn't handle signed values.<br>
  For that, @see BitUtils.getNextLongSigned()
  
  @param pLength
  the length of the data to read in bit
  @return an long