FileInputStream的read方法:
API文档中这样写的:
read
public int read()
         throws IOException从此输入流中读取一个数据字节。如果没有输入可用,则此方法将阻塞。 指定者:
类 InputStream 中的 read
返回:
下一个数据字节;如果已到达文件末尾,则返回 -1一个字节一个字节的读,读出的是字节,返回值为什么是int呢?我不是很理解字节。

解决方案 »

  1.   

    返回的是你read到的字节数,而不是你read的是什么。read的内容放在buffer里面
      

  2.   


    这个问题你都能想到?呵呵~~~~。我认为没有必要花太多的精力在这样的问题上。人家规定了返回 int 那就是返回 int 。如果你希望是 byte ,转过来就是了。我想,之所以要返回 int 而不是 byte ,那是为了方便判断是否读到了文件末尾。试想,如果返回 byte ,你又该如何判断是否读到末尾了呢? 我曾经是这么告诉自己的,呵呵。没有考证,但自认为是很合理的解释。如果谁有更好的,分享下啊。呵呵
      

  3.   


    ... LZ 说的不是 read(byte[]) 方法吧?
      

  4.   

    其实我们读到的这个byte是个无符号的byte(是你读到的byte&0xff,这个会转换成按无符号byte转换成int型)。它是大于或等于0的。这个设计很好,因为文件结束,FileInputStream就给你一个-1。
      

  5.   

    读取的是二进制字节内容,其实对用的时字母的acII值,如下用例可以让你看到取到的到底时什!!
                    FileInputStream fin;
    try {
    fin = new FileInputStream("1.java");
    int c ;
        for(int i=1;i<=7&&(c=fin.read())!=-1;i++){
            System.out.println((char)c);
            System.out.println(c);
        }
        fin.close();
    } catch (FileNotFoundException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    } catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }
      

  6.   

    下一个数据字节;如果已到达文件末尾,则返回 -1下一个字节内容为8位,2的8次方是可以用整数表示的吧,所以可以返回int值的。