java:多字节数据类型数组(double,float,int,long)数组与byte数组的相互转换
2019-02-17 12:35
337 查看
版权声明:本文为博主原创文章,转载请注明源地址。 https://blog.csdn.net/10km/article/details/87524728
…
代码实现如下:
多字节数据类型数组(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 20000 ){ 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(); }
相关文章推荐
- java Byte和各数据类型(short,int,long,float,double)之间的转换
- java Byte和各数据类型(short,int,long,float,double)之间的转换
- Java中八个基本数据类型(byte、boolean、short、long、float、double、int、char)所占字节数
- Java中byte数组与short,int,char,long,float,double之间的转换
- Java中byte数组与short,int,char,long,float,double之间的转换
- java byte、short、int、long、float、double、char基本数据类型范围
- Java基础-数据类型int,short,char,long,float,double,boolean,byte
- java中int、long与byte数组相互转换
- String数据类型转换成long、int、double、float、boolean、char等七种数据类型
- C++ string 和 int, float double long数据类型的转换
- 什么样的数据算是byte类型,int类型,float类型,double类型,long类型
- java的int、char、long、float、double对byte的转换
- JAVA的数组 && 原始类型和引用类型以及String与int long相互转化 && String与byte[]相互转化
- java中byte数组与int类型之间的相互转换(两种方式)
- (JAVA & C)数据类型取值范围——short int long float double等
- VC 中 Cstring 与 int、float、double、char、string数据类型的相互转换
- java中数据类型转换 Integer String Long Float Double Date
- 关于8个基本的数据类型:byte,short,int,long,float,double,char,boonlean
- java中数据类型转换 Integer String Long Float Double Date
- Unity3D中的socket通信之八(字节数组与数据转换dll-byte int string float)