public static byte[] getVariableByteSigned(int value) {
        long absValue = Math.abs((long) value);
        if (absValue < 64) { // 2^6
            // encode the number in a single byte
            if (value < 0) {
                return new byte[]{(byte) (absValue | 0x40)};
            }
            return new byte[]{(byte) absValue};
        } else if (absValue < 8192) { // 2^13
            // encode the number in two bytes
            if (value < 0) {
                return new byte[]{(byte) (absValue | 0x80), (byte) ((absValue >> 7) | 0x40)};
            }
            return new byte[]{(byte) (absValue | 0x80), (byte) (absValue >> 7)};
        } else if (absValue < 1048576) { // 2^20
            // encode the number in three bytes
            if (value < 0) {
                return new byte[]{(byte) (absValue | 0x80), (byte) ((absValue >> 7) | 0x80),
                        (byte) ((absValue >> 14) | 0x40)};
            }
            return new byte[]{(byte) (absValue | 0x80), (byte) ((absValue >> 7) | 0x80), (byte) (absValue >> 14)};
        } else if (absValue < 134217728) { // 2^27
            // encode the number in four bytes
            if (value < 0) {
                return new byte[]{(byte) (absValue | 0x80), (byte) ((absValue >> 7) | 0x80),
                        (byte) ((absValue >> 14) | 0x80), (byte) ((absValue >> 21) | 0x40)};
            }
            return new byte[]{(byte) (absValue | 0x80), (byte) ((absValue >> 7) | 0x80),
                    (byte) ((absValue >> 14) | 0x80), (byte) (absValue >> 21)};
        } else {
            // encode the number in five bytes
            if (value < 0) {
                return new byte[]{(byte) (absValue | 0x80), (byte) ((absValue >> 7) | 0x80),
                        (byte) ((absValue >> 14) | 0x80), (byte) ((absValue >> 21) | 0x80),
                        (byte) ((absValue >> 28) | 0x40)};
            }
            return new byte[]{(byte) (absValue | 0x80), (byte) ((absValue >> 7) | 0x80),
                    (byte) ((absValue >> 14) | 0x80), (byte) ((absValue >> 21) | 0x80), (byte) (absValue >> 28)};
        }
    }
public static byte [ ] getVariableByteSigned ( int value ) { long absValue = Math . abs ( ( long ) value ) ; if ( absValue < 64 ) { if ( value < 0 ) { return new byte [ ] { ( byte ) ( absValue | 0x40 ) } ; } return new byte [ ] { ( byte ) absValue } ; } else if ( absValue < 8192 ) { if ( value < 0 ) { return new byte [ ] { ( byte ) ( absValue | 0x80 ) , ( byte ) ( ( absValue > > 7 ) | 0x40 ) } ; } return new byte [ ] { ( byte ) ( absValue | 0x80 ) , ( byte ) ( absValue > > 7 ) } ; } else if ( absValue < 1048576 ) { if ( value < 0 ) { return new byte [ ] { ( byte ) ( absValue | 0x80 ) , ( byte ) ( ( absValue > > 7 ) | 0x80 ) , ( byte ) ( ( absValue > > 14 ) | 0x40 ) } ; } return new byte [ ] { ( byte ) ( absValue | 0x80 ) , ( byte ) ( ( absValue > > 7 ) | 0x80 ) , ( byte ) ( absValue > > 14 ) } ; } else if ( absValue < 134217728 ) { if ( value < 0 ) { return new byte [ ] { ( byte ) ( absValue | 0x80 ) , ( byte ) ( ( absValue > > 7 ) | 0x80 ) , ( byte ) ( ( absValue > > 14 ) | 0x80 ) , ( byte ) ( ( absValue > > 21 ) | 0x40 ) } ; } return new byte [ ] { ( byte ) ( absValue | 0x80 ) , ( byte ) ( ( absValue > > 7 ) | 0x80 ) , ( byte ) ( ( absValue > > 14 ) | 0x80 ) , ( byte ) ( absValue > > 21 ) } ; } else { if ( value < 0 ) { return new byte [ ] { ( byte ) ( absValue | 0x80 ) , ( byte ) ( ( absValue > > 7 ) | 0x80 ) , ( byte ) ( ( absValue > > 14 ) | 0x80 ) , ( byte ) ( ( absValue > > 21 ) | 0x80 ) , ( byte ) ( ( absValue > > 28 ) | 0x40 ) } ; } return new byte [ ] { ( byte ) ( absValue | 0x80 ) , ( byte ) ( ( absValue > > 7 ) | 0x80 ) , ( byte ) ( ( absValue > > 14 ) | 0x80 ) , ( byte ) ( ( absValue > > 21 ) | 0x80 ) , ( byte ) ( absValue > > 28 ) } ; } }
Converts a signed int to a variable length byte array.
<p/>
The first bit is for continuation info, the other six (last byte) or seven (all other bytes) bits for data. The
second bit in the last byte indicates the sign of the number.

@param value the int value.
@return an array with 1-5 bytes.