繁体   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