日期:2014-05-20  浏览次数:20639 次

《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还是很认真的
------解决方案--------------------
探讨
楼主看的蛮细致啊
俺都是当小说看的

------解决方案--------------------
大手笔的作品,从未怀疑过!
------解决方案--------------------
探讨
楼主看的蛮细致啊
俺都是当小说看的

------解决方案--------------------
探讨
引用:
楼主看的蛮细致啊
俺都是当小说看的


俺都是当情书看呢