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();
}
}
}
}
我通过使用OutputStream而不是writer解决了问题,这是代码:
bw = new BufferedOutputStream(
new FileOutputStream(new File("/Users/liaoliuqing/Downloads/1.txt"),true),165537);
我读到FileWriter和BufferedWriter的区别在于FileWriter直接写入文件(逐字符),white BufferedReader使用缓冲区。如果是,为什么FileWriter有缓冲区?例如,如果我创建一个FileWriter对象,如下所示: 而且,如果我在程序结束时不刷新或关闭写入器,它将不会向文件写入任何内容。这意味着它也使用缓冲区。拜托,解释一下?
我想知道FileWriter是否缓冲。 在这个SO问题中,它似乎是,然而在这个SO问题中,它似乎不是。(这将是每次写入(...)被调用时的系统调用。 所以基本上读这两个问题 提前感谢。 编辑:通过阅读此API解决了问题,我引用了相关部分: 每次调用write()方法都会导致对给定字符调用编码转换器。在写入底层输出流之前,生成的字节在缓冲区中累积。可以指定此缓冲区的大小,但默认情况下,它对于大多数用
问题内容: 我正在使用以下bash命令模式运行memcached: 尝试跟踪整个平台上无与伦比的按键设置。 memtracer脚本在下面,并且可以按预期运行,但有一个小问题。观察中间日志文件的大小,直到memkeywatchYMD.log的大小约为15-18K时,memtracer.py才开始获取输入。有没有更好的方法可以读入stdin或将缓冲区大小减小到1k以下以获得更快的响应时间? 问题答案:
问题内容: 两者之间有什么区别?我只是在学习Java ATM,但似乎可以双向写文件,即(我没有在这里复制try-catch块。) 和 我了解先缓冲数据的概念,这是否意味着第一个示例将字符一个接一个地写入,而第二个第一个示例则将其缓冲到内存中并写入一次? 问题答案: 如果您使用BufferedWriter则效率更高 在刷新/关闭之间有多次写入 与缓冲区大小相比,写操作较小。 在您的示例中,您只有一次
问题内容: 我正在使用以下bash命令模式运行memcached: 尝试跟踪整个平台上关键的无与伦比的装备。 memtracer脚本在下面,并且可以按预期运行,但有一个小问题。注意中间日志文件的大小,直到memkeywatchYMD.log的大小约为15-18K时,memtracer.py才开始获取输入。有没有更好的方法可以读入stdin或将缓冲区大小减小到1k以下以获得更快的响应时间? 问题答案
问题内容: 我正在尝试创建一个异步通道,并且一直在查看http://golang.org/ref/spec#Making_slices_maps_and_channels。 缓冲区大小为10是什么意思?缓冲区大小具体代表/限制了什么? 问题答案: 缓冲区大小是在没有发送阻塞的情况下可以发送到通道的元素数。默认情况下,通道的缓冲区大小为0(可通过来获得此值)。这意味着每个发送都会阻塞,直到另一个go