BufferedReader 如何知道要读取哪个文件?
How does the BufferedReader know which file to read?
假设我有
try (FileWriter fw = new FileWriter("test.txt",false)) {
BufferedReader bw=new BufferedReader(new InputStreamReader(System.in));
do {
str = bw.readLine();
if (str.compareTo("stop") == 0) break;
str = str + " ";
fw.write(str);
} while(str.compareTo("stop")!=0);
} catch(IOException e) {
}
我的 BufferedReader 如何知道要读取的输入流?在bw.readLine()
的情况下?
同样在我的 FileReader 的情况下?为什么我必须指定要读取的文件?或者是
String s;
//create a BufferedReader that reads a stream of characters
//FileReader Writes character Values
try (FileReader decodeFile = new FileReader("test.txt")) {
BufferedReader readFile=new BufferedReader(decodeFile);
//first check to see if br has a null value
while ((s=readFile.readLine()) != null) {
System.out.println(s);
}
} catch (IOException e) {
e.printStackTrace();
}
我对此很困惑,有人可以解释一下吗?是的,我已经阅读了文档,所以我知道两者的作用
BufferedReader
并不关心 读什么 ,只要它是 Reader
。它只是一个 decorator 将功能添加到另一个 Reader
实现。 that Reader
所做的(通常是从流中读取,但也可能是从字符串中读取,甚至生成随机数据)与 BufferedReader
完全无关.
所有 BufferedReader
所做的就是从包装的 Reader
中读取并缓冲结果,以便可以实现某些事情,例如阅读整行(这要求您阅读足够多,直到找到流的结尾或下一个换行符)。
在 BufferedReader
构造函数中,您指定确切的 Reader
并将实际从输入流中读取数据。正如@Joey 所说,它只是装饰器
在您的示例中,您将从标准输入流中读取,在第二种情况下,您将从确切的文件中读取
流只是一个连续的数据流。Reader
class Java 中的大多数子class 都在构造函数中声明了流的来源。
对于第一种情况,InputStreamReader
从 System.in
获取输入。 System.in
是由用户输入提供的数据流。尝试 运行 java 文件并输入几个字符,然后在终端按回车键。
BufferedReader
是专门用于高效阅读文本的 reader。它从另一个流源获取数据的内容。在这种情况下,BufferedReader(decodeFile)
表示 decodefile
是 BufferedReader
从中读取流数据的地方。 decodefile
是 FileReader
类型,FileReader("test.txt")
表示读取的文件来自名为 test.txt
的文件。因此,流程将是这样的:"test.txt"
-> FileReader
-> BufferedReader
已更新
查看文档有帮助。
https://docs.oracle.com/javase/7/docs/api/java/io/PrintWriter.html
PrintWriter 帮助以您喜欢的格式编写输出。
(按格式,我的意思是附加一个字符、换行、一般格式。)
另一方面,FileWriter
将流内容写入文件。因此,在这种情况下,流程如下。
String
-> PrintWriter
-> FileWriter
-> "outputfile.txt"
字符串内容可以像下面这样变化
“文本”->“格式化文本”->“for”、“matted”、“文本”->“格式化文本”
使用流的全部意义在于将大量数据分块,这样进程就不会占用太多 RAM(内存)。因此,分块可能(但不一定)如上所示发生。
假设我有
try (FileWriter fw = new FileWriter("test.txt",false)) {
BufferedReader bw=new BufferedReader(new InputStreamReader(System.in));
do {
str = bw.readLine();
if (str.compareTo("stop") == 0) break;
str = str + " ";
fw.write(str);
} while(str.compareTo("stop")!=0);
} catch(IOException e) {
}
我的 BufferedReader 如何知道要读取的输入流?在bw.readLine()
的情况下?
同样在我的 FileReader 的情况下?为什么我必须指定要读取的文件?或者是
String s;
//create a BufferedReader that reads a stream of characters
//FileReader Writes character Values
try (FileReader decodeFile = new FileReader("test.txt")) {
BufferedReader readFile=new BufferedReader(decodeFile);
//first check to see if br has a null value
while ((s=readFile.readLine()) != null) {
System.out.println(s);
}
} catch (IOException e) {
e.printStackTrace();
}
我对此很困惑,有人可以解释一下吗?是的,我已经阅读了文档,所以我知道两者的作用
BufferedReader
并不关心 读什么 ,只要它是 Reader
。它只是一个 decorator 将功能添加到另一个 Reader
实现。 that Reader
所做的(通常是从流中读取,但也可能是从字符串中读取,甚至生成随机数据)与 BufferedReader
完全无关.
所有 BufferedReader
所做的就是从包装的 Reader
中读取并缓冲结果,以便可以实现某些事情,例如阅读整行(这要求您阅读足够多,直到找到流的结尾或下一个换行符)。
在 BufferedReader
构造函数中,您指定确切的 Reader
并将实际从输入流中读取数据。正如@Joey 所说,它只是装饰器
在您的示例中,您将从标准输入流中读取,在第二种情况下,您将从确切的文件中读取
流只是一个连续的数据流。Reader
class Java 中的大多数子class 都在构造函数中声明了流的来源。
对于第一种情况,
InputStreamReader
从System.in
获取输入。System.in
是由用户输入提供的数据流。尝试 运行 java 文件并输入几个字符,然后在终端按回车键。BufferedReader
是专门用于高效阅读文本的 reader。它从另一个流源获取数据的内容。在这种情况下,BufferedReader(decodeFile)
表示decodefile
是BufferedReader
从中读取流数据的地方。decodefile
是FileReader
类型,FileReader("test.txt")
表示读取的文件来自名为test.txt
的文件。因此,流程将是这样的:"test.txt"
->FileReader
->BufferedReader
已更新
查看文档有帮助。 https://docs.oracle.com/javase/7/docs/api/java/io/PrintWriter.html
PrintWriter 帮助以您喜欢的格式编写输出。 (按格式,我的意思是附加一个字符、换行、一般格式。)
另一方面,FileWriter
将流内容写入文件。因此,在这种情况下,流程如下。
String
-> PrintWriter
-> FileWriter
-> "outputfile.txt"
字符串内容可以像下面这样变化
“文本”->“格式化文本”->“for”、“matted”、“文本”->“格式化文本”
使用流的全部意义在于将大量数据分块,这样进程就不会占用太多 RAM(内存)。因此,分块可能(但不一定)如上所示发生。