从文本文件中读取值

时间:2011-06-07 06:38:05

标签: java filereader

请在下面的代码片段中解释编译器的行为。考虑文本文件包含以下文本TOBE,相应的字节值为84,79,66,69

for(int i=0;i<4;i++){
    byte inByte=(byte) buffInputFile.read();
    system.out.println(inByte);
}

当我运行此片段时,我得到以下输出 84 79 66 69

但是当我在for循环中进行调整并进入内部时。 buffInputFile.read()首先显示84,当分配给inByte时它是79.我得到的输出是

79,66,69,13(13是回车)。

2 个答案:

答案 0 :(得分:3)

我怀疑你有一个buffInputFile.read()的调试器监视表达式 - 它正在从流中读取值以显示它......但是当执行该方法时该值不可用< em>作为代码的一部分。您已从流中读取该字节,因此下一次调用read()将读取 next 字节,完全按照预期的那样。

一般来说,在调试器中执行带副作用的方法是一个非常糟糕的主意 - 这会引起这种混乱。如果您只是在赋值后在行上设置断点,则可以通过这种方式查看值。

简而言之:这根本不是编译器行为 - 这就是你使用调试器的方式。

答案 1 :(得分:1)

这不是一个错误,它是一个功能。 read方法返回流中的下一个字节,并将内部标记设置为下一个位置。

当您使用调试器检查buffInputFile.read()时,您可以有效地调用该方法,并且调试器会显示实际值。 但是标记已设置为下一个位置,因此inByte将从流中接收下一个值。