在socket开发过程中,通常需要将一些具体的值(这些值可能是各种JAVA类型)转化为byte[]类型,为此我总结了如下这个示例,贴出来,以便经常翻看
- public
class TestCase { -
-
-
public static byte[] shortToByte(short number) { -
int temp = number; -
byte[] b = new byte[2]; -
for (int i = 0; i < b.length; i++) { -
b[i] = new Integer(temp & 0xff).byteValue();// 将最低位保存在最低位 -
temp = temp >> 8;// 向右移8位 -
} -
return b; -
} -
-
-
public static short byteToShort(byte[] b) { -
short s = 0; -
short s0 = (short) (b[0] & 0xff);// 最低位 -
short s1 = (short) (b[1] & 0xff); -
s1 <<= 8; -
s = (short) (s0 | s1); -
return s; -
} -
-
-
-
public static byte[] intToByte(int number) { -
int temp = number; -
byte[] b = new byte[4]; -
for (int i = 0; i < b.length; i++) { -
b[i] = new Integer(temp & 0xff).byteValue();// 将最低位保存在最低位 -
temp = temp >> 8;// 向右移8位 -
} -
return b; -
} -
-
-
public static int byteToInt(byte[] b) { -
int s = 0; -
int s0 = b[0] & 0xff;// 最低位 -
int s1 = b[1] & 0xff; -
int s2 = b[2] & 0xff; -
int s3 = b[3] & 0xff; -
s3 <<= 24; -
s2 <<= 16; -
s1 <<= 8; -
s = s0 | s1 | s2 | s3; -
return s; -
} -
-
-
-
public static byte[] longToByte(long number) { -
long temp = number; -
byte[] b = new byte[8]; -
for (int i = 0; i < b.length; i++) { -
b[i] = new Long(temp & 0xff).byteValue();// 将最低位保存在最低位 temp = temp -
// >> 8;// 向右移8位 -
} -
return b; -
} -
-
-
public static long byteToLong(byte[] b) { -
long s = 0; -
long s0 = b[0] & 0xff;// 最低位 -
long s1 = b[1] & 0xff; -
long s2 = b[2] & 0xff; -
long s3 = b[3] & 0xff; -
long s4 = b[4] & 0xff;// 最低位 -
long s5 = b[5] & 0xff; -
long s6 = b[6] & 0xff; -
long s7 = b[7] & 0xff; -
-
// s0不变 -
s1 <<= 8; -
s2 <<= 16; -
s3 <<= 24; -
s4 <<= 8 * 4; -
s5 <<= 8 * 5; -
s6 <<= 8 * 6; -
s7 <<= 8 * 7; -
s = s0 | s1 | s2 | s3 | s4 | s5 | s6 | s7; -
return s; -
} -
-
-
public static byte[] doubleToByte(double num) { -
byte[] b = new byte[8]; -
long l = Double.doubleToLongBits(num); -
for (int i = 0; i < 8; i++) { -
b[i] = new Long(l).byteValue(); -
l = l >> 8; -
} -
return b; -
} -
-
-
public static double getDouble(byte[] b) { -
long m; -
m = b[0]; -
m &= 0xff; -
m |= ((long) b[1] << 8); -
m &= 0xffff; -
m |= ((long) b[2] << 16); -
m &= 0xffffff; -
m |= ((long) b[3] << 24); -
m &= 0xffffffffl; -
m |= ((long) b[4] << 32); -
m &= 0xffffffffffl; -
m |= ((long) b[5] << 40); -
m &= 0xffffffffffffl; -
m |= ((long) b[6] << 48); -
m &= 0xffffffffffffffl; -
m |= ((long) b[7] << 56); -
return Double.longBitsToDouble(m); -
} -
-
-
-
public static void floatToByte(float x) { -
//先用 Float.floatToIntBits(f)转换成int -
} -
-
-
public static float getFloat(byte[] b) { -
// 4 bytes -
int accum = 0; -
for ( int shiftBy = 0; shiftBy < 4; shiftBy++ ) { -
accum |= (b[shiftBy] & 0xff) << shiftBy * 8; -
} -
return Float.intBitsToFloat(accum); -
} -
-
-
public static byte[] charToByte(char c){ -
byte[] b = new byte[2]; -
b[0] = (byte) ((c & 0xFF00) >> 8); -
b[1] = (byte) (c & 0xFF); -
return b; -
} -
-
-
public static char byteToChar(byte[] b){ -
char c = (char) (((b[0] & 0xFF) << 8) | (b[1] & 0xFF)); -
return c; -
} -
-
-
public static byte[] stringToByte(String str) throws UnsupportedEncodingExcep tion{ -
return str.getBytes("GBK"); -
} -
-
-
public static String bytesToString(byte[] str) { -
String keyword = null; -
try { -
keyword = new String(str,"GBK"); -
} catch (UnsupportedEncodingExcep tion e) { -
e.printStackTrace(); -
} -
return keyword; -
} -
-
-
-
@Test -
public void testObject2ByteArray() throws IOException, -
ClassNotFoundException { -
// Object obj = ""; -
Integer[] obj = { 1, 3, 4 }; -
-
// // object to bytearray -
ByteArrayOutputStream bo = new ByteArrayOutputStream(); -
ObjectOutputStream oo = new ObjectOutputStream(bo); -
oo.writeObject(obj); -
byte[] bytes = bo.toByteArray(); -
bo.close(); -
oo.close(); -
System.out.println(Arrays.toString(bytes)); -
-
Integer[] intArr = (Integer[]) testByteArray2Object(bytes); -
System.out.println(Arrays.asList(intArr)); -
-
-
byte[] b2 = intToByte(123); -
System.out.println(Arrays.toString(b2)); -
-
int a = byteToInt(b2); -
System.out.println(a); -
-
} -
-
-
private Object testByteArray2Object(byte[] bytes) throws IOException, -
ClassNotFoundException { -
// byte[] bytes = null; -
Object obj; -
// bytearray to object -
ByteArrayInputStream bi = new ByteArrayInputStream(bytes); -
ObjectInputStream oi = new ObjectInputStream(bi); -
obj = oi.readObject(); -
bi.close(); -
oi.close(); -
System.out.println(obj); -
return obj; -
} -
- }