文档章节

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

白志华
 白志华
发布于 2015/10/18 10:56
字数 849
阅读 10
收藏 0
点赞 0
评论 0

在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;
	}

}


版权声明:本文为博主原创文章,未经博主允许不得转载。

© 著作权归作者所有

共有 人打赏支持
白志华
粉丝 29
博文 260
码字总数 57524
作品 0
长沙
程序员
java基础之基本数据类型及之间的转换

1.布尔型(boolean) :true/false,不可以以0或非0的数字代替;不能进行数据之间的转换。 2.整数类型 ** 整型默认为int型,而long类型表示的范围要超出int表数范围,所以,声明long类型时,...

林夕2018 ⋅ 2014/09/27 ⋅ 0

C# 对象、文件与二进制串(byte数组)之间的转换

1.关于本文 在使用C#下的TCP(类TcpClient)、UDP(类UdpClient)协议传输信息时,都需要将信息转换为byte类型的数组进行发送。本文实现了两种object与byte数组的转换和一种文件与byte数组转...

北风其凉 ⋅ 2014/12/04 ⋅ 2

各类Java基本数据类型转换

一 自动类型转换 1 自动类型转换图 数范围小的向数范围大的进行自动类型转换,如同把小瓶的水倒入大瓶,不会有任何问题。Java支持自动类型转换。 2 代码示例 Java代码 下载 public class Aut...

rfuhx7521 ⋅ 2016/09/26 ⋅ 0

1.Java基本数据类型总结

Java基本数据类型总结 基本类型,或者叫做内置类型,是Java中不同于类的特殊类型。它们是我们编程中使用最频繁的类型。java是一种强类型语言,第一次申明变量必须说明数据类型,第一次变量赋...

灰鳖子 ⋅ 2016/12/12 ⋅ 0

Java数据类型

Java数据类型 八种基本数据类型 Java语言中,简单(或基本)数据类型分了以下八种: 字节型(byte)、短整型(short)、整型(int)、长整型(long)、字符型(char)、浮点型(float)、双精...

秋风醉了 ⋅ 2014/04/03 ⋅ 0

华为软件编程规范学习(五)--变量、结构

华为软件编程规范学习(五)--变量、结构 5-1:去掉没必要的公共变量 说明:公共变量是增大模块间耦合的原因之一,故应减少没必要的公共变量以降低模块间的耦合度。 5-2:仔细定义并明确公共变...

长平狐 ⋅ 2013/06/03 ⋅ 0

Java小白进阶笔记(2)-变量和数据类型

1.Java有多少种数据类型,数据类型的分类? 两种数据类型: 基本数据类型 引用数据类型 除了八种基本数据类型,其他的都是引用数据类型。 2.Java的工作机制? Java程序的源代码(.java)编译...

阿里云云栖社区 ⋅ 05/25 ⋅ 0

sql server的sql查询包的数据格式

sql server前后端通信的数据包的格式,可以大致分为:公共头部+个性化包头部+数据。其中公共头部是包的最开始的8byte的内容,每个包都有这8byte的内容,含义相同。再紧接着是各种类型的数据包...

harris2016 ⋅ 2016/08/22 ⋅ 0

C 和 Java 之间的byte数据的转换问题

C语言里通常可能开发人员直接定义struct 作为数据包, 因此在java客户端接收struct 中的数据时候,受整数等类型的高低位存放的影响, 需要进行相应的转换, 参考: http://www.ibm.com/developerw...

Simon253 ⋅ 2013/08/13 ⋅ 0

java基础学习篇01

从事了java2年开发,后来发现自己除了在网上抄袭代码之外就一无是处了,还没有在学校培训的时候那样子还愿意花时间去研究新技术,连最基础不常用的都快忘记了。 所以开始重新从最基础的开始回...

Pong_Dong ⋅ 2017/04/19 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

懒惰根本就不存在

简评:芝加哥大学心理学教授,懒惰根本就不存在。(本文表面讲行为心理学实则讲教育) 金句:以好奇而不是判断来回应一个人的无效行为,是非常有帮助的。 本文「我」代表原作者 E Price。 自...

极光推送 ⋅ 27分钟前 ⋅ 0

Excel提取单元格中最后一个“.”后面的数据

java.lang.String ----- String =TRIM((MID(SUBSTITUTE(B2,".",REPT(" ",99)),(LEN(B2)-LEN(SUBSTITUTE(B2,".","")))*99,99)))...

klog ⋅ 29分钟前 ⋅ 0

mac远程桌面

下载安装remote-desktop-mac Mac beta 客户端 mac通过远程桌面访问windows服务器。

亚林瓜子 ⋅ 33分钟前 ⋅ 0

firrtl

动手---sbt(2)之后,再回头看 chisel第一个实验,根据 https://github.com/freechipsproject/firrtl 发现firrtl没有执行sbt assembly命令,重新执行这个命令,结果成功。如下图: joe@joe-As...

whoisliang ⋅ 37分钟前 ⋅ 0

NIO

一、通道(Channel):用于源节点与目标节点的连接。在 Java NIO 中负责缓冲区中数据的传输。Channel 本身不存储数据,因此需要配合缓冲区进行传输。 二、通道的主要实现类 java.nio.channel...

stars永恒 ⋅ 38分钟前 ⋅ 0

Android悬浮窗的实现

0. 前言   现在很多应用都使用到悬浮窗,例如微信在视频的时候,点击Home键,视频小窗口仍然会在屏幕上显示。这个功能在很多情况下都非常有用。那么今天我们就来实现一下Android悬浮窗,以...

猴亮屏 ⋅ 38分钟前 ⋅ 0

日志采集中的关键技术分析

概述 日志从最初面向人类演变到现在的面向机器发生了巨大的变化。最初的日志主要的消费者是软件工程师,他们通过读取日志来排查问题,如今,大量机器日夜处理日志数据以生成可读性的报告以此...

tqyin ⋅ 39分钟前 ⋅ 0

使用Navicat将数据导出为text文本 然后再导入

将数据导出为text文本效率很高 1. 准备工作 1.1 准备表结构 1.2 目标库 执行生成表结构sql 2.将表数据导出为text文本 生成的text文本 3. 目标库 导入text 4.效果...

Lucky_Me ⋅ 45分钟前 ⋅ 0

IntelliJ IDEA 乱码解决方案 (项目代码、控制台等)

文章介绍了idea下,项目乱码、控制台乱码及运行tomcat控制台乱码的解决方案,文章链接:https://www.cnblogs.com/vhua/p/idea_1.html

Funcy1122 ⋅ 48分钟前 ⋅ 0

IDEA使用sonarLint

一、IDEA如何安装SonarLint插件 1.打开 Idea 2.点击【File】 3.点击【Settings】 4.点击【Plugins】 5.在搜索栏中输入“sonarlint”关键字 6.点击【Install】进行安装 7.重启Idea 二、IDEA如...

开源中国成都区源花 ⋅ 53分钟前 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部