【问题标题】:How to continue looping through DataInputStream?如何继续循环通过 DataInputStream?
【发布时间】:2014-10-08 12:42:18
【问题描述】:

我正在读取一个二进制文件,我必须解析这个文件中的标题。

我设置了DataInputStream,我需要让它继续循环遍历文件直到结束。我是 Java 新手,所以不确定如何从我的 C# 经验中继承这一点。目前我有以下代码:

while (is.position != is.length) {                              
    if ( card == Staff) {
        System.out.print(card);
    } else if ( card == Student ) {
        System.out.print(card);
    } else if (card == Admin) {
        System.out.print(card);
    } else {
        System.out.print("Incorrect");
    }
}

is 是我创建的输入流,我唯一的错误是在第一行中 while 循环在 position 和 length 下开始,它表示它们无法解析或不是字段。

【问题讨论】:

  • 卡片是什么数据类型?此外,您可能应该使用无限循环并在读取的值为 -1 时中断。
  • card 是一个字符串,staff student 和 admin 是枚举。我有其他代码来处理它(我已经改变了一点隐私),我真正需要改变的是is.Position!= is.Length,所以我可以在文件未完成时说继续

标签: java while-loop datainputstream


【解决方案1】:

查看the docs 看起来DataInputStream 没有位置字段。您可以使用其他方法之一来检查是否有更多可用数据,但从您的代码示例中不清楚您要做什么。

目前我可以看到您的代码存在许多问题:

  1. 如果cardStaffStudentAdmin 的类型为String,则需要使用equals(String s) 方法比较它们,而不是== 引用相等(即@ 987654330@ 而不是 card == Staff)
  2. 您似乎没有在循环中进行迭代。如果你不做任何事情来改变is.position 的值(我知道这实际上并不存在,但假设是......)那么如果你可以进入循环,你将永远不会离开它。
  3. 您不要更改card 的值。如果您确实进行了固定次数的迭代,那么您只会一遍又一遍地打印相同的输出,这可能不是您想要的。

【讨论】:

    猜你喜欢
    • 2022-01-18
    • 1970-01-01
    • 2023-03-12
    • 2020-05-25
    • 1970-01-01
    • 1970-01-01
    • 2021-07-26
    • 2014-09-06
    • 2011-08-19
    相关资源
    最近更新 更多