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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© jian叫兽 中级黑马   /  2014-12-27 11:15  /  1128 人查看  /  12 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

为什么字节流不需刷新(没用缓冲器)就能录入数据,而字符流要刷新?

12 个回复

倒序浏览
跟方法有关
回复 使用道具 举报
跟方法有关确实
回复 使用道具 举报

可否详解?
回复 使用道具 举报


请详解
回复 使用道具 举报

你必须明确一个概念,缓刷新的概念是针对于内存缓冲的,就是说只有在涉及缓冲区的操作时才会 用到刷新,而在java中

字节流在操作时不会用到缓冲区(内存),是直接对文件本身进行操作的。而字符流在操作时使用了缓冲区,通过缓冲区再操作文件。


         
回复 使用道具 举报
忆墨 中级黑马 2014-12-27 12:34:17
7#
忆墨 发表于 2014-12-27 12:27
你必须明确一个概念,缓刷新的概念是针对于内存缓冲的,就是说只有在涉及缓冲区的操作时才会 用到刷新, ...

另外说一点,你就明白了,为什么我们在java中用的大多IO操作都是选用字节流
一方面是因为,大部分的文件(音频,视频都是采用字节存储的)
另一方面:字节的操作时不通过内存缓冲区的(不像字符一样要先缓存到内存中,再到内存中对数据操作,这样使得CPU频繁的访问内存, 会导致程序运行的速率),所以字节操作的效率是要高于字符操作的 。
所以,说了这么多,明白吗?
回复 使用道具 举报
jacoblx 中级黑马 2014-12-27 13:17:14
8#
忆墨 发表于 2014-12-27 12:34
另外说一点,你就明白了,为什么我们在java中用的大多IO操作都是选用字节流
一方面是因为,大部分的文件 ...

我觉得使用缓冲区才能提高效率吧,内存的速度比外存快多了呀。复制一个文件不用缓冲区(就是读一个字节,写一个字节)能慢死,而使用缓冲区就会快很多,比如使用BufferedReader或者自己定义数组,你可以试试。
回复 使用道具 举报
寻觅 中级黑马 2014-12-27 13:26:22
9#
有没有人能给个最终的无可厚非的答案,我也想知道
回复 使用道具 举报
jacoblx 发表于 2014-12-27 13:17
我觉得使用缓冲区才能提高效率吧,内存的速度比外存快多了呀。复制一个文件不用缓冲区(就是读一个字节, ...

这里说的缓冲区有两个层面吧?
第一个:相对字节流而言,字符流有缓冲区的技术;
第二个:字符流的BufferedReader技术;

效率对比:
第一个情况中,字符流使用了缓冲技术,所以比字节流效率低;
第二个情况中,使用了BufferedReader技术,可以提高了字符流操作的效率;

总结:应该从两个层面来讲
1、相对于字节流而言,字符流效率稍低,因为用了缓冲区,需要不断的访问内存中的什么编码表;
2、BufferedReader技术是在字符流的基础上,读完多个字符,再同时写多个字符,减少对硬盘(或其他输入输出目的)的读写操作,效率上就提高了。


以上,不到之处,请指正!
回复 使用道具 举报
字节流在操作的时候本身是不会用到缓冲区(内存)的,是与文件本身直接操作的,而字符流在操作的时候是使用到缓冲区的 字节流在操作文件时,即使不关闭资源(close方法),文件也能输出,但是如果字符流不使用close方法的话,则不会输出任何内容,说明字符流用的是缓冲区,并且可以使用flush方法强制进行刷新缓冲区,这时才能在不close的情况下输出内容。
回复 使用道具 举报
Gyx 中级黑马 2014-12-27 15:05:58
12#
字符流两个基类:
        Reader读
        Writer写
        FileReader读文件
        FileWriter写文件
用FileWriter文件创建的文件,没有就创建,有的话被覆盖!
文件的续写后面加上true
用FileReader与硬盘上的文件关联。用read读取。

缓冲区:
        BufferedReader读缓冲区
        BufferedWeiter写缓冲区
它的出现是为了提高流的操作效率而出现的。
所以在创建缓冲区之前,必须要先有流对象。
缓冲区提供的方法:newLine()换行符方法。
字节流:
        InputStream读取流
        OutputStream写入流
        BuffereInputStream
        BuffereOutputStream
字节流写入数据:fos.write("ajdhas".getBytes());
available()获取文件里面长度大小
在数据不是太大的情况下可以使用
        byte[] buf=new byte[fis.available()];
        fis.read(buf);
        System.out.println(new String(buf));
数据过大可以使用:
        byte[] buf=new byte[1024];
        int ch=0;
        while((ch=fis.read(buf))!=-1)
        {
                System.out.println(new String(buf,0,ch));
        }
回复 使用道具 举报
Gyx 中级黑马 2014-12-27 15:07:16
13#
希望能够帮到你!加油!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马