byte[]与各种数据类型互相转换示例

简介: 在socket开发过程中,通常需要将一些具体的值(这些值可能是各种JAVA类型)转化为byte[]类型,为此我总结了如下这个示例,贴出来,以便经常翻看: public class TestCase { /** * short到字节数组的转换.

在socket开发过程中,通常需要将一些具体的值(这些值可能是各种JAVA类型)转化为byte[]类型,为此我总结了如下这个示例,贴出来,以便经常翻看:

public class TestCase {
	
	/**
	 * short到字节数组的转换.
	 */
	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;
	}

	/**
	 * 字节数组到short的转换.
	 */
	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;
	}
	
	
	/**
	 * int到字节数组的转换.
	 */
	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;
	}

	/**
	 * 字节数组到int的转换.
	 */
	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;
	}
	
	
	/**
	 * long类型转成byte数组
	 */
	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;
	}

	/**
	 * 字节数组到long的转换.
	 */
	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;
	}
	
	/**
	 * double到字节数组的转换.
	 */
	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;
	}
	
	/**
	 * 字节数组到double的转换.
	 */
	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);  
	}
	
	
	/**
	 * float到字节数组的转换.
	 */
	public static void floatToByte(float x) {
		//先用 Float.floatToIntBits(f)转换成int
	}
	
	/**
	 * 字节数组到float的转换.
	 */
	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);  
	}  

	 /**
	  * char到字节数组的转换.
	  */
	 public static byte[] charToByte(char c){
		byte[] b = new byte[2];
		b[0] = (byte) ((c & 0xFF00) >> 8);
		b[1] = (byte) (c & 0xFF);
		return b;
	 }
	 
	 /**
	  * 字节数组到char的转换.
	  */
	 public static char byteToChar(byte[] b){
		char c = (char) (((b[0] & 0xFF) << 8) | (b[1] & 0xFF));
		return c;
	 }
	
	/**
	 * string到字节数组的转换.
	 */
	public static byte[] stringToByte(String str) throws UnsupportedEncodingException{
		return str.getBytes("GBK");
	}
	
	/**
	 * 字节数组到String的转换.
	 */
    public static String bytesToString(byte[] str) {
        String keyword = null;
        try {
            keyword = new String(str,"GBK");
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        }
        return keyword;
    }
    
    
	/**
	 * object到字节数组的转换
	 */
	@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);

	}

	/**
	 * 字节数组到object的转换.
	 */
	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;
	}

}


目录
相关文章
|
5月前
|
Java
java 读取文件 获取byte[]字节 并执行Gzip的压缩和解压
java 读取文件 获取byte[]字节 并执行Gzip的压缩和解压
49 0
|
8月前
|
存储 Java 计算机视觉
java 之byte
当涉及到处理数据时,Java 提供了多种数据类型,其中包括 `byte` 类型。在本文中,我们将深入探讨 Java 中的 `byte` 数据类型,了解它的特点、用途以及在编程中的实际应用。
|
8月前
|
Java
Java中 String与基本数据类型,包装类,char[],byte[]之间的转换
Java中 String与基本数据类型,包装类,char[],byte[]之间的转换
56 0
|
10月前
|
存储 Java
[java 基础知识] byte int 互转
[java 基础知识] byte int 互转
99 0
|
11月前
|
存储 Java
java基础类型中的char和byte的辨析及Unicode编码和UTF-8的区别
java基础类型中的char和byte的辨析及Unicode编码和UTF-8的区别
149 0
|
Java 数据安全/隐私保护
JAVA RSA加密解密代码范例(byte[]版)
JAVA RSA加密解密代码范例(byte[]版)
113 0
java中整型数据(byte、short、int、long)溢出的现象及原理
java中整型数据(byte、short、int、long)溢出的现象及原理
Java中字节Byte和位Bit的关系
Java中字节Byte和位Bit的关系
|
JavaScript Java 数据库
UTF-8 GBK UTF8 GB2312之间的区别和关系,Java中String和byte[]间的转换,byte 是怎样转为汉字,汉字转byte的;char与
UTF-8 GBK UTF8 GB2312之间的区别和关系,Java中String和byte[]间的转换,byte 是怎样转为汉字,汉字转byte的;char与
294 0
UTF-8 GBK UTF8 GB2312之间的区别和关系,Java中String和byte[]间的转换,byte 是怎样转为汉字,汉字转byte的;char与