java float数组与文件之间的转换 大端转小端

1、用二进制保存到文件

public void saveFloatArray2Bin(float[] vArr, String vPath) {
    FileOutputStream fos = null;
    DataOutputStream dos = null;
    try {
        // 新建文件流
        fos = new FileOutputStream(vPath);
        // 新建数据流关联文件流
        dos = new DataOutputStream(fos);

        // 读取每个float到流里
        for (float f:vArr) {
            // 写入到文件流里
            dos.writeFloat(f);
        }

        // force bytes to the underlying stream
        dos.flush();
        fos.flush();

        dos.close();
        fos.close();
    } catch (Exception e) {
        e.printStackTrace();
    }
}

2、读取float类型的二进制文件

public void readFloatFile2Float(float[] vArr, String vPath) {
    InputStream is = null;
    DataInputStream dis = null;
    try {
        is = new FileInputStream(vPath);
        dis = new DataInputStream(is);

        while(dis.available()>0)
        {
            float c = dis.readFloat();
            Log.d("float打印", "readFloatFile2Float: "+c);
        }

        is.close();
        dis.close();
    } catch (Exception e) {
        e.printStackTrace();
    }
}

3、float 保存成txt文件

这个方法需要先将float转成string再保存

public void saveFloatArray2File(float[] vArr, String vPath) {
    if (null == vArr) {
        return;
    }
    if (null == vPath || vPath.equals("")) {
        return;
    }
    File file = new File(vPath);  //存放数组数据的文件
    StringBuffer tBuffer = new StringBuffer();
    for (float val : vArr) {
        //保留6位小数,这里可以改为其他值
        tBuffer.append(String.format("%.6f", val));
        tBuffer.append(",");//以逗号分隔
    }
    try {
        FileWriter out = new FileWriter(file);  //文件写入流
        out.write(tBuffer.toString());//写文件
        out.close();
    } catch (Exception e) {
        e.printStackTrace();
    }
}

4、flaot数据大端转小端

float数组保存成二进制文件的时候后需要注意区分大小端模式,大端模式下保持的文件拿到小端模式的环境里读取是会出错的。

大端模式,是指数据的高字节保存在内存的低地址中,而数据的低字节保存在内存的高地址中,这样的存储模式有点儿类似于把数据当作字符串顺序处理:地址由小向大增加,而数据从高位往低位放;这和我们的阅读习惯一致。

小端模式,是指数据的高字节保存在内存的高地址中,而数据的低字节保存在内存的低地址中,这种存储模式将地址的高低和数据位权有效地结合起来,高地址部分权值高,低地址部分权值低。

//大端转小端
private float big2Little(float big){
    // 把float转换为byte[]
    int fbit = Float.floatToIntBits(big);

    byte[] b = new byte[4];
    b[0] = (byte) (fbit >> 24);
    b[1] = (byte) (fbit >> 16);
    b[2] = (byte) (fbit >> 8);
    b[3] = (byte) (fbit);
    
    int l;
    l = b[0];
    l &= 0xff;
    l |= ((long) b[1] << 8);
    l &= 0xffff;
    l |= ((long) b[2] << 16);
    l &= 0xffffff;
    l |= ((long) b[3] << 24);
    float little = Float.intBitsToFloat(l);
    return little;
}

你可能感兴趣的:(android之路)