帮忙看一段小程序,为什么注释掉这句就陷入死循环
importjava.io.*;importjava.nio.*;importjava.nio.channels.*;publicclassChannelCopy{privatestaticfinalintBSIZE=1024;publicstaticvoidmain(String[]args)throwsException{/*if(args.length!=2){System.out.println(" ");System.exit(1);}中文*/FileChannelin=newFileInputStream("ChannelCopy.java").getChannel(),out=newFileOutputStream("test.txt").getChannel();ByteBufferbuffer=ByteBuffer.allocate(BSIZE);while(in.read(buffer)!=-1){buffer.flip();//Prepareforwritingout.write(buffer);buffer.clear();//###Prepareforreading}}}///:~我设断点试过了,把带###号的这句(buffer.clear();)去掉,程序就会陷入死循环,in.read(buffer)永远也不是-1,但有###这句的话循环体中的语句只执行一次,下一次in.read(buffer)就是-1了,循环就退出了。这是为什么呀?到没到in这个通道的末尾和buffer是否被清空有什么关系?我觉得没关系呀。咱们平时执行read()时不时都会先clear()缓冲区吗?
bu.flush. 为什么要用clear. clear没用过. clear是清空? 还是写完再清空? 反正没用过.
答:bu.flush. 为什么要用clear. clear没用过. clear是清空? 还是写完再清空? 反正没用过.详情>>
答:google "java 缓冲池"详情>>
答:百度里搜张孝祥 非常好的视频教程详情>>