Convert long to byte array and add it to another array Convert long to byte array and add it to another array arrays arrays

Convert long to byte array and add it to another array


There are multiple ways to do it:

  • Use a ByteBuffer (best option - concise and easy to read):

    byte[] bytes = ByteBuffer.allocate(Long.SIZE / Byte.SIZE).putLong(someLong).array();
  • You can also use DataOutputStream (more verbose):

    ByteArrayOutputStream baos = new ByteArrayOutputStream();DataOutputStream dos = new DataOutputStream(baos);dos.writeLong(someLong);dos.close();byte[] longBytes = baos.toByteArray();
  • Finally, you can do this manually (taken from the LongSerializer in Hector's code) (harder to read):

    byte[] b = new byte[8];for (int i = 0; i < size; ++i) {  b[i] = (byte) (l >> (size - i - 1 << 3));}

Then you can append these bytes to your existing array by a simple loop:

// change this, if you want your long to start from // a different position in the arrayint start = 0; for (int i = 0; i < longBytes.length; i ++) {   bytes[start + i] = longBytes[i];}


If you want to really get under the hood...

public byte[] longToByteArray(long value) {    return new byte[] {        (byte) (value >> 56),        (byte) (value >> 48),        (byte) (value >> 40),        (byte) (value >> 32),        (byte) (value >> 24),        (byte) (value >> 16),        (byte) (value >> 8),        (byte) value    };}


For me ByteBuffer and other utils are expensive from time perspective. Here are 2 methods that you can use:

// first method (that is using the second method), it return the array allocated and fulfilled

public byte[] longToByteArray(long value) {        byte[] array = new byte[8];        longToByteArray(value,array,0);        return array;}

// this method is useful if you have already allocated the buffer and you want to write the long a specific location in the array.

public void longToByteArray(long value, byte[] array, int startFrom) {    for (int i=7; i>=0; i--)    {        array[startFrom+7-i] = (byte) (value >> i*8);    }}