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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 徐帅 中级黑马   /  2012-10-16 10:19  /  1490 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

装饰类中BufferedReader和BufferedWriter都有readLint和newLine这样强大的功能
但BufferedInputStream和BufferedOutputStream 这两个类中并没有什么特殊的方法啊,
那在使用这两个类时,是否和使用OutputStream和InputStream一样,需要自定义一个
缓冲区,用于读写呢?如果这样读写,和使用一般的InputStream和OutputStream有什么区别呢?

例如:
                        BufferedInputStream bis = new BufferedInputStream(new FileInputStream("c:\\001.jpg"));
                        BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("c:\\002.jpg");
                        
                        byte[] buf = new byte[1024];
                        int len = 0;
                        while((len = bis.read(buf))!=-1){
                                
                                bos.write(buf,0,len);
                                
                        }

请大侠帮忙看看,谢谢了

评分

参与人数 1技术分 +1 收起 理由
韩军博 + 1

查看全部评分

4 个回复

倒序浏览

回帖奖励 +3

因为BufferedReade,BufferedWriter是对文本读写的,readLine读一行,newLine换行的操作用起来会很方便。
而BufferedInputStream,BufferedOutputStream 用在图片,MP3等一些不是文本的上面,只能通过字节传输,
定义缓冲区就是提高效率,抓一堆字节读,抓一堆字节写。
而InputStream,OutputStream抓一个字节读,抓一个字节写效率低。
回复 使用道具 举报
本帖最后由 徐帅 于 2012-10-16 16:11 编辑
严海荣 发表于 2012-10-16 10:52
因为BufferedReade,BufferedWriter是对文本读写的,readLine读一行,newLine换行的操作用起来会很方便。
...

你的意思我了解了,不过就是在使用的时候,是否还需要自定义一个缓冲区,使用read(buf,0,len),
还是直接使用read()方法,如果直接使用read方法,那应该是一次也读取了一个字节,只是将这些
字节存储到read内部封装的缓冲区中,如果这样的话,那read(buf,0,len)方法的用途就是,可以自定义
一个指定大小的缓冲区,按照指定大小的缓冲区来读取数据,不知道对read( ),和read(buf,0,len),这
两个方法,我这样理解是否准确。
回复 使用道具 举报
定义个byte[] buf缓冲区,用read(buf,0,len)方法,read()反正就是单个单个的读,read(buf,0,len)就是读数组中的一部分,就是0~len的那部分,len就是bis.read(buf)读到的一部分数据存到buf中。 和你的意思差不多。
回复 使用道具 举报
严海荣 发表于 2012-10-16 16:38
定义个byte[] buf缓冲区,用read(buf,0,len)方法,read()反正就是单个单个的读,read(buf,0,len)就是读数组 ...

现在好像明白了,其实底层的read()都是读取字节,也就是装饰类,内部定义 了一个缓冲区,
通过read()方法读取到缓冲区中,而我们在使用read方法的时候,自己定义的缓冲区,是为了
再次提高读写速度,一个read()是底层封装并自动调用的,而我们在读取文件时使用read和read(buf,0,len)
时,是自己从装饰类的缓冲区中读取数据,明白了,谢谢你啊
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马