2014-10-08 80 views
1

我正在阅读一个二进制文件,我必须解析这个文件中的头文件。如何继续通过DataInputStream循环?

我有一个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循环下的位置和长度,它说,他们不能得到解决,或者开始第一线不是一个领域。

+0

什么数据类型是卡?另外,当读取的值为-1时,您应该使用无限循环并中断。 – 2014-10-08 12:44:42

+0

卡片是字符串,员工学生和管理员是枚举。我有其他代码来处理它(我已经改变了这一点隐私),我真的需要改变的是is.Position!= is.Length,所以我可以说,而文件没有完成继续 – mark602 2014-10-08 12:48:04

回答

1

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

目前也有一些问题,我可以用你的代码中看到:

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