gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-01 21:34:20 25 4
gpt4 key购买 nike

我正在读一本关于 Java 的书,我们正在从一个 channel 读入一个 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) {

I tried it like this:

while(inCh.read(lengthBuf) != -1) {

它的工作原理是一样的。作者会像他那样写它是否有实际或代码清晰的原因?

最佳答案

很明显,您的循环版本在语义上是相同的。然而,这并不是唯一需要考虑的事情。

请注意,在 while 循环的下方,还有一个跳出循环的条件。我怀疑这就是促使作者使用 while (true) 的原因。

通过将其写成while (true),您可以提醒读者在while 中必须有一个或多个中断。读者将不得不在循环内部寻找中断,并希望能同时找到它们。

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

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

关于java - 为什么有人会像这样构造一个 while 循环?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14845223/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com