• 字符(Character)流与字节(Byte)流


    先说说区分:

    字节流按字节读写,字符流按字符读写。字节流属于全能流,可以读取任意形式的二进制流。字符流只能读取字符文本此类。

    比较好区分的方法:

    以Stream结尾的相关流类都是字节流,以reader、writer结尾的都是字符流。字符流使用缓冲区作为中介帮助读写流文件。好处显而易见,多了一个缓冲区。不够好的地方就是不显示flush、close的话可能导致本次操作白给。

    fileOutputStream.write(new String("hello dabai").getBytes());
    

      如上字节流即便不手动close 内容也能写入。

    fileWriter.write("hello dabai");
    

      上述字符流如果不手动flush的话那就白给了。

    一般情况下,可以认为字节流更好,因为用的比较多,使用场景也更常见。

    流的分类:

    InputStream是所有字节输入流的祖先,OutputStream是所有字节输出流的祖先,都是抽象类,都实现了closeable接口,其中OutputStream还实现了Flushable接口。

    Reader是所有读入字符串输入流的祖先,Writer是所有写出字符串输出流的祖先,两类中都有char类型的数组作为缓冲,Reader实现了 Readable, Closeable 两接口,Writer实现了Appendable, Closeable, Flushable接口。同时这两个抽象类属性都包含一个属性

    protected Object lock;
    

      该属性在构造函数中指向当前类this,在Writer中write方法使用synchronized加了锁

     在Reader中则是提供了一个抽象方法交给子类实现

     

    InputStream、OutputStream都用于处理二进制数据,即处理字节。但实际上处理字符的情况也不少,所以有了字符流,它是按照jvm的encode来处理的,进行字符集的转化。二者可以通过InputStreamReader和OutputStreamWriter关联,这两个类分别继承自Reader、Writer。构造函数都需要一个字节流对象,InputStreamReader类中包含一个属性StreamDecoder,OutputStreamWriter类中包含一个属性StreamEncoder,这类属性也是实际完成read、write、close以及flush的对象。这类属性同样属于Reader、Writer的子类,但是他们对Stream进行对应的字符编码并进行字符形式的输入输出。

  • 相关阅读:
    在ubuntu下递归追索一个包的所有必要依赖项apt_dep.sh
    龙芯系统下,GTK与OPENGL共舞
    Linux应用程序自行开启Core Dump生成功能
    Daliy Algorithm -- day 102
    Daliy Algorithm -- day 101
    Daliy Algorithm -- day 100
    Daliy Algorithm -- day 99
    Daliy Algorithm -- day 98
    Daliy Algorithm -- day 97
    使用R语言进行简单的线性回归
  • 原文地址:https://www.cnblogs.com/notably/p/12980960.html
Copyright © 2020-2023  润新知