JAVA I/O 流(一)

    1. I/O流:输入输出流(Input/Output
      1. 输出流:针对程序来说,把数据从程序输出到文件中
      2. 输入流:针对程序来说,把数据从文件输入到程序中
    1. 流是一组有顺序的,有起点和终点的字节集合,是对数据传输的总称或抽象。即数据在两设备间的传输称为流,流的本质是数据传输,根据数据传输特性将流抽象为各种类,方便更直观的进行数据操作。 
    1. 分类:
      1. 根据处理数据的类型不同, 分为字节流和字符流;
      2. 根据数据的流向不同, 分为输入流()输出流().
      3. 功能, 节点/处理

 

  1. 字节流
    1. OutputStream/InputStream 抽象类(implements Cloaseable, Flushable), 字节输入/输出的所有类的超类
      1. 输出流接受输出字节并将这些字节发送到InputStream 类某个接收器 要向文件中输出,使用FileOutputStream
      2. FileInputStream 从文件系统中的某个文件中获得输入字节。
    2. FileOutputStream, 指定的文件不存在, 会自动创建
      1. 从文件系统中的某个文件中获得输入字节。
      1. AutoCloseable -> Closeable
        1. 作用域, 仅限try语句块, 并且不可以在try()外部声明
        2. 一条语句
      1. 8k缓存
      2. 阻塞
      3. file.length --> long
      4. GBK/GB2312也是变长, ASCII, 有些情况乱码
    3. available
      1. 指针
      2. 非阻塞方法, 除非极端情况下
  2. 字符流
    1. Writer implements Closeable
      1. 写入字符流的抽象类
      2. FileWriter
    2. Reader implements Closeable
      1. 读取字符流的抽象类
      2. FileReader
    3. 若处理字符文本文件, 是是复制,则推荐使用字节流, 且不会出错
    4. 非文本文件, 建议字节流, 所谓字符流,就是按文本文件中的每个字符为单位进行处理,所以处理文本文件,通常

建议使用字符流,其它任意情况都建议使用字节流

  1. 字节流与字符流的区别?
    1. 字节流会在执行write方法时,直接把数据写入磁盘
    2. 字符流会在执行write方法时,把数据保存到缓存中,在关闭或刷新时会把缓存的    数据同步到磁盘中字符缓存默认8KB,刷新缓存的方式有三种:
      1. 缓存已满
      2. 手动调用flush方法
      3. 手动调用close方法
    3. 字符流是基于字节流上的实现
  1. 文件复制
    1.  
  1. 转换流
    1. 转换, 可以将一个字节流转换为字符流, 也可以将一个字符流转换为字节流
      1. OutputStreamWriter: 可以将输出的字符流转换为字节流的输出形式
      2. InputStreamReader: 可以将输入的字节流转换为字符流的输入形式
    2. BufferedWriter char lengh 8192
      1. newLine();
    3. BufferedReader
      1. readLine();
    4. Writer buffer char 1024
    5. StreamEncoder 8192BYTE(FileWriter)
    6. 字符流默认带缓存
    7. BufferedOutputStream 构造时可以手动传入缓存大小(BufferedWriter也可以)
      1. close()可以自动关闭
      2. 关这个流就可以, 可以不关内部的装饰流// ignore this regular
      3. 没有额外增强方法
  2. 缓冲流
    1. 查阅api 作用
      1. 对文件或其它目标频繁的读写操作,效率低,性能差。 使用缓冲流的好处是,能够更高效的读写信息,原理是将数据先缓冲起来,然后一起写入或者读取出来。
      2. 缓冲流给字节或字符提供一种功能的增强,加入缓冲(缓存)的流操作,可以提高

写入或读取的效率,在使用流操作时必需添加缓冲

  1. BufferedInputStream
    1. 为另一个输入流添加一些功能,在创建 BufferedInputStream 时,会创建一个内部缓冲区数 组,用于缓冲数据。
  2. BufferedOutputStream:通过设置这种输出流,应用程序就可以将各个字节写入底层输出流中,而不必针对每次字 节写入调用底层系统。
  3. BufferedReader:从字符输入流中读取文本,缓冲各个字符,从而实现字符、数组和行的高效读取。
  4. BufferedWriter:将文本写入字符输出流,缓冲各个字符,从而提供单个字符、数组和字符串的高效写入。
  5. gbk > gb2312
  6. 构造时传入的字符数组初始化大小 n
    1. 大于n并不会触发flush, 因为Writer抽象类也带有缓存
  1. 打印流
    1. 主要功能是用于输出
    2. print(int i) i -> byte??x
    3. File自动创建的时机
    4. PrintWriter -> 构造OutputStream, Writer
      1. 构造参数
        1. OutputStream[, boolean autoFlush] --> 默认false
        2. Writer[, boolean autoFlush] --> 默认false
        3. String filename[, String csn]
        4. File file[, String csn] / Charset charset, File file
      2. newLine()为private, 有public方法println()方法调用
    5. PrintStream: 字节打印流,给字节输出增强功能
    6. PrintWriter: 字符打印流,给字符输出增强功能
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值