本篇文章给大家谈谈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)
- BufferedReader.ready()方法是否确保readLine()方法不返回NULL?
- C ++ ifstream.getline()比Java的BufferedReader.readLine()慢得多?
- getClassLoader()getResource()返回null
- getClassLoader()。getResource()返回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(文件末尾),或者换句话说,它们无法再获得任何标准输入。现在,您的代码明显的问题是:
- 的每个方法调用
readLineFromStdIn()
都会创建一个 新的BufferedReader
。 - 每个这样的
BufferedReader
都将彼此“竞争”以获得相同的共享输入System.in
- 而且这些
BufferedReader
对象都没有被正确关闭,因此您的程序每次调用都会泄漏I / O资源readLineFromStdIn()
。
解决方案是对的每次调用使用 单个 共享库。BufferedReader``readLineFromStdIn()
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
Reader
s(FileReader
和StringReader
)在ready
方法上表现不同?
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
我有这个测试应用程序:
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
我有这个测试应用程序:
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的相关信息,请在本站查询。
本文标签: