GVKun编程网logo

readline()在Java中返回null(java readline返回null)

16

本篇文章给大家谈谈readline,以及在Java中返回null的知识点,同时本文还将给你拓展BufferedReader.ready()方法是否确保readLine()方法不返回NULL?、C++i

本篇文章给大家谈谈readline,以及在Java中返回null的知识点,同时本文还将给你拓展BufferedReader.ready()方法是否确保readLine()方法不返回NULL?、C ++ ifstream.getline()比Java的BufferedReader.readLine()慢得多?、getClassLoader()getResource()返回null、getClassLoader()。getResource()返回null等相关知识,希望对各位有所帮助,不要忘了收藏本站喔。

本文目录一览:

readline()在Java中返回null(java readline返回null)

readline()在Java中返回null(java readline返回null)

我正在尝试在Java程序中阅读标准输入。我期望一系列数字后跟换行符,例如:

6  9  1

当通过eclipse内置控制台提供输入时,一切都会顺利进行。但是,使用Windows命令行时,程序将输出:

Received ''6''.  Received ''null''.  Invalid input. Terminating. (This line is written by another function that does an Integer.parseint()).

我的代码是:

static String readLineFromStdIn(){  try{          java.io.BufferedReader stdin = new java.io.BufferedReader(new java.io.InputStreamReader(System.in));          String input = new String();          input = stdin.readLine();          System.out.println("Received ''" + input + "''");          return(input);      }catch (java.io.IOException e) {          System.out.println(e);       }      return "This should not have happened";  }

有什么线索吗?

答案1

小编典典

得到a null表示相关Reader对象已到达EOF(文件末尾),或者换句话说,它们无法再获得任何标准输入。现在,您的代码明显的问题是:

  1. 的每个方法调用readLineFromStdIn()都会创建一个 新的 BufferedReader
  2. 每个这样的BufferedReader都将彼此“竞争”以获得相同的共享输入System.in
  3. 而且这些BufferedReader对象都没有被正确关闭,因此您的程序每次调用都会泄漏I / O资源readLineFromStdIn()

解决方案是对的每次调用使用 单个 共享库。BufferedReader``readLineFromStdIn()

BufferedReader.ready()方法是否确保readLine()方法不返回NULL?

BufferedReader.ready()方法是否确保readLine()方法不返回NULL?

我有这样的代码来使用读取文本文件BufferedReader

BufferedReader reader=null;
    try {
        reader = new BufferedReader(new FileReader("file1.txt"));

        while (reader.ready()) {
            final String line = reader.readLine();
            System.out.println("<"+line+">");
        } catch (..)
    {
        ...
    }

它可以正常工作,但是Findbugs报告警告:

NP_DEREFERENCE_OF_READLINE_VALUE:取消引用调用readLine()的结果,而不检查结果是否为null。如果没有更多的文本行要读取,则readLine()将返回null,并取消引用将生成一个null指针异常。

当我更改FileReader为时StringReader,即

BufferedReader reader=null;
    try {
        reader = new BufferedReader(new StringReader("ABCD"));

        while (reader.ready()) {
            final String line = reader.readLine();
            System.out.println("<"+line+">");
        } catch (..)
    {
        ...
    }

readLine方法返回null而该ready方法始终返回true-实际上这是一个无限循环。

这似乎即使返回readLine也可能返回。但是为什么行为对于不同的s会有所不同?null``ready``true``Reader

更新:

我确实知道读取文本文件的正常方法(就像Peter和Ali所说明的那样)。但是我从同事那里读了这段代码,意识到我不知道这种ready方法。然后,我阅读了JavaDoc,但听不懂block。然后我做了一个测试,并发布了这个问题。因此,提出此问题的更好方法可能是:

输入什么时候会阻塞?如何使用该ready方法(或为什么不使用它)?为什么这2
Readers(FileReaderStringReader)在ready方法上表现不同?

C ++ ifstream.getline()比Java的BufferedReader.readLine()慢得多?

C ++ ifstream.getline()比Java的BufferedReader.readLine()慢得多?

我正在重写我的一个Android应用程序以利用NDK,并且它每次要做的第一件事之一是打开一个1.5MB的文本文件(大约15万行),并将每一行放入数据中结构体。当我使用Java的BufferedReader.readLine()进行此操作时,从SD卡读取文件大约需要2.5秒。这是我用于此的代码:

try {
    BufferedReader br = new BufferedReader(new FileReader("/sdcard/testfile.txt"));
    String thisLine;
    while ((thisLine = br.readLine()) != null) {
        Log.d(TAG,thisLine);
    }
} catch (IOException e) {
    //Log error
}

将C 与ifstream一起使用需要更长的时间…对于同一文件大约需要3分钟。这是我在C 中使用的代码:

char buffer[256];
ifstream ifs;
ifs.open("/sdcard/testfile.txt",ifstream::in);
if (ifs.is_open()) {
    while (!ifs.eof()) {
        ifs.getline (buffer,100);
        LOGD(buffer);
    }
}

我对C
相当生疏,但是对于增加的读取时间却无法想到任何合理的解释。有一阵子我以为可能是LOGD函数,但是我尝试将其全部删除,而读取时间并没有真正帮助。有人对这个问题可能有什么想法吗?有没有更快的方法在C
中逐行读取文件?谢谢。

getClassLoader()getResource()返回null

getClassLoader()getResource()返回null

我有这个测试应用程序:

import java.applet.*;
import java.awt.*;
import java.net.URL;
public class Test extends Applet
{

    public void init()
    {
        URL some=Test.class.getClass().getClassLoader().getResource("/assets/pacman.png");
        System.out.println(some.toString());
        System.out.println(some.getFile());
        System.out.println(some.getPath());

    }
}

当我从Eclipse运行它时,出现错误:

java.lang.NullPointerException
    at Test.init(Test.java:9)
    at sun.applet.AppletPanel.run(Unknown Source)
    at java.lang.Thread.run(Unknown Source)

类路径(来自.CLASSPATH文件)

<classpathentry kind="src" path="src"/>

在我的c:\ project \ src文件夹中,我只有Test.java文件和包含pacman.png的’assets’目录。

我在做什么错以及如何解决?

getClassLoader()。getResource()返回null

getClassLoader()。getResource()返回null

我有这个测试应用程序:

import java.applet.*;import java.awt.*;import java.net.URL;public class Test extends Applet{    public void init()    {        URL some=Test.class.getClass().getClassLoader().getResource("/assets/pacman.png");        System.out.println(some.toString());        System.out.println(some.getFile());        System.out.println(some.getPath());    }}

当我从Eclipse运行它时,出现错误:

java.lang.NullPointerException    at Test.init(Test.java:9)    at sun.applet.AppletPanel.run(Unknown Source)    at java.lang.Thread.run(Unknown Source)

类路径(来自.CLASSPATH文件)

<classpathentry kind="src" path="src"/>

在我的c:\ project \ src文件夹中,我只有Test.java文件和包含pacman.png的’assets’目录。

我在做什么错以及如何解决?

答案1

小编典典

我会这样:

final InputStream stream;stream = Test.class.getResourceAsStream("assets/pacman.png");System.out.println("Stream = " + stream);

“ /assets/pacman.png”是绝对位置,而“ assets / pacman.png”是相对位置。

我们今天的关于readline在Java中返回null的分享已经告一段落,感谢您的关注,如果您想了解更多关于BufferedReader.ready()方法是否确保readLine()方法不返回NULL?、C ++ ifstream.getline()比Java的BufferedReader.readLine()慢得多?、getClassLoader()getResource()返回null、getClassLoader()。getResource()返回null的相关信息,请在本站查询。

本文标签: