• 黑马程序员-IO(二)


    ------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------

    装饰设计模式:

    当想要对已有对象进行功能增强时。可以定义类,将已经有的类传入,基于已经有的功能,并且提供增强的功能,那么自定义的类就是装饰类。

     

    • 两个基类:outputStream  inputStream ;
    • 缓冲区:Buffer+两个基类的名称

    小技巧: 如何分辨字节流和字符流,就是字节流用byte[]操作, 字符流用char[] 操作

    在字节流当中是对数据的最小操作,所以在写入操作的时候就不需要刷新操作。


    【IO流的基本操作规律】

    1. 明确源和目的
      • 源:输入流, inputstream ,Reader
      • 目的:输出流 ,OutputStream , Writer
    2. 操作的数据是否是纯文本,
      1. 是:那么是字符流
      2. 不是:那么是字节流
      3. 当然字符流和字节流可以通过桥梁对象来引导
    3. 当体系明确以后,在明确是那个对象
      1. 我们可以通过设备来划分,
      2. 源:内存,键盘,硬盘
      3. 目的射门:内存,硬盘,控制台

    使用缓冲区读写文件的思路:

    1. 1.通过两个基类。建立一个读写数据的流通道。因为我们在read(读取的时候是一个字节一个字节读取的可能有点慢,
    2. 建立一个缓冲区,通过底层流对象的rend()方法,把数据从硬盘一大批的存储在缓冲区当中,
    3. 接着就可以缓冲区读取读取数据了
    4. 写入数据就是读取数据的相反。

    • 代码演示:
    //文件读缓冲区 BufferedInputStream bufin = new BufferedInputStream(new FileInputStream("文件地址")); //文件写的缓冲区 BufferedOutputStream bufout = new BufferedOutputStream(new FileOutputStream("写到的文件地址")); byte [] buf = new byte[1024]; int len = 0; //读取到缓冲区当中,返回值为读取的长度,然后呢读取指针指向下一个地址,如果读取的结束了就返回 -1 , //所以这里我反复的读取 while ((len = bufin.read(buf))!=-1) { //写入数据,一直写,如果流还没有关闭的话。就一直在文本里面接着写入到后面的数据,设置len是保证他写入的长度; bufout.write(buf,0,len); } //不要忘记关闭流
            bufin.close();
            bufout.close();

    读写文件

    一个流被定义为一个数据序列。输入流用于从源读取数据,输出流用于向目标写数据。

    下图是一个描述输入流和输出流的类层次图。

    12-130Q122402I57


    【读取键盘的录入】

    system.out:标准输出流 –> 对应的是标准的输出设备:一般就是显示器

    system.in: 标准的输入流->对应的一般就是输入设备

    从控制台获取字符串的方法:

    思路:

    1.在我查看api文档的时候。查阅得控制太的输入是一个字节流。

    2.既然是字节流。其实我们是可以用InputStream衍生出来的类。去读取的。但是就是麻烦。

    3.所以我们可以把字节流引入到字符流对象当中,我们就可以用readnLine方法了。实现方式如下面

    //创建键盘录入对象,键盘录入的是一个字节流。那么我们可以把他转换成为字符流,
    InputStream in = System.in;
    //创建一个字节流导向字符流的桥梁
    InputStreamReader isReader = new InputStreamReader(in);
    
    //创建一个字流的缓冲区  
    BufferedReader buf = new BufferedReader(isReader);
    
    String line = null; 
    while((line = buf.readLine())!=null)
    {
        if("over".equals(line))
        {
            //如果用户输入的是的over那么结束录入功能。
            break;    
        }
        System.out.println(line);
        
    }

  • 相关阅读:
    模仿.Net ThreadPool的线程池控件
    ThreadPool for Delphi
    Thread Pool Engine, and Work-Stealing scheduling algorithm
    Delphi ThreadPool 线程池(Delphi2009以上版本适用)
    Object Pascal对象模型中构造函数之研究
    TExternalThread TThread -- Delphi -- Cannot terminate an externally created thread ?
    Trapping Messages Sent to an Application
    Correct thread terminate and destroy
    Delphi thread exception mechanism
    VCL -- Understanding the Message-Handling System
  • 原文地址:https://www.cnblogs.com/ganwei/p/4567723.html
Copyright © 2020-2023  润新知