code: public static Number decode_long(byte[] data) {
  		if (data.length == 0)
  			return 0L;
  		// first reverse the byte array because pickle stores it little-endian
  		byte[] data2 = new byte[data.length];
  		for (int i = 0; i < data.length; ++i)
  			data2[data.length - i - 1] = data[i];
  		BigInteger bigint = new BigInteger(data2);
  		return optimizeBigint(bigint);
  	}
docs: read an arbitrary 'long' number. Returns an int/long/BigInteger as appropriate to hold the number.