4

所以这是一个非常简单的问题,我只是没有看到一个简单的解决方案:

我正在尝试通过 InputStream 获取数据列表,循环直到到达流的末尾。在每次迭代中,我打印通过 InputStream 传递的下一行文本。我有它的工作,但有一个小问题:我截断每行的第一个字符。

这是代码:

while (dataInputStream.read() >= 0) {
    System.out.printf("%s\n", dataInputReader.readLine());
}

和输出:

classpath
project
est.txt

现在,我知道这里发生了什么:read()我的循环中的调用while获取每行的第一个字符,因此当该行被传递到循环中时,该字符丢失了。问题是,我不知道如何设置循环来防止这种情况。

我想我只需要用新的眼光来看待这个问题。

4

4 回答 4

5

readLineforDataInputStream已弃用。您可以尝试用一个包装它BufferedReader

try
{
    String line;
    BufferedReader bufferedReader = new BufferedReader( new InputStreamReader( dataInputStream ) );
    while( (line = bufferedReader.readLine()) != null )
    { 
        System.out.printf("%s\n", line);
    }  
} 
catch( IOException e )
{
    System.err.println( "Error: " + e );
}

另外,我不确定,由于这个规范,使用 available() 是个好主意:

* <p>Note that this method provides such a weak guarantee that it is not very useful in
* practice.
于 2013-06-09T18:42:35.620 回答
0

使用一个BufferedReaderand InputStreamReader,这里是一个例子:

InputStream in=...;
BufferedReader br = new BufferedReader(new InputStreamReader(in));
while (br.ready()) {
    String line = br.readLine();
}
于 2013-06-09T18:34:08.757 回答
0

dataInputStream.read()读取 InputStream 的第一个字符,与dataInputReader.readLine()读取完整的下一行相同。然后每个读取的字符或行都消失了。您可以使用dataInputStream.available()来检查 InputStream 是否有可用数据。那应该打印正确的输出:

while (dataInputStream.available()) {
  System.out.printf("%s", dataInputReader.read());
}
于 2013-06-09T18:41:10.900 回答
0
String line;
while ((line = dataInputReader.readLine()) != null) {
    System.out.println(line);
 }
于 2013-06-09T22:06:44.627 回答