SpotBugs-方法将忽略InputStream.read()的结果

时间:2019-02-20 19:52:29

标签: java spotbugs

我在调试代码时遇到了一些问题,我设法调试了所有错误,但有一个: 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);

如何解决此错误?

2 个答案:

答案 0 :(得分:0)

read()与缓冲区一起使用时,将返回读取的实际字节数(对于流的末尾为-1)。一次读取可能不会完全填充缓冲区(尽管小缓冲区会填充数据,因为数据是按块传输的),因此您需要确保(例如,使用while循环)已读取您打算使用的字节数。

答案 1 :(得分:0)

R。卡斯特罗给了您很好的解释,但是(显然)缺少的是您没有检查正在从文件中读取多少字节。该数字可以不同于缓冲区的大小。这就是Spotbug试图告诉您的。您的文件可以大于或小于缓冲区大小。您不处理文件长于缓冲区大小的情况。而且,您需要将循环更改为要读取的字节数,而不是buffer.length