Java 将数字写入.mat会得到文本文件以外的结果

Java 将数字写入.mat会得到文本文件以外的结果,java,matlab,mat-file,Java,Matlab,Mat File,我正在使用ArrayList运行时测量系统的运行时。我通过System.nanoTime()获得的列表的不同条目返回一个长字符串 我现在通过循环列表并使用Long.toString()将这个ArrayList写入一个文本文件用于每个条目 到目前为止还不错,但现在我还使用JMatIO(Matlab文件格式)创建了一个.mat文件。我通过以下方式执行此操作(请记住ArrayList运行时): 该误差将与单个变量的精度误差完全匹配:single(1988336630)==single(19883366

我正在使用
ArrayList运行时测量系统的运行时。我通过
System.nanoTime()获得的列表的不同条目返回一个长字符串

我现在通过循环列表并使用
Long.toString()将这个ArrayList写入一个文本文件用于每个条目

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


该误差将与单个变量的精度误差完全匹配:
single(1988336630)==single(1988336639)
为真。这段代码真正写的是什么数据类型?@Daniel因此ArrayList包含Long,并且这些数据类型也被写入文本文件(Long.toString())。为了编写.mat文件,我将ArrayList转换为long[],我认为应该可以。我将其传递给JMatIO库。@Daniel我刚刚看到JMatIO库首先从long[]转换为long[],但我认为这不应该是问题。@Daniel如果我选择“whos runtime”在Matlab中,我看到Matlab中的运行时变量实际上是int64。所以这应该没问题。顺便说一句,其他值示例是1004225605(java)与1000584651(Matlab)和40294(java)与12544(Matlab)。您是否尝试进一步简化代码?只是java代码中的一些常量,而不是文本解析。在这一点上,我认为库中有一些bug,去掉文本解析的东西将成为bug报告的完美代码示例。
// 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
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
  }
}