循环使用InputStream截断数据

时间:2013-06-09 18:23:56

标签: java loops input io

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

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

以下是代码:

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

输出:

classpath
project
est.txt

现在,我知道这里发生了什么:我的read()循环中的while调用正在获取每一行的第一个字符,所以当该行传入循环时,该字符缺失。问题是,我无法弄清楚如何设置循环以防止这种情况。

我想我只需要一套新的眼睛。

4 个答案:

答案 0 :(得分:2)

不推荐使用readLine的{​​p> DataInputStream。您可以尝试使用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.

答案 1 :(得分:0)

使用一个BufferedReaderInputStreamReader,这是一个示例:

InputStream in=...;
BufferedReader br = new BufferedReader(new InputStreamReader(in));
while (br.ready()) {
    String line = br.readLine();
}

答案 2 :(得分:0)

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

while (dataInputStream.available()) {
  System.out.printf("%s", dataInputReader.read());
}

答案 3 :(得分:0)

String line;
while ((line = dataInputReader.readLine()) != null) {
    System.out.println(line);
 }