InputStream fins = new FileInputStream(fromPath);
    OutputStream fouts = new FileOutputStream(toPath);
    byte[] buf = new byte[1024];
    int i = 0;
    while ((i = fins.read(buf)) != -1) {
        fouts.write(buf, 0, i);
    }
    fins.close();
    fouts.close();
定义了一个byte数组,长度为1024,((i = fins.read(buf))这里是什么意思,Api上说是 int read(byte[] b) 
          从此输入流中将最多 b.length 个字节的数据读入一个 byte 数组中:是不是说我从一个文件读内容然后把他们转换成数字,然后i呀,但是int read(byte[] b)这里返回的是int又是怎么回事呢,然后fouts.write(buf, 0, i);这里的"i"在api说,是长度,怎么回事呀,要是我换成FileReader((i = fins.read(buf)) != -1)这里的写法还一样么,还有对于read()不带参数的情形,api说返回的是一个0-256的数,那我要文件里的书的字符对应的数值大于256怎么办呀,求解求解,希望各位大侠详细解答一下,小弟不胜感激。

解决方案 »

  1.   

    int read(byte[] b)这里返回的int 是实际读入的字节个数
    如果流中剩下的字节个数大于b.length,那么就是b.length,否则可能小于b.length,如果返回的int是-1,则表示流中没有可读字节了。
    read()如果不带参数,则只读一个字节,一个字节只有8位当然不可能大于256.
    同样的道理,文件里如果保存了一个大于256的整数,它一定不可能只占一个字节。如果逐个字节读入它,那么你需要把读入的字节移位组合以还原这个整数。