我最近开始学习Java,并希望了解大型应用程序的Java模块。我遇到了以下Java代码行:
String line = (new BufferedReader(new InputStreamReader(System.in))).readLine();
这段Java代码的作用是什么?是否有C / C ++的等效代码?
System.in
是标准输入。
InputStreamReader
允许您将读取指定输入(在本例中是标准输入)的流相关联,因此现在我们有一个流。
BufferedReader
是一个“抽象”概念,它帮助您处理流。例如,它实现了 readLine
方法,而不是逐个字符地读取,直到找到 '\n' 以获取整行内容。它只是在这个过程中返回一个字符串。
因此,这一行的意思是:“从标准输入中读取一行,并将其存储在变量 line
中。”
System.in
是标准输入的InputStream
。InputStreamReader
是从字节流到字符流的桥梁。BufferedReader
是一个字符流(Reader
),用于高效读取字符、数组和行,不是_帮助您处理流的"抽象"_。 - bit2shift> 这段Java代码是做什么用的
:
String line
是您的 字符串对象
new BufferedReader().readLine()
是一个BufferedReader实例,用于从字符输入流中读取文本;而 readline()
是它实现的一个方法,用于读取直到换行符。
new InputStreamReader()
为您提供了一个InputStreamReader实例,它是标准输入字节流和BufferedReader
所需的字符流之间的“桥梁”。
System.in
是标准输入(字节流)
> 是否有一个C/C++等效的版本
嗯……没有叫做 C/C++ 的语言...... ;)
因此,我会假设您想要针对每个语言都回答一下。
在C中,没有“字符串”,您必须使用字符数组,但是您可以使用类似于以下内容的方式将数据读入到字符数组中:stdin
char input[100];
...
scanf("%99[^\n]", input);
或者
fgets (input, 100 , stdin)
在C++中,您可以使用以下代码:
using namespace std;
string line;
getline(cin, line);
InputStreamReader是从字节流到字符流的桥梁:它读取字节并使用指定的字符集将其解码为字符。它使用的字符集可以通过名称指定,也可以明确给出,或者接受平台的默认字符集。
每次调用InputStreamReader的read()方法都可能导致从底层字节输入流中读取一个或多个字节。为了实现字节到字符的有效转换,可能会提前从底层流中读取更多的字节,以满足当前的读取操作。
为了达到最高效率,我们考虑在BufferedReader内包装一个InputStreamReader。例如:
BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
readLine()
方法,该方法在InputStreamReader中不存在。 - davmac
InputStreamReader
е’ҢBufferedReader
зҡ„javadocгҖӮ - Alvin Wongstd::string line; std::getline(std::cin, line);
。 - jrok