专栏首页10km的专栏java:多字节数据类型数组(double,float,int,long)数组与byte数组的相互转换

java:多字节数据类型数组(double,float,int,long)数组与byte数组的相互转换

多字节数据类型数组(double,float,int,long)数组数组和byte数组的相互转换都可以基于java.nio.Buffer实现. java.nio.DoubleBuffer对应double[], java.nio.FloatBuffer对应float[], java.nio.LongBuffer对应long[], java.nio.IntBuffer对应int[] …

byte[] 转 double[],float[],int[]…

byte[]转double[],float[],int[]…很简单因为ByteBuffer本身就有asDoubleBuffer,asFloatBuffer,asIntBuffer等方法,可以将ByteBuffer直接转换为DoubleBuffer,FloatBuffer,IntBuffer…; 代码实现如下:

	public static double[] asDoubleArray(byte[] input){
		if(null == input ){
			return null;
		}
		DoubleBuffer buffer = ByteBuffer.wrap(input).asDoubleBuffer();
		double[] res = new double[buffer.remaining()];
		buffer.get(res);
		return res;
	}
	public static float[] asFloatArray(byte[] input){
		if(null == input ){
			return null;
		}
		FloatBuffer buffer = ByteBuffer.wrap(input).asFloatBuffer();
		float[] res = new float[buffer.remaining()];
		buffer.get(res);
		return res;
	}
	public static int[] asIntArray(byte[] input){
		if(null == input ){
			return null;
		}
		IntBuffer buffer = ByteBuffer.wrap(input).asIntBuffer();
		int[] res = new int[buffer.remaining()];
		buffer.get(res);
		return res;
	}
	public static long[] asLongArray(byte[] input){
		if(null == input ){
			return null;
		}
		LongBuffer buffer = ByteBuffer.wrap(input).asLongBuffer();
		long[] res = new long[buffer.remaining()];
		buffer.get(res);
		return res;
	}
	public static short[] asShortArray(byte[] input){
		if(null == input ){
			return null;
		}
		ShortBuffer buffer = ByteBuffer.wrap(input).asShortBuffer();
		short[] res = new short[buffer.remaining()];
		buffer.get(res);
		return res;
	}

double[],float[],int[]…转byte[]

