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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

IO

© 周一川 中级黑马   /  2013-3-31 19:51  /  1354 人查看  /  8 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 田磊阳 于 2013-4-4 09:35 编辑

FileInputStream和FileOutputStream,
d.使用BufferedInputStream和BufferedOutputStream

这样有什么区别, 都是一个可以拷贝文件的字节流

点评

如果仍有问题,请继续追问,如果问题已解决,请将分类改为已解决,谢谢  发表于 2013-4-2 20:11

评分

参与人数 1黑马币 +3 收起 理由
张熙韬 + 3

查看全部评分

8 个回复

倒序浏览
FileInputStream和FileOutputStream是字节流,字节流是读一个写一个或者读一个byte读一个byte,BufferedInputStream和BufferedOutPutStream是缓冲流,
它带有一个缓冲区,BufferedInputStream可以读取比FileInputStream更多的数据,以减少访问IO的次数,访问IO的次数越少,性能就越高,如果文件很大的话建议使用BufferedInputStream和BufferedOutPutStream,这样效率会比较高
回复 使用道具 举报
FileInputStream与BufferedInputStream区别:FileInputStream是字节流,BufferedInputStream是字节缓冲流,
使用BufferedInputStream读资源比FileInputStream读取资源的效率高(BufferedInputStream的read方法会读取尽可能多的字节),
且FileInputStream对象的read方法会出现阻塞;
回复 使用道具 举报
带Buffered是有默认缓冲区,不容易在读大文件时丢数据。而且被Buffered装饰之后,发现copy一个大图片比不带Buffered速度快。你可以自己试试。当然我们可以自定义一个缓冲区数组。将要读的数据放到自定义数组中。建议在以后的开发中,使用Buffered。这时我写的BufferedReader的底层代码,并加上注释,自己看看就知道了。其实Buffered底层就是封装一组数组。

import java.io.IOException;
import java.io.Reader;

public class MyBufferReader {
        private Reader r;
        char[] buf=new char[1024];
        int index=0;//代表的是char数组的角标
        int count=0;//代表的是char数组的长度
        public MyBufferReader(Reader r) {
                this.r=r;
        }
       
        public  int myRead() throws IOException{
                //当数组长度变成零时,再取目标的文字放到数组中
                if(count==0){
                        count=r.read(buf);
                        index=0;//每次取完,将角标重置为零
                }
                //当文本中文字取完,返回-1.
                if(count<0){
                        return -1;
                }
                        //长度每次减1
                        count--;
                        //所取数组的角标增一
                        index++;
               
                return buf[index-1];
        }
        public String myReadLine() throws IOException{
                StringBuilder sb=new StringBuilder();
               
                int ch=0;
               
                while((ch=myRead())!=-1){
                        //因为在windows中换行是\r\n
                        if(ch=='\r'){
                                continue;//跳过到下一个再返回字符串
                        }
                        if(ch=='\n'){
                                return sb.toString();//到达行的末尾,返回字符串
                        }
                        sb.append((char)ch);//添加每次读取到的字符
                }
                //这里是以防出现没有换行
                if(sb.length()!=0){
                        return sb.toString();
                }
               
                return null;
        }
        //自定义关闭流
        public void myClose() throws IOException{
                r.close();
        }
}

评分

参与人数 1技术分 +1 收起 理由
田磊阳 + 1

查看全部评分

回复 使用道具 举报
FileInputStream/FileOutputStream
这是一对继承于InputStream和OutputStream的类,用于本地文件读写(二进制格式读写并且是顺序读写,读和写要分别创建出不同的文件流对象)

BufferedInputStream和BufferedOutputStream
过滤流,需要使用已经存在的节点流来构造,提供带缓冲的读写,提高了读写的效率。BufferedInputStream派生自java.io.FilterInputStream,并不是InputStream

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

回复 使用道具 举报
使用BufferedInputStream可以提高效率;FileInputStream是字节流,BufferedInputStream是字节缓冲流。使用BufferedInputStream读取资源是读取存储在内存中的数据;使用BufferedInputStream比FileInputStream读取资源效率高。
回复 使用道具 举报
用BufferedInputStream和FileInputStream说明一下。它们都是InputStream的子类,对于FileInputStream它包装了关于文件的功能,方便了对于文件的处理。对于BufferedInputStream它提供了缓冲的功能,对于读取效率会更好。对于普通的文本文件,或者小的文件都可以用FileInputStream去读,如果是一些大的文件要读取的话,建议用BufferedInputStream。这样会使读取更加快速。
回复 使用道具 举报
这是我写的一些感受,你看看http://blog.csdn.net/wangdabin_1216/article/details/8749086
回复 使用道具 举报
如果问题未解决,请继续追问,如果没有问题了,请将帖子分类 改为“已解决”,谢谢
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马