• java学习之IO流(学习之旅,一)


    个人在学习IO流的时候看到如下所示java 流类图结构的时候,我的感想是,这么多··处于蒙的状态。

    Java流类图结构

    这么多,没有分类不好学,那我们就慢慢一口一口的吃,这样每天学习一点就好了,其实很多类并不是常用的。

    缕清思路很重要的,那么我转一篇百度的文档,写的思路很清晰。

    https://jingyan.baidu.com/article/ca00d56c6b4397e99febcf70.html

    第一步,首先,明确IO流中有两个主要的体系,即字节输入流(InputStream)、输出流(OutputStream)和字符输入流(Reader)、输出流(Writer)。其次,明确数据的来源和数据将要到达的目的地

    为啥要有字节流和字符流呢?多麻烦?

    自然是有原因的:字节流能处理所有类型的数据(如图片、avi等),而字符流只能处理字符类型的数据。

    字节流:一次读入或读出是8位二进制。      字符流:一次读入或读出是16位二进制。

    第二步,明确将要操作的数据是否是纯文本数据。如果数据源是纯文本数据选Reader;数据源不是纯文本数据选择InputStream。如果数据目的地是纯文本数据就选择Writer;如果不是则选择OutputStream。

     

    第三步,明确具体的设备。即数据源是从哪个设备来的:是硬盘就加File;是键盘用System.in(是一个InputStream对象);是内存用数组;是网络用Socket流。同样目的是哪个设备:是硬盘就加File;是键盘用System.out(是一个OutoutStream对象);是内存用数组;是网络用Socket流。

     

      第四步,明确是否还需要其他额外功能呢,例如①是否需要较高的效率,即是否需要使用缓冲区,是就加上Buffered;②是否需要转换,是,就使用转换流,InputStreamReader 和OutputStreamWriter。

    下面给出例子,具体的用法

     

    上面百度文档已经介绍的很清楚了,不过我还想更加详细的了解一下输入流和输出流。在这里只介绍比较常用的方法,因为学习需要慢慢来·····

    输入字节流 InputStream

    InputStream      是所有的输入字节流的父类,它是一个抽象类。(做什么用的呢?是个抽象类,不是接口,后期再研究)

    下面我要考虑了,其实文件的输出输入是比较容易混的。那么我们怎么区分呢?

    这样,不管是输入还是输出,都是真对内存来说的,什么意思呢?

    解释一下:如果我们要上传一个文件,有三个步骤。第一,读取本地文件,就是先把硬盘上面的文件读取到内存中,那么真对内存来说就是用输入流(inputStream);第二,再把内存中的文件输出(outStream),真对内存来说就是从内存输出到服务器的硬盘上。

    ByteArrayInputStream 、StringBufferInputStream、FileInputStream 是三种基本的介质流,它们分别从Byte 数组StringBuffer、和本地文件中读取数据。

     其他两种没用过, 只就是  FileInputStream ,文件的上传和下载用的都是这种流。

    输出字节流 OutputStream

    OutputStream  是所有的输出字节流的父类,它是一个抽象类。(和上面对应的==不懂,后期研究==)

    这次写文件下载用的就是这个父类。下面给出代码

         //创建输出流
            OutputStream out = response.getOutputStream();
            //创建数组
            byte buffer[] = new byte[1024];
            int len = 0;
            //循环将输入流中的内容读取到缓冲区当中
            while((len=in.read(buffer))>0){
                //输出缓冲区的内容到浏览器,实现文件下载
                out.write(buffer, 0, len);
            }

    用FileOutputStream 应该也是可以的吧,不过这就要指定具体的那个路径进行文件写出,也就是往硬盘写入

    在此,我有个疑问,byte buffer[] 是否是缓冲区?

    答案;不是缓冲流,不确定缓冲区做什么用的,后期再研究。

    缓冲流:有四个,当然是字节缓冲输入流BufferedInputStrean、字节缓冲输出流OutputStreamWriter、 和字符的 BufferedReader、 BufferedWriter 增加缓冲功能,避免频繁读写硬盘。

    缓冲流大小通常是根据文件大小来进行匹配的,如果不进行设置有个默认值

    今天就到这吧

  • 相关阅读:
    HackerRank
    HackerRank
    LeetCode "Kth Smallest Element in a BST"
    HackerRank
    HackerRank
    LeetCode "Roman to Integer"
    LeetCode "Integer to Roman"
    LeetCode "Majority Element II"
    HackerRank
    HackerRank
  • 原文地址:https://www.cnblogs.com/ScarecrowAnBird/p/7955051.html
Copyright © 2020-2023  润新知