javajava大端
① java 中怎样将 bytes 转换为 long 类型
方法有以下三种:
1、不借助其他任何已经有的类,直接进行转换。
2、借助java.nio.ByteBuffer实现,只要将byte[]转换为ByteBuffer就可以实现所有primitive类型的数据读取。
3、借助java.io.DataInputStream实现,只要将byte[]转换为DataInputStream就可以实现所有primitive类型的数据读取。
② Java盲区:如何用Java检测大端和小端
static ByteOrder byteOrder() { if (byteOrder == null) throw new Error("Unknown byte order"); return byteOrder;
} static { long a = unsafe.allocateMemory(8); try { unsafe.putLong(a, 0x0102030405060708L); byte b = unsafe.getByte(a); switch (b) { case 0x01: byteOrder = ByteOrder.BIG_ENDIAN; break; case 0x08: byteOrder = ByteOrder.LITTLE_ENDIAN; break; default:
assert false;
byteOrder = null;
}
} finally { unsafe.freeMemory(a);
}
}
③ 基本类型转Byte,Java与C平台区别
项目中要将坐标数据进行传输,自然用到float基本类型转byte。但跨平台联调时发现android发出得数据在ios端解析出来的坐标不对。但自身调试都正常。看了ByteBuffer源码发现ByteBuffer有个order方法。网络了一下才发现原来java平台和c平台对byte有大小端排序。而且java默认使用大端排序,c默认使用小端排序。至此基本明白为什么解析数据不对得问题。2边数据结构不一致。解决办法2边都使用一致得排序。
代码如下:android
④ JAVA程序编写的文件是什么格式的
JAVA
程序编写的源文件(源代码)是以".java"为结尾的,JVM(JAVA虚拟机解析的文件)是以".class"为结尾的,".class"文件就是java的可执行文件,同.exe文件具有同等的效果,.class文件采用的是魔力数字存储,同时为了在不同的CPU下运行,规定了字节的保存形式,采用大端字节顺序(BIG_ENDIAN)来保存的。而且".class"文件里面包含有编译器的版本以及兼容性数据!