《Thinking in JAVA》中的一段有bug的代码
在I/O-> New IO ->Buffer details 一节中,作者示例了下面一段代码
import java.nio.*;
import static net.mindview.util.Print.*;
public class UsingBuffers {
private static void symmetricScramble(CharBuffer buffer){
while(buffer.hasRemaining()) {
buffer.mark();
char c1 = buffer.get();
char c2 = buffer.get();
buffer.reset();
buffer.put(c2).put(c1);
}
}
public static void main(String[] args) {
char[] data = "UsingBuffers".toCharArray();
ByteBuffer bb = ByteBuffer.allocate(data.length * 2);
CharBuffer cb = bb.asCharBuffer();
cb.put(data);
print(cb.rewind());
symmetricScramble(cb);
print(cb.rewind());
symmetricScramble(cb);
print(cb.rewind());
}
}
该段代码中symmetricScramble方法有bug,作者使用的数组data的length为偶数12,若length为单数,那么在symmetricScramble方法的循环体中,在最后一次循环中的char c2 = buffer.get();会出现BufferUnderflowException,因为已经没有内容可以读取
------解决方案-------------------- 嘿嘿~ 顶你。。
------解决方案--------------------楼主看的蛮细致啊
俺都是当小说看的
------解决方案--------------------这本书真的好么?必须看?
------解决方案--------------------哇,看这么仔细,我的那本还没看一半看不下去了,顶你!↑
------解决方案--------------------还没看到这个章节啊
------解决方案--------------------一样 还没看到这呢
------解决方案--------------------看不出这段代码有什么用处?
------解决方案--------------------真好啊!!!!!!!!!!!!!!!!!!!!!
------解决方案-------------------- 书是人写的难免有错!
------解决方案--------------------没细看,当参考书用的
------解决方案--------------------牛人 不顶不行
------解决方案-------------------- 呵呵,大家都认为好书,我也买本来看下。顶顶顶。。。。。。。
------解决方案--------------------bytebuffer,charbuffer,rewind都不常见额,不过LZ还是很认真的
------解决方案--------------------
------解决方案--------------------大手笔的作品,从未怀疑过!
------解决方案--------------------
------解决方案--------------------