对文件IO中的FileOutputStream和BufferedOutputStream进行了一个基础的测试:
对相同的数据循环写10秒,然后看输出文件的大小。
测试代码如下:
package com.myspringboot.io.file;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.util.concurrent.TimeUnit;
public class FileIO {
private static final byte[] DATA = "123456789\n".getBytes();
private static final String PATH = "D:\\javatest\\out.txt";
public static void main(String[] args) throws Exception {
Thread thread = new Thread(() -> {
try {
testBasicFileIO(); // 100M左右
// testBufferedFileIO(); // 1G左右
} catch (Exception e) {
e.printStackTrace();
}
});
thread.setDaemon(true);
thread.start();
// 运行10秒后,结束程序
TimeUnit.SECONDS.sleep(10);
System.out.println("结束");
}
//最基本的file写
public static void testBasicFileIO() throws Exception {
File file = new File(PATH);
FileOutputStream out = new FileOutputStream(file);
while (true) {
out.write(DATA);
}
}
//测试buffer文件IO
// jvm 8kB syscall write(8KBbyte[])
public static void testBufferedFileIO() throws Exception {
File file = new File(PATH);
BufferedOutputStream out = new BufferedOutputStream(new FileOutputStream(file));
while (true) {
out.write(DATA);
}
}
}