/** * byte[] => long */ public static long toLong(byte[] bytes, int offset, final int length) { if (length != SIZEOF_LONG || offset + length > bytes.length) { throw explainWrongLengthOrOffset(bytes, offset, length, SIZEOF_LONG); } long l = 0; if (CarbonUnsafe.getUnsafe() != null) { if (CarbonUnsafe.ISLITTLEENDIAN) { l = Long.reverseBytes( CarbonUnsafe.getUnsafe().getLong(bytes, offset + CarbonUnsafe.BYTE_ARRAY_OFFSET)); } else { l = CarbonUnsafe.getUnsafe().getLong(bytes, offset + CarbonUnsafe.BYTE_ARRAY_OFFSET); } } else { for (int i = offset; i < offset + length; i++) { l <<= 8; l ^= bytes[i] & 0xFF; } } return l; }
/** * byte[] => int * * @param bytes * @param offset * @param length * @return */ public static int toInt(byte[] bytes, int offset, final int length) { if (length != SIZEOF_INT || offset + length > bytes.length) { throw explainWrongLengthOrOffset(bytes, offset, length, SIZEOF_INT); } int n = 0; if (CarbonUnsafe.getUnsafe() != null) { if (CarbonUnsafe.ISLITTLEENDIAN) { n = Integer.reverseBytes( CarbonUnsafe.getUnsafe().getInt(bytes, offset + CarbonUnsafe.BYTE_ARRAY_OFFSET)); } else { n = CarbonUnsafe.getUnsafe().getInt(bytes, offset + CarbonUnsafe.BYTE_ARRAY_OFFSET); } } else { for (int i = offset; i < (offset + length); i++) { n <<= 8; n ^= bytes[i] & 0xFF; } } return n; }
/** * byte[] => short * * @param bytes * @param offset * @param length * @return */ public static short toShort(byte[] bytes, int offset, final int length) { if (length != SIZEOF_SHORT || offset + length > bytes.length) { throw explainWrongLengthOrOffset(bytes, offset, length, SIZEOF_SHORT); } short n = 0; if (CarbonUnsafe.getUnsafe() != null) { if (CarbonUnsafe.ISLITTLEENDIAN) { n = Short.reverseBytes( CarbonUnsafe.getUnsafe().getShort(bytes, offset + CarbonUnsafe.BYTE_ARRAY_OFFSET)); } else { n = CarbonUnsafe.getUnsafe().getShort(bytes, offset + CarbonUnsafe.BYTE_ARRAY_OFFSET); } } else { n ^= bytes[offset] & 0xFF; n <<= 8; n ^= bytes[offset + 1] & 0xFF; } return n; }