Java 读取时出现 NullPointerException

标签 java bufferedreader

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

@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/

相关文章:

java - 从客户端发送对象到服务器

android - 从 Webservice 下载和查看 Android 应用程序中的 PDF

java - 用Java读取CSV文件并从读取的文件中提取某些数据

Java 读取/写入文件 - BufferedReader BufferedWriter

java - 无需解析器工具即可解析 XML 字符串

java - 从 ResultSet 获取 MYSQL 表名

java - 如何正确导出我的程序

java - 在构造函数中定义变量/字段类型,它是如何完成的?

Java 在 if 语句处终止,退出值 0

java - 优化 BufferedReader readLine() 操作