我用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
}
}