zoukankan      html  css  js  c++  java
  • 字节流与字符流

    字节流包括输入流InputStream和输出流OutputStream。字符流包括输入流Reader 输出流Write

    InputStream相关类图如下,只列举了一级子类:

     InputStream提供了一些read方法供子类继承,用来读取字节。

    OutputStream相关类图如下:

     OutputStream提供了一些write方法供子类继承,用来写入字节。

    Reader相关类图如下:

    Reader提供了一些read方法供子类继承,用来读取字符。

    Writer相关类图如下:

    Writer提供了一些write方法供子类继承,用来写入字符。

    每个字符流子类几乎都会有一个相对应的字节流子类,两者功能一样,差别只是在于操作的是字节还是字符。例如CharArrayReader和 ByteArrayInputStream,两者都是在内存中建立数组缓冲区作为输入流,不同的只是前者数组用来存放字符,每次从数组中读取一个字符;后者则是针对字节。主要的:

    ByteArrayInputStream、CharArrayReader 为多线程的通信提供缓冲区操作功能。常用于读取网络中的定长数据包
    ByteArrayOutputStream、CharArrayWriter 为多线程的通信提供缓冲区操作功能。常用于接收足够长度的数据后进行一次性写入
    FileInputStream、FileReader 把文件写入内存作为输入流,实现对文件的读取操作
    FileOutputStream、FileWriter 把内存中的数据作为输出流写入文件,实现对文件的写操作
    StringReader 读取String的内容作为输入流
    StringWriter 将数据写入一个String
    SequenceInputStream 将多个输入流中的数据合并为一个数据流
    PipedInputStream、PipedReader、PipedOutputStream、PipedWriter 管道流,主要用于2个线程之间传递数据
    ObjectInputStream 读取对象数据作为输入流,对象中的 transient 和 static 类型的成员变量不会被读取或写入
    ObjectOutputStream 将数据写入对象
    FilterInputStream、FilterOutputStream、FilterReader、FilterWriter 过滤流通常源和目标是其他的输入输出流,大家可以看到有众多的子类,各有用途,就不一一介绍了

    字符流和字节流的区别:

    字节流就是按照byte单位来读取,可以用来读取其他格式的文件

    字符流是在字节流的基础上实现的,用来读取文本文件,一个字符一个字符的读取

    如果字节流是一滴水一滴水的转移,那么字符流是用勺子一勺一勺水的转移,速度明显加快了

    当然使用缓冲Buffer以后,就是一桶一桶水的转移了

    一个字节占8位,java采用unicode编码,占两个字节,即16位,也就是java一个字符是2byte,16位,

    那么在文本copy的时候,用字节流就是一byte-byte的copy,字符流就是一个字符一个字符的copy

  • 相关阅读:
    泛型
    Java反射及注解
    Java之线程与进程
    线程池
    HashMap、ConcurrentHashMap解析
    基于Opentracing+Jaeger全链路灰度调用链(转载)
    SpringBoot 开发案例之参数传递的正确姿势
    以np.concatenate为主题,谈谈numpy数组按维度合并的问题
    为什么阿里巴巴Java开发手册中强制要求整型包装类对象值用 equals 方法比较?
    [C++面试题]之字符串(转)
  • 原文地址:https://www.cnblogs.com/chinaifae/p/10328845.html
Copyright © 2011-2022 走看看