Java 为什么有人会这样构造一个while循环?

Java 为什么有人会这样构造一个while循环?,java,Java,我正在读一本关于Java的书,我们正在从一个频道读一本关于ByteBuffer的书。我发现作者构建while循环的方式很奇怪: try (FileChannel inCh = (FileChannel) Files.newByteChannel(file)) { ByteBuffer lengthBuf = ByteBuffer.allocate(8); int strLength = 0; ByteBuffer[] bu

我正在读一本关于Java的书,我们正在从一个频道读一本关于ByteBuffer的书。我发现作者构建while循环的方式很奇怪:

try (FileChannel inCh = (FileChannel) Files.newByteChannel(file)) { ByteBuffer lengthBuf = ByteBuffer.allocate(8); int strLength = 0; ByteBuffer[] buffers = { null, ByteBuffer.allocate(8) }; while(true) { if(inCh.read(lengthBuf) == -1) break; lengthBuf.flip(); strLength = (int)lengthBuf.getDouble(); buffers[0] = ByteBuffer.allocate(2*strLength); if(inCh.read(buffers) == -1) { System.err.println("EOF found reading ht eprime string."); break; } System.out.printf("String length: %3s String: %-12s Binary Value: %3d%n", strLength, ((ByteBuffer) (buffers[0].flip())).asCharBuffer().toString(), ((ByteBuffer)buffers[1].flip()).getLong()); lengthBuf.clear(); buffers[1].clear(); } System.out.println("\nEOF reached."); } catch (IOException e) {
它的工作原理是一样的。是否有一个实用的或代码清晰的原因,作者会像他那样编写它?

很明显,您的循环版本在语义上是相同的。然而,这并不是唯一要考虑的问题。 请注意,在
while
循环的下一步,还有第二个条件中断了循环。我怀疑这就是促使作者使用
而(true)
的原因

通过将其写成
while(true)
可以提醒读者
while
中必须有一个或多个断点。读者将不得不在循环中寻找中断,并有望找到两者

按照您的方式编写,偶然的读者可能会扫描代码的顶部,并假设
while
条件是循环终止的唯一方式


另一点需要考虑的是对称性或平衡性。正如原作者所写,循环终止都是相同的形式。即从循环内部中断。你的版本感觉不对称。
while
测试中的一个终止点,以及循环内另一个性质不同的终止点。

作者有两个退出点,其中一个在退出循环前打印出错误。在这种情况下,只会使代码更加冗长。当然,它可以用多种不同的方式书写。

这可能只是他们个人的喜好。如果你能证明你的改变是以同样的方式进行的,那么如果你愿意的话就使用它。一个评论不会杀死那个家伙的!:)
while(inCh.read(lengthBuf) != -1) {