反过来,从多字节类型数组(double[],float[],long[]…)转byte[]要稍麻烦一些,因为多字节类型数组对应的Buffer类并没提供asByteBuffer这样的方法.所以要自己写些代码进行转换(比如将DoubleBuffer转为ByteBuffer),实现代码如下:

	/**
	 * {@link DoubleBuffer} TO {@link ByteBuffer}
	 * @param input
	 * @return
	 */
	public static ByteBuffer asByteBuffer(DoubleBuffer input){
		if(null == input ){
			return null;
		}
		ByteBuffer buffer = ByteBuffer.allocate(input.capacity()* (Double.SIZE/8));
		while(input.hasRemaining()){
			buffer.putDouble(input.get());
		}
		return buffer;
	}
	/**
	 * double[] TO byte[]
	 * @param input
	 * @return
	 */
	public static byte[] asByteArray(double[] input){
		if(null == input ){
			return null;
		}
		return asByteBuffer(DoubleBuffer.wrap(input)).array();
	}
	/**
	 * {@link FloatBuffer} TO {@link ByteBuffer}
	 * @param input
	 * @return
	 */
	public static ByteBuffer asByteBuffer(FloatBuffer input){
		if(null == input ){
			return null;
		}
		ByteBuffer buffer = ByteBuffer.allocate(input.capacity()* (Float.SIZE/8));
		while(input.hasRemaining()){
			buffer.putFloat(input.get());
		}
		return buffer;
	}
	/**
	 * float[] TO byte[]
	 * @param input
	 * @return
	 */
	public static byte[] asByteArray(float[] input){
		if(null == input ){
			return null;
		}
		return asByteBuffer(FloatBuffer.wrap(input)).array();
	}
	/**
	 * {@link IntBuffer} TO {@link ByteBuffer}
	 * @param input
	 * @return
	 */
	public static ByteBuffer asByteBuffer(IntBuffer input){
		if(null == input ){
			return null;
		}
		ByteBuffer buffer = ByteBuffer.allocate(input.capacity()* (Integer.SIZE/8));
		while(input.hasRemaining()){
			buffer.putInt(input.get());
		}
		return buffer;
	}
	/**
	 * int[] TO byte[]
	 * @param input
	 * @return
	 */
	public static byte[] asByteArray(int[] input){
		if(null == input ){
			return null;
		}
		return asByteBuffer(IntBuffer.wrap(input)).array();
	}
	/**
	 * {@link LongBuffer} TO {@link ByteBuffer}
	 * @param input
	 * @return
	 */
	public static ByteBuffer asByteBuffer(LongBuffer input){
		if(null == input ){
			return null;
		}
		ByteBuffer buffer = ByteBuffer.allocate(input.capacity()* (Long.SIZE/8));
		while(input.hasRemaining()){
			buffer.putLong(input.get());
		}
		return buffer;
	}
	/**
	 * long[] TO byte[]
	 * @param input
	 * @return
	 */
	public static byte[] asByteArray(long[] input){
		if(null == input ){
			return null;
		}
		return asByteBuffer(LongBuffer.wrap(input)).array();
	}
	/**
	 * {@link ShortBuffer} TO {@link ByteBuffer}
	 * @param input
	 * @return
	 */
	public static ByteBuffer asByteBuffer(ShortBuffer input){
		if(null == input ){
			return null;
		}
		ByteBuffer buffer = ByteBuffer.allocate(input.capacity()* (Short.SIZE/8));
		while(input.hasRemaining()){
			buffer.putShort(input.get());
		}
		return buffer;
	}
	/**
	 * short[] TO byte[]
	 * @param input
	 * @return
	 */
	public static byte[] asByteArray(short[] input){
		if(null == input ){
			return null;
		}
		return asByteBuffer(ShortBuffer.wrap(input)).array();
	}

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • java:bytes[]转long的三种方式

    bytes[] 到数字类型的转换是个经常用到的代码,解决方式也不止一种,最近需要将bytes[]转为long,有机会深入了解了一下,此文做个总结。 java代码...

    用户1148648
  • minigui: 基于miniStudio1.2.1创建模式对话框(DialogBox)

    版权声明:本文为博主原创文章,转载请注明源地址。 https://blog.csdn.net...

    用户1148648
  • linux gnu c 复制文件实例(open,close,creat,read,write)

    版权声明:本文为博主原创文章,转载请注明源地址。 https://blog.csdn.net...

    用户1148648
  • python动态规划解决矩阵连乘

            动态规划算法与分治法类似,其基本思想也就是将待求解的问题分解成若干个子问题,先求解子问题,然后从这些子问题的解得到原问题的解,简单概括为自顶向下...

    Flaneur
  • LeetCode 709. 转换成小写字母

    实现函数 ToLowerCase(),该函数接收一个字符串参数 str,并将该字符串中的大写字母转换成小写字母,之后返回新的字符串。

    村雨遥
  • 如果再有人问你分布式ID,这篇文章丢给他

    通常我们会调研各种各样的生成策略,根据不同的业务,采取最合适的策略,下面我会讨论一下各种策略/算法,以及他们的一些优劣点。

    用户5397975
  • 聊聊Tomcat的架构设计

    Tomcat 是 Java WEB 开发接触最多的 Servlet 容器,但它不仅仅是一个 Servlet 容器,它还是一个 WEB 应用服务器,在微服务架构体...

    张乘辉
  • nginx简易防CC策略规则

    肉鸡代理攻击。因为其真实访问,宝塔防火墙屏蔽不了,只能是手动分析日志,进行拦截! 下面放出几条规则,大家可以进行参考。

    周俊辉
  • Nginx简易防CC策略规则

    检测到来源地址有Baiduspider,自动跳转到公安备案网。 有的版权狗软件,顺序都搞不清楚,改改就拿来用了!

    开心分享
  • nginx简易防CC策略规则

    前几天一直在被游淘气(王赛好像是叫这个)的攻击,因为全是肉鸡代理攻击。 真实访问,宝塔防火墙屏蔽不了,只能是手动分析日志,进行拦截! 下面我放几条规则,大家可以...

    墨渊

扫码关注云+社区

领取腾讯云代金券