笔记---IO

IO

一、基本介绍

1.1 什么是流

  • 概念:内存与存储设备之间传输数据的通道

1.2 流的分类

  1. 按文件存储
    • 输入流:将<存储设备>中的内容读入到<内存>中
    • 输出流:将<内存>中的内容写入到<储存设备>中
  2. 按单位
    • 字节流:以字节为单位,可以读写所有数据
    • 字符流:以字符为单位,只能读写文本数据
  3. 按功能
    • 节点流:具有实际传输数据的读写功能
    • 过滤流:在节点流的基础之上增强功能

二、字节流

2.1 字节流

  • 字节流的父类(抽象类):

    • InputStream:字节输入流

      方法作用
      close()关闭流
      read()从输入流中读取数据的下一个字节
      read(byte[] b)从输入流中读取一定数量的字节,并将其存储在缓冲区数组中
    • OutputStream:字节输出流

      方法作用
      close()关闭流
      flush()刷新此输出流并强制写出所有缓冲的输出字节
      write(byte[] b)将b.length个字节从指定的byte数组写入此输出流

2.2 文件字节流

  • FileInputStream:

    方法作用
    read(byte[] b)从流中读取多个字节,将读到的内容存入b数组,返回实际读到的字节数;如果达到文件的尾部,则返回-1
  • FileOutputStream:

    • 构造(路径,是否追加)
    方法作用
    write(byte[] b)一次写多个字节,将b数组中所有字节写入输出流

2.3 字节缓冲流

  • BufferedInputStream:

    构造方法(参数)作用
    BufferedInputStream(InputStream in)
    BufferedInputStream(InputStream in, int size)size缓冲区大小
  • BufferedOutputStream:

    同上

2.4 对象流

作用:

  1. 将对象储存到硬盘中或从硬盘中读取对象
  2. 对象存储和读取时需要序列化与反序列化
  3. 自带缓冲区
  4. 要想序列化对象,该对象必须要实现Serializable接口
  5. transient修饰字段,该字段不能被序列化
  6. 静态属性不能被序列化
  • ObjectOutputStream:

    方法作用
    writeObject(Object obj)将对象写入流
  • ObjectInputStream:

    需要抛异常:ClassNotFoundException

    方法作用
    readObject()将对象从流中读出

三、字符流

3.1 字符编码

  1. ISO-8859-1收录除ASCII外,还包括西欧、希腊语、泰语、阿拉伯语、希伯来语对应的文字符号(1字节)
  2. UTF-8 针对Unicode码表的可变长度字符编码(1、2或3个字节)
  3. GB2312 简体中文(1、2字节)
  4. GBK 简体中文、扩充(1、2字节)
  5. BIG5 台湾,繁体中文

注意:

byte[] bytes = inputStream.readAllBytes();
String s = new String(bytes);

在new String(bytes)中,String类会默认将byte数组中的数据按照UTF-16编码进行编译

可以使用String(byte[],Charset charset)构造,添加UTF-8编码

byte[] bytes = inputStream.readAllBytes();
String s = new String(bytes,StandardCharsets.UTF_8);

3.2字符流父类(抽象类)

  • Reader

    方法作用
    read()
    read(char[] c)
    read(char[] c,int off,int len)
  • Writer

    方法作用
    write(int n)
    write(String str)
    write(char[] c)

3.3 文件字符流

  • FileReader

    构造器描述
    FileReader(File file)使用平台 FileReader ,在 File读取时创建一个新的 FileReader
    FileReader(FileDescriptor fd)使用平台 default charset创建一个新的 FileReader ,给定 FileDescriptor进行读取。
    FileReader(File file, Charset charset)创建一个新的FileReader ,给出File读取和charset
    FileReader(String fileName)使用平台 default charset创建一个新的 FileReader ,给定要读取的文件的 名称
    FileReader(String fileName, Charset charset)给定要读取的文件的名称和FileReader ,创建一个新的FileReader
    方法作用
    read(char[] c)从流中读取多个字符,将读取到的内容存储在数组中,返回实际读到的字符数,读到末尾返回-1
  • FileWriter

    变量和类型方法描述
    voidflush()刷新流。
    voidwrite(char[] cbuf, int off, int len)写一个字符数组的一部分。
    voidwrite(int c)写一个字符。
    voidwrite(String str, int off, int len)写一个字符串的一部分。
    voidwrite(String str)将str写入

3.4 字符缓冲流

  • BufferedReader

    构造器描述
    BufferedReader(Reader in)创建使用默认大小的输入缓冲区的缓冲字符输入流。
    BufferedReader(Reader in, int sz)创建使用指定大小的输入缓冲区的缓冲字符输入流。
    变量和类型方法描述
    Stream<String>lines()返回 Stream ,其元素是从此 BufferedReader读取的行。
    voidmark(int readAheadLimit)标记流中的当前位置。
    booleanmarkSupported()判断此流是否支持mark()操作。
    intread()读一个字符。
    intread(char[] cbuf, int off, int len)将字符读入数组的一部分。
    StringreadLine()读一行文字。
    booleanready()判断此流是否可以读取。
    voidreset()将流重置为最新标记。
    longskip(long n)跳过字符。
  • BufferedWriter

    构造器描述
    BufferedWriter(Writer out)创建使用默认大小的输出缓冲区的缓冲字符输出流。
    BufferedWriter(Writer out, int sz)创建一个使用给定大小的输出缓冲区的新缓冲字符输出流。
    变量和类型方法描述
    voidflush()刷新流。
    voidnewLine()写一个行分隔符。
    voidwrite(char[] cbuf, int off, int len)写一个字符数组的一部分。
    voidwrite(int c)写一个字符。
    voidwrite(String s, int off, int len)写一个字符串的一部分。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值