将数字写入.mat会产生除文本文件之外的其他结果

时间:2016-02-05 16:53:17

标签: java matlab mat-file

我用ArrayList<Long> runtime测量系统的运行时间。列表的不同条目我通过System.nanoTime();获得了返回长整数。

我现在正在将此ArrayList写入文本文件,只需循环遍历列表并对每个条目使用Long.toString();

到目前为止一切顺利,但现在我还使用JMatIO(Matlab文件格式)创建了一个.mat文件。我通过以下方式执行此操作(请记住ArrayList<Long> runtime):

// Convert ArrayList to array because JMatIO only accepts arrays
long[] runtimeArr = new long[runtime.size()];
int i = 0;
for (long a : runtime) {
   runtimeArr[i] = a;
   i++;
}

// Write to .mat file.
ArrayList<MLArray> list = new ArrayList<MLArray>();
MLInt64 m = new MLInt64("runtime", runtimeArr, 1);
list.add(m);
new MatFileWriter("runtime.mat", list); // Creates .mat

如果我在Matlab中打开.mat文件,显示的数字与文本文件略有不同(我在Matlab中使用format long g)。例如在Matlab I中获得1988336630,在文本文件1993496993中。

为什么会这样?

编辑:这是一个完整的例子

public class Main {
  public static void main(String[] args) {
     ArrayList<Long> runtime = new ArrayList<Long>();
     Thread.sleep(2000);
     runtime.add(System.nanoTime());
     File file = new File("filename.txt");
     FileWriter fw = new FileWriter(file.getAbsoluteFile());
     BufferedWriter bw = new BufferedWriter(fw);
     bw.write(Long.toString(runtime.get(0)));
     bw.close(); 

     // Convert ArrayList to array because JMatIO only accepts arrays
     long[] runtimeArr = new long[runtime.size()];
     int i = 0;
     for (long a : runtime) {
        runtimeArr[i] = a;
        i++;
     }

     // Write to .mat file.
     ArrayList<MLArray> list = new ArrayList<MLArray>();
     MLInt64 m = new MLInt64("runtime", runtimeArr, 1);
     list.add(m);
     new MatFileWriter("runtime.mat", list); // Creates .mat
  }
}

0 个答案:

没有答案