黑马程序员技术交流社区

标题: IO数组问题 [打印本页]

作者: 凝聚    时间: 2013-10-25 08:10
标题: IO数组问题
本帖最后由 凝聚 于 2013-10-26 14:38 编辑

fos=new FileOutputStream("me.jpg");
        fis=new FileInputStream("D:\\图片\\自己喜欢的\\042c16d783e50817df8766894e89fff0.jpg");
byte[]buf=new byte[1024];
        int len=0;
        while((len=fis.read(buf))!=-1)
        {
                fos.write(buf,0,len);
               
        }

类似这样的代码中的byte[]buf=new byte[1024];这样的数组到底什么时候适合用啊,具体讲一下它的功能


作者: 1961993790    时间: 2013-10-25 08:25
字符流读取数据有3种操作。

读取方法:int read()  读取单个字符;int read(char[] cbuf)  将字符读入数组,读取的字符数; abstract  int read(char[] cbuf, int off, int len)

分别简写为 1、不需要缓冲区  int ch =0; while ((ch=fis.read())!=-1){Sop((char)ch)}  fis.close();

2、用数组做缓冲区char [] buf=new char [1024];int len =0; while((len =fis.read(buf))!=-1){ Sop(new String(buf,0,len);}fis.close();

注:若文件里有abcdefg  7个字符,缓冲区长度为3,则若不用循环,read(buf)四次,并打印数组Sop(new String(buf),则结果为abc,def,gef,gef,其中len结果为3,3,1,-1

3、用BufferedReader: BufferedReader bufr=new BufferedReader(fr); String line=null;while((line=bufr.readLine())!=null){ Sop(line);} bufr.close();         

缓冲区的出现提高了数据的读写效率,要结合流才可使用(创建一个流对象和文件相关联),在流的基础上对流的功能进行增强;

缓冲原理是对象里面封装了数组。字符流缓冲区对应的类:BufferedWriter、BufferedReader.字节流缓冲区对应的类:BufferedInputStream、BufferedOutputStream.。

BufferedWriter 特有void newLine() 写入一个行分隔符;BufferedReader特有方法String readLine()读取一个文本行。只返回回车符之前的数据内容,不返回回车符;

代码中的byte[]buf=new byte[1024];实际上相当于缓冲流,提高了数据的读写效率,如果要读取的文件字节数很多,这时候建议使用:第二中方式,用数组做缓冲区
和第三种方式,用BufferedReader
希望对您有帮助!{:soso_e100:}




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2