A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 花园农场 中级黑马   /  2014-6-9 15:28  /  1559 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

class FileStream1
{
        public static void main(String[] args)throws IOException
        {
                readFile_2();
        }
        public static void readFile_2()throws IOException
        {
                FileInputStream fis=new FileInputStream("fos.txt");
                byte[] buf=new byte[1024];
                int len=0;
                while((len=fis.read(buf))!=-1)
                {
                        System.out.println(new String(buf,0,len));
                }
                fis.close();
        }
        public static void writeFile()throws IOException
        {
                FileOutputStream fos=new FileOutputStream("fos.txt");
                fos.write("abcde".getBytes());
                fos.close();
        }
}
这个程序中System.out.println(new String(buf,0,len));什么意思?

6 个回复

倒序浏览
将输入流中从第0位开始,最多 len 个数据字节读入 byte 数组。
回复 使用道具 举报
len是这个数组里面的有效字节数len不一定等于buf.length,再把数组中从零角标开始到len角标的字节数据转成字符串。
回复 使用道具 举报
看不懂表示。。。。
回复 使用道具 举报
呃呃呃的顶顶顶顶顶顶顶顶顶顶
回复 使用道具 举报
本帖最后由 空心祭 于 2014-6-21 20:59 编辑

String是java里面很强大的一个类 , 而且很多东西转化为字符串方便与操作  String s = new String(buf,0,len); 是通过String类的构造方法将一个buf这个数组中从0角标开始的len个元素转化为一个字符串,而  new String(buf,0,len) 是匿名对象的使用 对于仅用一次的对象来说 用匿名对象比较方便 而且匿名对象可以作为参数进行传递
回复 使用道具 举报
System.out.println(new String(buf,0,len));
单看这句代码的意思就是:
1.从buf[0]开始的len个元素所组成的的数组。
2.1所组成的数组所表示的编码(平台默认编码)所对应的字符串。并将这个字符串构造出来。
3.将这个字符串打印出来。

结合这个代码就是:
byte[] buf=new byte[1024];//构造一个1024个元素(字节)的byte数组,用以存放每次读出的数据
   int len=0;//定义一个变量用以保存每次读出的数据的字节数
    while((len=fis.read(buf))!=-1)//重复读取数据,直到读完,并把每次读到的数据存放在buf中(装满),读取的 //字节数保存在len中
    {
          System.out.println(new String(buf,0,len));//前几次读到的数据因为读满了整个数组所以都是(buf,0,1024)(也就是buf本身了),但是最后一次读取不一定能读满1024个字节,这是len所记录的字节数就起到它的作用了,buf,0,len就能准确的把有效字节找出来,而不会把上一轮循环读到的后1024-len位数据读到。所以这里用String类的这个构造方法而不用new String(buf)就是这个用意。
     }


回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马