zoukankan      html  css  js  c++  java
  • InputStream/OutputStream/Reader/Writer

    InputStream/OutputStream

    InputStream/OutputStream(IO)流以 byte(字节)为最小单位,因此也成为字节流.例如:要从磁盘读入一个文件,包含6个字节,就相当于读入了6个字节的数据:
    ╔════════════╗
    ║ Memory ║
    ╚════════════╝

    │0x48
    │0x65
    │0x6c
    │0x6c
    │0x6f
    │0x21
    ╔═══════════╗
    ║ Hard Disk ║
    ╚═══════════╝
    这六个字节是按顺序读入的,所以是输入字节流.

    反过来,我们把6个字节从内存写入磁盘,就是输出字节流
    ╔════════════╗
    ║ Memory ║
    ╚════════════╝
    │0x21
    │0x6f
    │0x6c
    │0x6c
    │0x65
    │0x48

    ╔═══════════╗
    ║ Hard Disk ║
    ╚═══════════╝
    在java中,InputStream代表输入字节流,OutputStream 代表输出字节流,这是最基本的IO流.

    Reader/Writer

    如果我们需要读写的是 字符 ,并且字符不全是单字节表示的ASCII字符,那么,按照char来读写显然更方便,这种流称为字符流.

    Java提供了Reader和Writer表示字符流,字符流传输的最小数据单位是char.

    例如:我们把char[]数组 Hi你好 这4个字符用Writer字符流写入文件,并使用UTF-8编码,得到的最终文件是8个字节,英文字符H和i各占一个字节,中文字符 你好 各占三个字节:

    反过来,我们以Reader读取以UTF-8编码的这8个字节,会从Reader中得到 Hi你好这4个字符.

    因此,Reader和Writer本质是一个能自动编码解码的InputStream和OutputStream.

    使用Reader,数据源虽然是字节,但我们读入的数据都是char类型的字符,原因是Reader内部把读入的 byte 做了解码,转换成了char.使用InputStream,我们读入的数据和原始二进制一模一样,是byte[]数组,但是我们可以自己把二进制byte[]数组按照某种编码转换成字符串.究竟是使用Reader还是InputStream,要取决于具体的使用场景.如果数据源不是文本,就只能使用InputStream,如果数据源是文本,使用Reader更方便一些.Writer和OutputStream是类似的.

  • 相关阅读:
    iOS开发笔记--Layer 图层圆角、边框 、底纹其他常用操作
    tableView中deselectRowAtIndexPath的作用
    升级到XCode6后,iOS8里设置tableview的setSeparatorInset:UIEdgeInsetsZero不起作用的解决办法
    UITableView代理和数据源方法总结
    ios修改textField的placeholder的字体颜色、大小
    iOS-TextField知多少
    iOS开发SVN更新代码不报错却运行不了问题
    apache http server 局域网无法访问
    修改 apache http server 默认站点目录
    批处理 教程(转载)
  • 原文地址:https://www.cnblogs.com/liuzhidao/p/13748112.html
Copyright © 2011-2022 走看看