gpt4 book ai didi

Java 读取时出现 NullPointerException

转载 作者:行者123 更新时间:2023-12-01 07:26:12 25 4
gpt4 key购买 nike

我在从套接字读取数据时遇到问题,我仅在值不为空时读取,但它不起作用。

@Override
public void run() {
System.out.println("Reading from socket");
while(true){
try {
if(!(br.readLine().equals(null)))read += br.readLine();
} catch (IOException e) {
System.out.println("error " + e);
}
}
}

这里有错误:

Exception in thread "Thread-4" java.lang.NullPointerException at connection.CreateConnection.run(CreateConnection.java:61) at java.lang.Thread.run(Unknown Source)

最佳答案

如果 br.readLine() 返回 null,则对其调用 .equals(null) 将引发异常 - 它不会返回 true。您只想将引用身份与null进行比较。

调用 .equals(null) 永远没有用,除非您正在测试您的 equals 实现是否正常工作:)

此外,您将通过在每次循环迭代中调用 readLine() 两次来跳过每隔一行。

你想要这样的东西:

String line;
if ((line = br.readLine()) != null) {
read += line;
}

...除了由于重复的字符串连接而速度会非常慢。几乎可以肯定,您应该使用 StringBuilder 来代替。

此外,在捕获 IOException 的循环中执行所有这些操作似乎会引发灾难 - 如果 a 调用失败,它很可能会保留永远失败,因此你的程序基本上卡在一个紧密的循环中。当您遇到异常时,您几乎肯定应该停止,而不是继续前进。例如:

try {
String line;
while ((line = reader.readLine()) != null) {
read += line; // Or builder.append(line);
}
} catch (IOException e) {
// Whatever you want to do
}

最后,考虑水平和垂直空白的值,以及即使在单语句 if 语句等中使用大括号的好处。 if(!(br .readLine().equals(null)))read += br.readLine(); 是紧凑的,但牺牲了可读性。

关于Java 读取时出现 NullPointerException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24308794/

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