在matlab中读取错误的.txt二进制数据

时间:2016-04-22 21:55:51

标签: java matlab binaryfiles datainputstream dataoutputstream

我编写了一个Java程序,将数字数据输出到二进制.txt文件,并计划使用Matlab处理该数据文件。

在Java程序中,我使用DataOutputStream将浮点数写入data.txt文件并使用DataInputStream进行测试,以读取前面写的data.txt。我得到了正确的结果。

    // write {1.0, 2.0, 3.0, 4.0, 5.0, 6.0}
    private void writeFile(Float [] data) throws IOException {
        FileOutputStream fos = new FileOutputStream(fileName);
        DataOutputStream dos = new DataOutputStream(fis);

        for (int i = 0; i < data.length; ++i) {
            dos.writeFloat(data[i]);
        }
        dos.close();
}

//output is {1.0, 2.0, 3.0, 4.0, 5.0, 6.0}
private float[] readFile( String fileName, int size) throws IOException {
    FileInputStream fis = new FileInputStream(fileName);
    DataInputStream dis = new DataInputStream(fis);
    float [] dataArray = new int[size];

    for (int i = 0; i < dataArray.length; ++i) {
        dataArray[i] = dis.reaFloat();
    }
    dis.close();
    return dataArray;
}

但是,当我在matlab中使用data.txt文件时,我的编号错误。

fid = fopen('data.txt');
data = fread(fid, 'float');
fclose all;

我得到的是:
     data =

   1.0e-40 *

   0.4601
   0.0009
   0.2305
   0.4601
   0.5749
   0.6897

所以,我怀疑这可能是我在Matlab中从二进制转换为float的问题。任何建议都表示赞赏。

或者是否还有其他方法可以在Java中编写Java和原始数据? 谢谢。

1 个答案:

答案 0 :(得分:0)

您可以将数据以CSV格式写入文件,然后将其导入Matlab。

如果您的输出文件是CSV文件

1.1, 1.2, 1.3                                                                                                      
3.2, 3.3, 4.5

然后您可以使用 importdata csvread 命令将数据导入matlab

your_data = importdata('test.txt', ',')
your_data = csvread('test.txt')

如果您的数据格式更复杂,请使用 textscan 。例如,您可以解析以下数据格式

"1.1", "1.2", "1.3", "3.2", "3.3", "4.5"

使用以下命令进入单元格数组。

buffer = fileread('/tmp/list.txt')
values = textscan(buffer, '"%f"', 'Delimiter', ',')