簡體   English   中英

SpotBugs-方法將忽略InputStream.read()的結果

[英]SpotBugs - Method ignores results of InputStream.read()

我在調試代碼時遇到一些問題,我設法調試了所有錯誤,但有一個錯誤: Method ignores results of InputStream.read() ,調試器(SpotBugs)表示問題出在reader.read(buffer, 0, n)並建議我要檢查返回值,否則調用方將無法正確處理讀取的字節少於調用方請求的字節的情況。

    char[] buffer = new char[n];

    try{
        reader = new BufferedReader(new InputStreamReader(new FileInputStream(file), "UTF-8"));
        reader.read(buffer,0,n);
        reader.close(); 
    }
    catch(RuntimeException e) {
        throw e;
    }
    catch(Exception e) {
        System.out.println("Something went wrong");
    }
    for(int i=0;i<buffer.length;i++) {
        int swap = i % 2;
        if (Integer.toString(swap).equals(Integer.toString(1))) { 
            buffer[i] = ' ';
        }           
    }
    System.out.print(buffer);

如何解決此錯誤?

當與緩沖區一起使用時, read()返回讀取的實際字節數(對於流的末尾為-1)。 一次讀取可能不會完全填充緩沖區(盡管小緩沖區會填充數據,因為數據是按塊傳輸的),因此您需要確保(即使用while循環)已讀取了字節數意欲。

R. Castro給了您很好的解釋,但是(顯然)缺少的是您沒有檢查正在從文件讀取多少字節。 該數字可以不同於緩沖區的大小。 這就是Spotbug試圖告訴您的。 您的文件可以大於或小於緩沖區大小。 您不處理文件長於緩沖區大小的情況。 而且循環,您需要將其更改為讀取的任何字節數,而不是buffer.length

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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