gpt4 book ai didi

java - Findbugs - 在读取输入流时处理空值检查和编码

转载 作者:行者123 更新时间:2023-11-30 08:53:08 25 4
gpt4 key购买 nike

我将 Findbugs 插件添加到我的项目中,突然开始出现以下错误:Dereference of the result of readLine() without nullcheck

我有以下代码逐行读取http请求:

InputStream input = clientSocket.getInputStream();

String line;
while (!(line = in.readLine()).equals("")) {
...
}

我尝试使用 nullcheck 将其重写为其他形式:

String line = "";
while (line != null) {
line = in.readLine();

if (line.equals("")) return;
}

但这会永远卡住(因此无法正确重写)。对于这样一个基本问题,我很抱歉,但我似乎无法正确回答...

另一个被标记为 bug 的是 Found reliance on default encoding in ..InputStream...

如何在 InputStreamReader 中指定编码?

最佳答案

固定循环看起来像这样:

InputStream input = clientSocket.getInputStream();

String line;
while (null != (line = in.readLine())) {
if("".equals(line)) break;
...
}

为什么?首先,远程端(客户端)关闭连接,readLine() 将返回null。这是外部检查要防止的。

如果客户端刚刚停止发送数据,

readLine() 根本不会返回。因此,只要客户端保持连接打开,您的“固定”循环就会挂起。

比较字符串文字时,我总是把它们放在第一位:

"".equals(line))

永远不会失败,即使 linenull。它通常也更具可读性,因为您经常想知道您在比较什么;您要检查的变量“信息量”较少。

关于java - Findbugs - 在读取输入流时处理空值检查和编码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29890313/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com