[英]java InputStreamReader / BufferedReader “read” behavior
[英]BufferedReader and InputStreamReader in Java
我最近開始使用Java,想要了解大型應用程序的java模塊。 我遇到了這行java代碼:
String line = (new BufferedReader(new InputStreamReader(System.in))).readLine();
這個java代碼做了什么。 有沒有C / C ++相當於此?
System.in
是標准輸入。
InputStreamReader
允許您關聯從指定輸入讀取的流(在本例中為標准輸入),所以現在我們有了一個流。
BufferedReader
是一個“抽象”,可以幫助您使用流。 例如,它實現readLine
而不是逐個字符地讀取,直到找到'\\ n'來獲取整行。 它只是在這個進程后返回一個String。
所以這一行意味着:“從標准輸入讀取一行並將其存儲line
變量中”。
> What does this java code do
:
String line
是你的字符串對象
new BufferedReader().readLine()
是BufferedReader的實例,用於從字符輸入流中讀取文本; 和readline()
是它實現讀取直到換行符的方法。
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
從字符輸入流中讀取文本,緩沖字符,以便有效地讀取字符,數組和行。 可以指定緩沖區大小,或者可以使用默認大小。 對於大多數用途,默認值足夠大。 通常,由Reader構成的每個讀取請求都會導致相應的讀取請求由基礎字符或字節流構成。 因此,建議將BufferedReader包裝在任何read()操作可能代價高昂的Reader上,例如FileReaders和InputStreamReaders。
BufferedReader中的readLine#()
閱讀一行文字。 一條線被認為是由換行符('\\ n'),回車符('\\ r')或回車符中的任何一個終止,后面緊跟換行符。
InputStreamReader中
InputStreamReader是從字節流到字符流的橋接器:它使用指定的字符集讀取字節並將其解碼為字符。 它使用的字符集可以通過名稱指定,也可以明確指定,或者可以接受平台的默認字符集。 每次調用一個InputStreamReader的read()方法都可能導致從底層字節輸入流中讀取一個或多個字節。 為了能夠有效地將字節轉換為字符,可以從基礎流中提取比滿足當前讀取操作所需的更多字節。
系統
System類包含幾個有用的類字段和方法。 它無法實例化。
System類提供的功能包括標准輸入,標准輸出和錯誤輸出流; 訪問外部定義的“屬性”; 加載文件和庫的方法; 以及用於快速復制陣列的一部分的實用方法。
System.in
“標准”輸入流。 此流已打開並准備好提供輸入數據。 通常,該流對應於鍵盤輸入或由主機環境或用戶指定的另一輸入源。
代碼所做的只是簡單地從輸入流中讀取一行。 從模式的角度來看,這是一個裝飾者。 至於使用BufferedReader是為了提高IO性能。
InputStreamReader是從字節流到字符流的橋接器:它使用指定的字符集讀取字節並將其解碼為字符。 它使用的字符集可以通過名稱指定,也可以明確指定,或者可以接受平台的默認字符集。
每次調用一個InputStreamReader的read()方法都可能導致從底層字節輸入流中讀取一個或多個字節。 為了能夠有效地將字節轉換為字符,可以從基礎流中提取比滿足當前讀取操作所需的更多字節。
為了獲得最高效率,我們考慮在BufferedReader中包裝InputStreamReader。 例如:
BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.