java - 循环遍历 InputStream 截断数据

标签 java loops input io

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

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

代码如下:

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

输出:

classpath
project
est.txt

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

我想我只是需要对此有新的看法。

最佳答案

DataInputStream

readLine 已弃用。您可以尝试用 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.

关于java - 循环遍历 InputStream 截断数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17012764/

相关文章:

reactjs - React 文件输入只工作一次

java - 从xml解析android资源

java - 使用不同的 @before 设置运行 2 套 junit 测试

对具有相同根的变量重复计算

java - 我如何循环我的整个程序?

java - 通过java代码记录用户选择并更改textview字符串

java - 如何等待文本字段中的输入?

Java Web 开发环境以最小化构建-部署-测试周期时间?

java - 使用迭代器迭代列表并比较连续元素

Angular2 - 不能动态更改输入类型