我正在读一本关于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(inCh.read(lengthBuf) != -1) {
Run Code Online (Sandbox Code Playgroud)
它的工作方式相同.是否会有一个实际或代码清晰的原因作者会像他一样写出来?
Dav*_*nan 10
很明显,你的循环版本在语义上是相同的.但是,这不是唯一要考虑的事情.
请注意,while循环中的第二个条件会突然出现循环.我怀疑这是推动作者使用的动机while (true).
通过写它,while (true)你提醒读者,内部必须有一个或多个断点while.读者将不得不在循环内部查看休息时间,并希望能够找到它们.
按照自己的方式编写,随意的读者可能会扫描代码的顶部并假设while条件是循环终止的唯一方法.
要考虑的另一点是对称性或平衡性.正如原作者所写,循环终止都是相同的形式.即从循环内打破.你的版本感觉不对称.在一个终点while测试,和另外的终止点,具有不同的性质,在循环内.
| 归档时间: |
|
| 查看次数: |
173 次 |
| 最近记录: |