当我使用多线程向单个文件写入数据时,我在BufferedWriter
遇到了问题。
我设置了BufferedWriter
的缓冲区大小,但无论我设置什么数字,它都会在缓冲区为8192(默认缓冲区大小)时将数据刷新到磁盘上,而不是我设置的大小(这里是16384)。我的代码有问题吗?
以下是我构建BufferedWriter
的方式:
new BufferedWriter(new FileWriter(fileName, true), 16384);
这是完整的代码:
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
public class Test1 {
public static void main(String[] args) throws IOException {
for(int i =0;i<10;i++){
MyThread r = new MyThread();
Thread t = new Thread(r);
t.start();
}
}
}
class MyThread implements Runnable {
public void run() {
String s = "{addffffffkkkljlkj2015dd}\n";
BufferedWriter bw = null;
try {
bw = new BufferedWriter(new FileWriter(
"/Users/liaoliuqing/Downloads/1.txt", true),16384);
} catch (IOException e) {
e.printStackTrace();
}
for(int i =0 ; i<1000; i++){
try {
bw.write(String.format("%03d", i)+s);
//bw.flush();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
FileWriter
内部缓冲区:https://dev59.com/0lfUa4cB1Zd3GeqPIoK7 文档中说“要自己指定[字符编码和字节缓冲区大小],请在 FileOutputStream 上构造 OutputStreamWriter”,但我没有看到这些类的任何构造函数允许您指定缓冲区大小 :( - Chris Martin