BufferedReader and InputStreamReader in Java

BufferedReader and InputStreamReader in Java

本文关键字:Java in InputStreamReader and BufferedReader      更新时间:2023-10-16

我最近刚开始学习Java,想了解一个大型应用程序的Java模块。我偶然发现了一行java代码:

String line = (new BufferedReader(new InputStreamReader(System.in))).readLine();

这段java代码的作用是什么?有类似的C/C++吗?

System.in是标准输入。

InputStreamReader允许您关联从指定输入(在本例中为标准输入)读取的流,因此现在我们有了一个流。

BufferedReader是一个"抽象",可以帮助您处理流。例如,它实现了readLine,而不是逐个字符读取,直到找到一个"\n"来获得整行。它只是在这个过程之后返回一个字符串。

所以这一行的意思是:"从标准输入中读取一行,并将其存储在line变量中"。

> What does this java code do:

String line是您的字符串对象

new BufferedReader().readLine()是从字符输入流读取文本的BufferedReader的实例;并且CCD_ 9是它实现的读取直到换行符的方法。

new InputStreamReader()为您提供了一个InputStreamReader实例,它是BufferedReader所需的标准字节流和字符流之间的"桥梁"。

System.in是标准输入(字节流)


> Is there a C/C++ equivalent of this
嗯。。。没有一种语言叫做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的BufferedReader从标准输入控制台读取aline并将其存储到String行。

缓冲阅读器

从字符输入流中读取文本,缓冲字符,以便有效读取字符、数组和行。可以指定缓冲区大小,也可以使用默认大小。默认值对于大多数用途来说足够大。通常,阅读器发出的每个读取请求都会导致底层字符或字节流发出相应的读取请求。因此,建议将BufferedReader封装在读()操作可能代价高昂的任何读卡器上,例如FileReaders和InputStreamReaders。

BufferedReader#readLine()

读一行文字。换行符('\n')、回车符('\r')或紧跟换行符的回车符中的任何一个都会终止一行。

InputStreamReader

InputStreamReader是从字节流到字符流的桥梁:它读取字节并使用指定的字符集将其解码为字符。它使用的字符集可以通过名称指定,也可以显式给定,或者可以接受平台的默认字符集。每次调用InputStreamReader的read()方法之一都可能导致从底层字节输入流中读取一个或多个字节。为了能够有效地将字节转换为字符,可以从底层流中提前读取比满足当前读取操作所需的字节更多的字节。

系统

System类包含几个有用的类字段和方法。它无法实例化。

System类提供的设施包括标准输入、标准输出和错误输出流;访问外部定义的"属性";加载文件和库的方法;以及一种用于快速复制阵列的一部分的实用方法。

中的系统

"标准"输入流。此流已打开,可以提供输入数据。通常,该流对应于键盘输入或主机环境或用户指定的另一个输入源。

代码所做的只是简单地从输入流中读取一行。从模式的角度来看,这是一个装饰器。使用BufferedReader的目的是提高IO性能。

InputStreamReader是从字节流到字符流的桥梁:它读取字节并使用指定的字符集将其解码为字符。它使用的字符集可以通过名称指定,也可以显式给定,或者可以接受平台的默认字符集。

每次调用InputStreamReader的read()方法之一都可能导致从底层字节输入流中读取一个或多个字节。为了能够有效地将字节转换为字符,可以从底层流中提前读取比满足当前读取操作所需的字节更多的字节。

为了获得最高效率,我们考虑将InputStreamReader封装在BufferedReader中。例如:

中的BufferedReader=新的BufferedReader(新的InputStreamReader(System.in));