簡體   English   中英

bufferedreader - 讀入stringbuffer而不是string

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM