[英]bufferedreader - read into stringbuffer and not string
我有以下代碼。 我想要做的是將BufferedReader中的每一行直接讀入StringBuffer以減少內存開銷。 一旦到達數據流的末尾,我希望它退出while循環。
StringBuffer line = new StringBuffer();
URL url = new URL("a url");
BufferedReader reader = new BufferedReader(new InputStreamReader(url.openStream()));
int count = 0;
while(line.append(reader.readLine()) != null){
System.out.println(line.toString());
line.delete(0,line.length());
}
它讀取流很好,但當我到達流的末尾時,它返回null並保持打印null而不退出循環。 任何
這個while(line.append(reader.readLine()) != null)
與while(line.append(reader.readLine()).toString() != null)
基本相同,這是不可能發生的。
您可能遇到的另一個問題是null
實際上被轉換為文本String
"null"
。 這就是它打印“null”的原因,這個值實際上並不為null
- 混淆了......
相反,嘗試像......
String text = null;
while((text = reader.readLine()) != null){
line.append(text)
System.out.println(line.toString());
line.delete(0,line.length());
}
更新
雖然我在這里,但我可能會建議你實際上不是在拯救自己。
readLine
將創建String
對象,您將其放入StringBuffer
。 你實際上並沒有保存任何內存,而是使進程復雜化。
如果你真的擔心在內存中創建大量的String
對象,那么請使用BufferedReader#read(char[])
。 將生成的字符數組附加到StringBuffer
。
此外,除非您需要對StringBuffer
同步訪問,否則請使用StringBuilder
,它會更快。
這非常有效。 你只需要捕獲NUllPointerException
while(line.append(reader.readLine().toString()) != null){
您可以嘗試使用此for循環:
for (String line; (line = reader.readLine()) != null;) {
System.out.println(line); // Or whatever
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.