最近和C语言的系统有交互,需要给对方传输二进制文件,但C语言的文件默认是小端,而Java作为网络应用程序,默认是大端
因此需要在写入二进制文件的时候修改一下写入字节的顺序。
先看看普通写入
FileOutputStream fos = new FileOutputStream("D:/temp/test.txt");
BufferedOutputStream bos=new BufferedOutputStream(fos);
DataOutputStream dos=new DataOutputStream(bos);
dos.writeShort(66);
dos.close();
bos.close();
fos.close();
用16进制编辑器打开文件可以看到内容为
00 42
然而C语言中的顺序是小端先行,即
42 00
查看DataOutputStream.writeShort源码,其实它也是将数值分解成8位二进制(1byte)写入
public final void writeShort(int v) throws IOException {
out.write((v >>> 8) & 0xFF);
out.write((v >>> 0) & 0xFF);
incCount(2);
}
故我们可以手动写入byte数组,将目标数值手动转化为一个byte数组,于是我们写一个方法
// 小端输出模式
public static byte[] short2Bytes(short a)