黑马程序员技术交流社区

标题: io流 [打印本页]

作者: 权跃杰    时间: 2012-7-30 23:09
标题: io流
开发中是使用字节流好还是字符流好?能不能给仔细说说啊!
作者: 王广彬    时间: 2012-7-30 23:16
楼主,在所有的硬盘上保存文件或是进行传输的时候都是以字节的方式进行的,包括图片也是按字节完成的,而字符是只有在内存中才会形成的,所以使用字节的操作是最多的.
作者: 贾成龙    时间: 2012-7-30 23:22
其实不是讲使用哪个好,你要先要把字节流和字符流的概念弄清楚,根据具体情况来定用什么:
例如他们的用法:通过以下几点来判断对象的使用。
1,明确数据源,和 数据目的(数据汇)
      数据源:InputStream   Reader
     数据目的:OutputStream  Writer
2,明确数据的内容是否是纯文本。只要是纯文本数据,就使用字符流。
   数据源: 是: Reader。
   数据目的:是:Writer
    如果不是,就使用InputStream或者OutputStream

      如果数据不能明确,只有使用字节流。
   这样就可以将四个基类,进行确定,要使用哪一个。
   3,明确具体设备。
    数据源:键盘(System.in) ,内存(数组), 硬盘(File开头的流对象)。
    数据目的: 控制台(System.out),内存(数组),硬盘(File开头的流对象)。
   4,明确是否需要提高效率?
    是:使用带Buffer对象。
   5,是否需要一些特殊场景的操作,来完成数据的特殊处理。
   希望对你有帮助!
作者: 梁志仲    时间: 2012-7-30 23:22
根据毕老师教的方法来判断:

通过三个明确来完成。

1,明确源和目的。
        源:输入流。InputStream  Reader
        目的:输出流。OutputStream  Writer。
2,操作的数据是否是纯文本。
        是:字符流。
        不是:字节流。

3,当体系明确后,在明确要使用哪个具体的对象。
        通过设备来进行区分:
        源设备:内存,硬盘。键盘
        目的设备:内存,硬盘,控制台。

       
1,将一个文本文件中数据存储到另一个文件中。复制文件。
        源:因为是源,所以使用读取流。InputStream Reader
        是不是操作文本文件。
        是!这时就可以选择Reader
        这样体系就明确了。
        接下来明确要使用该体系中的哪个对象。
        明确设备:硬盘。上一个文件。
        Reader体系中可以操作文件的对象是 FileReader

        是否需要提高效率:是!。加入Reader体系中缓冲区 BufferedReader.


        FileReader fr = new FileReader("a.txt");
        BufferedReader bufr = new BufferedReader(fr);




        目的:OutputStream Writer
        是否是纯文本。
        是!Writer。
        设备:硬盘,一个文件。
        Writer体系中可以操作文件的对象FileWriter。
        是否需要提高效率:是!。加入Writer体系中缓冲区 BufferedWriter
       
        FileWriter fw = new FileWriter("b.txt");
        BufferedWriter bufw = new BufferedWriter(fw);
作者: 创出一片辉煌    时间: 2012-7-30 23:45
字节流与字符流的区别

字节流和字符流使用是非常相似的,那么除了操作代码的不同之外,还有哪些不同呢?

字节流在操作的时候本身是不会用到缓冲区(内存)的,是与文件本身直接操作的,而字符流在操作的时候是使用到缓冲区的

字节流在操作文件时,即使不关闭资源(close方法),文件也能输出,但是如果字符流不使用close方法的话,则不会输出任何内容,说明字符流用的是缓冲区,并且可以使用flush方法强制进行刷新缓冲区,这时才能在不close的情况下输出内容





那开发中究竟用字节流好还是用字符流好呢?

在所有的硬盘上保存文件或进行传输的时候都是以字节的方法进行的,包括图片也是按字节完成,而字符是只有在内存中才会形成的,所以使用字节的操作是最多的。





如果要java程序实现一个拷贝功能,应该选用字节流进行操作(可能拷贝的是图片),并且采用边读边写的方式(节省内存)。


作者: 余明辉    时间: 2012-7-31 00:20
我的理解是:
如果要操作文本数据,就一律字符流,因为能读一行嘛,方便!
其他一律字节流,因为其他所有数据在底层都是2进制的形式,所以用字节流一定不会出问题!




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