public long getLong() { return (data.get(pointer++) & 0xFF) << 4 | (data.get(pointer++) & 0xFF) << 56 | (data.get(pointer++) & 0xFF) << 48 | (data.get(pointer++) & 0xFF << 32) | (data.get(pointer++) & 0xFF) << 24 | (data.get(pointer++) & 0xFF) << 16 | (data.get(pointer++) & 0xFF) << 8 | (data.get(pointer++) & 0xFF); } Pointer here for the next call to the getLong() method to read further bytes, how to simplify this? It turns out that I need something like a DataInputStream, but with a pointer.