这篇文章主要为大家详细介绍了java处理字节的常用工具类,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
处理字节的常用工具类方法,供大家参考,具体内容如下
package com.demo.utils; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; import java.nio.charset.Charset; import java.util.Arrays; /** * 处理字节的常用工具类方法 * @author dongyangyang * @Date 2017/3/13 12:31 * @Version 1.0 * */ public class ByteUtils { /** * 构造新字节时需要与的值表 */ private static final byte[] BUILD_BYTE_TABLE = new byte[] { (byte) 128, (byte) 64, (byte) 32, (byte) 16, (byte) 8,<em style="color:transparent">来源[email protected]搞@^&代*@码网</em> (byte) 4, (byte) 2, (byte) 1 }; private ByteUtils() {} /** * short转换到字节数组 * * @param number * 需要转换的数据。 * @return 转换后的字节数组。 */ public static byte[] shortToByte(short number) { byte[] b = new byte[2]; for (int i = 1; i >= 0; i--) { b[i] = (byte) (number % 256); number >>= 8; } return b; } /** * 字节到short转换 * * @param b * short的字节数组 * @return short数值。 */ public static short byteToShort(byte[] b) { return (short) ((((b[0] & 0xff) <= 0; i--) { b[i] = (byte) (number % 256); number >>= 8; } return b; } /** * 字节数组到整型转换 * * @param b * 整形数据的字节数组。 * @return 字节数组转换成的整形数据。 */ public static int byteToInt(byte[] b) { return ((((b[0] & 0xff) << 24) | ((b[1] & 0xff) << 16) | ((b[2] & 0xff) <= 0; i--) { b[i] = (byte) (number % 256); number >>= 8; } return b; } /** * 字节数组到整型的转换 * * @param b * 长整形字节数组。 * @return 长整形数据。 */ public static long byteToLong(byte[] b) { return ((((long) b[0] & 0xff) << 56) | (((long) b[1] & 0xff) << 48) | (((long) b[2] & 0xff) << 40) | (((long) b[3] & 0xff) << 32) | (((long) b[4] & 0xff) << 24) | (((long) b[5] & 0xff) << 16) | (((long) b[6] & 0xff) << 8) | ((long) b[7] & 0xff)); } /** * double转换到字节数组 * * @param d * 双精度浮点。 * @return 双精度浮点的字节数组。 */ public static byte[] doubleToByte(double d) { byte[] bytes = new byte[8]; long l = Double.doubleToLongBits(d); for (int i = 0; i > 8; } return bytes; } /** * 字节数组到double转换 * * @param b * 双精度浮点字节数组。 * @return 双精度浮点数据。 */ public static double byteToDouble(byte[] b) { long l; l = b[0]; l &= 0xff; l |= ((long) b[1] << 8); l &= 0xffff; l |= ((long) b[2] << 16); l &= 0xffffff; l |= ((long) b[3] << 24); l &= 0xffffffffl; l |= ((long) b[4] << 32); l &= 0xffffffffffl; l |= ((long) b[5] << 40); l &= 0xffffffffffffl; l |= ((long) b[6] << 48); l &= 0xffffffffffffffl; l |= ((long) b[7] << 56); return Double.longBitsToDouble(l); } /** * float转换到字节数组 * * @param d * 浮点型数据。 * @return 浮点型数据转换后的字节数组。 */ public static byte[] floatToByte(float d) { byte[] bytes = new byte[4]; int l = Float.floatToIntBits(d); for (int i = 0; i > 8; } return bytes; } /** * 字节数组到float的转换 * * @param b * 浮点型数据字节数组。 * @return 浮点型数据。 */ public static float byteToFloat(byte[] b) { int l; l = b[0]; l &= 0xff; l |= ((long) b[1] << 8); l &= 0xffff; l |= ((long) b[2] << 16); l &= 0xffffff; l |= ((long) b[3] <>> i) & 1) == 1; } return buff; } /** * 返回指定字节中指定bit位,true为1,false为0. 指定的位从0-7,超出将抛出数据越界异常. * * @param b * 需要判断的字节. * @param index * 字节中指定位. * @return 指定位的值. */ public static boolean byteBitValue(byte b, int index) { return byteToBitArray(b)[index]; } /** * 根据布尔数组表示的二进制构造一个新的字节. * * @param values * 布尔数组,其中true表示为1,false表示为0. * @return 构造的新字节. */ public static byte buildNewByte(boolean[] values) { byte b = 0; for (int i = 0; i <8; i++) { if (values[i]) { b |= BUILD_BYTE_TABLE[i]; } } return b; } /** * 将指定字节中的某个bit位替换成指定的值,true代表1,false代表0. * * @param b * 需要被替换的字节. * @param index * 位的序号,从0开始.超过7将抛出越界异常. * @param newValue * 新的值. * @return 替换好某个位值的新字节. */ public static byte changeByteBitValue(byte b, int index, boolean newValue) { boolean[] bitValues = byteToBitArray(b); bitValues[index] = newValue; return buildNewByte(bitValues); } /** * 将指定的IP地址转换成字节表示方式. IP数组的每一个数字都不能大于255,否则将抛出IllegalArgumentException异常. * * @param ipNums * IP地址数组. * @return IP地址字节表示方式. */ public static byte[] ipAddressBytes(String address) { if (address == null || address.length() 15) { throw new IllegalArgumentException("Invalid IP address."); } final int ipSize = 4;// 最大IP位数 final char ipSpace = '.';// IP数字的分隔符 int[] ipNums = new int[ipSize]; StringBuilder number = new StringBuilder();// 当前操作的数字 StringBuilder buff = new StringBuilder(address); int point = 0;// 当前操作的数字下标,最大到3. char currentChar; for (int i = 0; i 0) { throw new IllegalArgumentException("Invalid IP address."); } ipNums[point++] = Integer.parseInt(number.toString()); number.delete(0, number.length()); } else { number.append(currentChar); } } ipNums[point] = Integer.parseInt(number.toString()); byte[] ipBuff = new byte[ipSize]; int pointNum = 0; for (int i = 0; i 255) { throw new IllegalArgumentException("Invalid IP address."); } ipBuff[i] = (byte) (pointNum & 0xff); } return ipBuff; } }
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持gaodaima搞代码网。
以上就是java处理字节的常用工具类的详细内容,更多请关注gaodaima搞代码网其它相关文章!