循环输入流截断数据

idi*_*ast 4 java io loops input

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

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

这是代码:

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

和输出:

classpath
project
est.txt
Run Code Online (Sandbox Code Playgroud)

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

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

Mic*_*hin 5

readLine因为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 );
}
Run Code Online (Sandbox Code Playgroud)

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

* <p>Note that this method provides such a weak guarantee that it is not very useful in
* practice.
Run Code Online (Sandbox Code Playgroud)