import java.io.*;
public class TestFinally {
 public static void main(String args[]){
 FileInputStream in=null;
 try{
 in =new FileInputStream("myfile.txt");
 int b;
 b=in.read();
 while(b!=-1){
 System.out.print((char)b);
b=in.read();
 }
  }
 catch(FileNotFoundException e){
 e.printStackTrace();
 }
 catch(IOException e){
 System.out.println(e.getMessage());
 }
这段代码的红色部分为什么不能少,一少运行,CPU就占用99%??求高手详解....

解决方案 »

  1.   

    红色代码b=in.read();表示从文件中读取数据,如果你不要这个,系统就在一直执行System.out.print((char)b);0.001毫秒都不歇,不停的输出,你说你的cpu占用能不高么?!
      

  2.   

    没有红色那句话,就剩:
    while(b!=-1) {
      System.out.print((char)b);
    }你不觉得这是个死循环么?CPU持续忙碌,当然负载很高。
      

  3.   

    对,少了 b=in.read() 就成了死循环了。
    while判断的条件 b != -1 一直为true
    while(true){
    }
    跳不出来了。
      

  4.   


    你没有看过read()函数的API说明吧?while(b!=-1){
      System.out.print((char)b);
      b=in.read(); // 读取下一个字节,直到流结束则返回 -1
    }
      

  5.   

    b=in.read();表示一次读取一个字符人,read方法如果返回-1表示读取到文件的末尾了,加上这句就是读取一个文件的全部内容并打印出来,但是去掉了死循环了,cpu占用率肯定高。
      

  6.   

    读的时候要放到循环体中读!!!然后自然就有判断啦  b=in.read();这条语句放while循环里 当文件读完后 b=-1; 这时候就跳出循环了啊!!
      

  7.   

    楼主需要先明白.read()方法就好了。
    //读取下一个字节,直到流结束则返回 -1
    所以,加入你的Mytest是:12345
    如果去掉in.read()
    那么只是在无限循环判断1,所以永远都是无限输出1
    而加上的话,
    第二次的b=2了,然后3,4,5,到5后面就返回-1了,循环停止。