首页 > 应用开发 > > Java IO flush疑问
import java.io.BufferedReader;
import java.io.File;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.OutputStreamWriter;
import java.util.ArrayList;
import java.util.List;
public class FlushTest {
private static final String FILE_PATH = System.getProperty("user.home") + "/tmp/flush_test.txt";
public static void main(String[] args) {
System.out.println("FILE_PATH:" + FILE_PATH);
for (int i=1; i<=2; i++) {
final int index = i;
new Thread(() -> {
try(
FileOutputStream fos = new FileOutputStream(new File(FILE_PATH));
OutputStreamWriter osw = new OutputStreamWriter(fos);
) {
if (index == 1) {
osw.write("11111111\n");
osw.write("11111111\n");
osw.write("11111111\n");
}else {
osw.write("2\n");
osw.write("2\n");
osw.write("2\n");
osw.write("2\n");
osw.write("2\n");
osw.write("2\n");
}
System.out.println(index + ":" + System.currentTimeMillis());
osw.flush();
} catch (Exception e) {
}
}).start();
}
try {
Thread.sleep(1000);
/*
多次运行后,会有这三种情况,而且第三种情况的1打印有点特殊
[11111111, 11111111, 11111111]
[2, 2, 2, 2, 2, 2]
[2, 2, 2, 2, 2, 2, 11111, 11111111]
*/
System.out.println(read());
} catch (Exception e) {
e.printStackTrace();
}
deleteFile();
}
private static List<String> read() {
List<String> list = new ArrayList<>();
try (FileReader fr = new FileReader(new File(FILE_PATH));
BufferedReader br = new BufferedReader(fr)) {
String line;
while ((line = br.readLine()) != null) {
list.add(line);
}
} catch (Exception e) {
e.printStackTrace();
}
return list;
}
private static void deleteFile() {
new File(FILE_PATH).delete();
}
}如上面的java所示,运行多次后,read()方法的输出会有三种情况
[11111111, 11111111, 11111111]
[2, 2, 2, 2, 2, 2]
[2, 2, 2, 2, 2, 2, 11111, 11111111]
第三种输出就有点奇怪了,特别是只输出“5个1”那一段,不知谁能来解答一下!
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/2370/viewspace-3143713/ ,如需转载,请注明出处,否则将追究法律责任。