繁体   English   中英

缓冲读取器和写入器

[英]Buffered Readers and Writers

所以我有一个问题,我在一本教科书中读到,缓冲区仅在文本文件已满时才写入文本文件,并且仅在文本文件为空时才从文本文件中读取因此假设我只想写一个字符串“James”,当然不会't 使缓冲区满,那么为什么它仍然被写入文件 testout.txt

package com.javatpoint;  

import java.io.*;

public class BufferedWriterExample {

    public static void main(String[] args) throws Exception {     
        FileWriter writer = new FileWriter("D:\\testout.txt");  
        BufferedWriter buffer = new BufferedWriter(writer);  
        buffer.write("Welcome to javaTpoint.");  enter code here
        buffer.close();  
        System.out.println("Sucenter code herecess");  
    }
}

我在教科书中读到,缓冲区 [in a BufferedWriter ] 仅在文本文件已满时才写入文本文件...

那是不正确的1 事实上,一个BufferedWriter将写入它包装的Writer

  • 当对其中一种写入方法的调用填满缓冲区2 时
  • 当你调用bw.flush()或者
  • 当您调用bw.close()

这些通常会将数据写入文件。 (但并非总是如此。这取决于包装的Writer的行为。)

因此,在您的示例中写入所有数据的原因是您正在调用buffer.close()


...和 ​​[a BufferedReader ] 仅在文本文件为空时从文本文件中读取。

这是正确的,但与您的其他问题无关。


1 - 你可能误读了教科书。

2 - 实际上它比这更复杂一点,因为write(char[], ...)足够多字符的write(char[], ...)调用将首先刷新缓冲区,然后直接从char[]写入包装溪流。 它绕过缓冲区以避免不必要的复制。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM