zoukankan      html  css  js  c++  java
  • 安卓io流再回顾

    之前学习io模糊模糊的,现在写下,方便自己理解,和以后再熟悉轻松些。(长期更新)

    以概念为主。

    在学习之前,我们需要了解字节与字符的概念。

    字符流以字符(16 位二进制)为单位进行处理,主要用于文本文件等 Unicode 数据。 

    字节流以字节(8 位二进制)为单位进行处理,主要用于读写图片、声音、视频等二进制 数据。 

    在这里可以这样简单理解,例如汉字,汉字就是字符,涉及到汉字文本的用字符。

    在大多数情况,字节流更为普遍的,因为多数操作对象都是建立在字节流基础上的。

    输入情况

    (字节流) byte数组

    FileInputStream()//创建文件输入流

    BufferedInputStream() //创建一个缓冲输入,读取大文件时,用上此方法效率更高。

    (字符流)String

    FileReader()//同上

    BufferedReader()//同上

    输出情况简要概括 input 换成output ,reader换成write(偷点懒)

    有时候,需要字符字节都用,而且还需在其间相互转化使用。

    InputStream提供的是字节流的读取,而非文本读取,用Reader读取出来的是char数组或者String ,使用InputStream读取出来的是byte数组。
    Reader类及其子类提供的字符流的读取char,inputStream及其子类提供字节流的读取byte,所以 FileReader类是将文件按字符流的方式读取,FileInputStream则按字节流的方式读取文件;InputStreamReader可以将读如stream转换成字符流方式,是reader和stream之间的桥梁。

    InputStreamReader(字节转字符)

    一般保存在本地的文本时,字符形式,读取放到展示时,需转化为字节形式,并执行后续操作。

    OutputStreamWriter (反之)

    一般地,将展示的保存到本地时,字节需转化成字符形式。

    在这里贴上我浏览的文章

    http://www.cnblogs.com/sjjsh/p/5269781.html

    最后就是困扰我比较久的问题,关于字节流字符流的使用场景。

    我大致整理了下

    需求 1:复制一个文本文件 
    1. 明确源和目的    源:   InputStream   Reader    目的: OutputStream  Writer 
    2. 是否是纯文本?是    源:   Reader    目的: Writer 
    3. 具体设备    源:   硬盘     File    目的: 硬盘     File    FileReader fr = new FileReader("a.txt");    FileWriter fw = new FileWriter("b.txt");
    4. 是否需要额外功能     需要高效,转换     BufferedReader br = new BufferedReader(new FileReader("a.txt"));     BufferedWriter bw = new BufferedWriter(new FileWriter("b.txt")); 
    

      

    需求 2:读取键盘录入信息,写入到一个文件中 

    1. 明确源和目的     源:   InputStream    Reader     目的: OutputStream   Writer 
    2. 是否是纯文本?是     源:   Reader     目的: Writer 
    3. 设备:     源:   键盘     System.in     目的: 硬盘     File     InputStream in = System.in;     FileWriter fw = new FileWriter("b.txt");     将读取的字节数据转成字符串,再由字符流操作——> 
    4. 是否需要额外功能?     需要转换:将字节流转成字符流,因为明确的源是 Reader,这样操作文本数据更便捷。所 以,要将已有的字节流转成字符流。使用字节——>字符的对象      InputStreamReader isr = InputStreamReader(System.in);     FileWriter fw = new FileWriter("b.txt");     需要高效:         BufferedReader br = new BufferedReader(new InputStreamReader(System.int));         BufferedWriter bw = new BufferedWriter(new FileWriter("b.txt")); 
    

      

    需求 3:将一个文本文件数据显示在控制台上 

    1. 明确源和目的         源:   InputStream   Reader         目的: OutputStream  Writer     
    2. 是否是纯文本?是         源:   Reader         目的: Writer     
    3. 明确具体设备:         源:  硬盘      File         目的:控制台    System.out         FileReader fr = new FileReader("a.txt");         OutputStream os = new OutputStream(System.out); //PrintStream     
    4. 需要额外功能:         需要转换         FileReader fr = new FileReader("a.txt");         OutputStreamWriter osw = new OutputStreamWriter(System.out);         需要高效         BufferedReader br = new BufferedReader(new FileReader("a.txt"));         BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out)): 
    

    还有诸多没说到,今后会补充,长期更新。  

  • 相关阅读:
    PAT1092:To Buy or Not to Buy
    PAT1027:Colors In Mars
    PAT1099:Build A Binary Search Tree
    PAT1064: Compelte Binary Search Tree
    PAT1008:Elevator
    TP5整合 WorkerMan 以及 GatewayWorker
    ThinkPHP5通过composer安装Workerman安装失败问题
    浏览器控制台
    webpack线上和线下模式
    PHP读取文件夹目录,按时间排序,大小排序,名字排序
  • 原文地址:https://www.cnblogs.com/fsbr/p/6885143.html
Copyright © 2011-2022 走看看