首页 > 解决方案 > SpotBugs - 方法忽略 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);

我该如何修复这个错误?

标签: javaspotbugs

解决方案


read()当与缓冲区一起使用时,返回实际读取的字节数(或 -1 表示流结束)。缓冲区可能没有被单次读取完全填满(尽管缓冲区很小,因为数据是按块传输的),所以你需要确保(即使用while循环)你已经读取了你想要的字节数至。


推荐阅读