首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >FileWriter与BufferedWriter的Java差异

FileWriter与BufferedWriter的Java差异
EN

Stack Overflow用户
提问于 2012-09-10 18:57:31
回答 3查看 108.4K关注 0票数 73

它们之间有什么区别?我刚刚开始学习Java ATM,但似乎我可以通过两种方式写入文件,即(我没有在这里复制try-catch块)。

代码语言:javascript
复制
FileWriter file = new FileWriter("foo.txt");
file.write("foobar");
file.close();

代码语言:javascript
复制
FileWriter file = new FileWriter("foo.txt");
BufferedWriter bf = new BufferedWriter(file);
bf.write("foobar");
bf.close();

我理解首先缓冲数据的概念,那么这是否意味着第一个示例将字符逐个写入,第二个示例将其缓冲到内存中并写入一次?

EN

回答 3

Stack Overflow用户

发布于 2012-09-10 19:01:54

你是正确的。下面是BufferedWriterwrite()方法:

代码语言:javascript
复制
public void write(int c) throws IOException {
    synchronized (lock) {
        ensureOpen();
        if (nextChar >= nChars)
            flushBuffer();
        cb[nextChar++] = (char) c;
    }
}

正如您所看到的,它确实会检查缓冲区是否已满(if (nextChar >= nChars))并刷新缓冲区。然后将新字符添加到缓冲区(cb[nextChar++] = (char) c;)。

票数 8
EN

Stack Overflow用户

发布于 2012-09-10 19:00:19

BufferedWriter更高效。如果我的内存没记错的话,它会把小的写操作和更大的写操作保存起来。如果你正在做很多小的写操作,那么我会使用BufferedWriter。调用对操作系统的写调用很慢,因此通常需要尽可能少的写操作。

票数 5
EN

Stack Overflow用户

发布于 2018-05-12 01:53:04

在无缓冲输入/输出(FileWriter、FileReader)中,读或写请求由底层操作系统直接处理。https://hajsoftutorial.com/java/wp-content/uploads/2018/04/Unbuffered.gif

这会使程序的效率大大降低,因为每个这样的请求通常都会触发磁盘访问、网络活动或一些其他相对昂贵的操作。为了减少这种开销,Java平台实现了缓冲I/O流。BufferedReader和BufferedWriter类提供内部字符缓冲区。写入缓冲编写器的文本存储在内部缓冲区中,只有在缓冲区填满或刷新时才写入底层编写器。https://hajsoftutorial.com/java/wp-content/uploads/2018/04/bufferedoutput.gif

更多https://hajsoftutorial.com/java-bufferedwriter/

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12350248

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档