JAVA自学笔记(IO流)

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

  • 数据借助流进行传输

流的分类

  • 按方向

    • 输入流(input):将 存储设备 中的内容读入到 内存 中

    • 输出流(output): 将 内存 中的内容写入到 存储设备 中

  • 按单位

    • 字节流:以字节为单位,可以读写所有数据

    • 字符流:以字符为单位,只能读写文本数据

  • 按功能

    • 节点流:具有实际传输数据的读写功能

    • 过滤流:在节点流的基础之上增强功能

字节流

字节流的父类(抽象类)

  • Input Stream:字节输入流

    • public int read (){}

    • public int read (byte[] b){}

    • public int read (byte[] b , int off , int len){}

  • OutputStream:字节输出流

    • public void write(int n){}

    • public void write(byte[] b){}

    • public void write (byte[] b ,int off , int len){}

文件字节流

  • FileInputStream:

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

  • FileOutputStream

    • public void write(byte[] b)//一次写多个字节,将b数组中所有字节写入到输出流

案例,使用文件输入流和文件输出流实现文件内容复制

文件缓冲流

  • 缓冲流:BufferedOutputStream/BufferedIntputStream

    • 提高IO效率,减少访问磁盘的次数

    • 数据存储在缓冲区中,flush是将缓冲区的内容写入到文件中,也可以直接close

对象流

  • 对象流:ObjectOutputStream/Object InputStream

    • 增强了缓冲区功能

    • 增强了读写8种基本数据类型和字符串功能

    • 增强了读写功能

      • readObject() 从流中读取一个对象

      • writeObject(Object obj)向流中写入一个对象

    • 使用流传输对象的过程称为序列化和反序列化

    • 序列化的类必须实现Serializable接口

    • 序列化类中对象属性也要实现Serializable接口

    • 序列化版本 ID(serialVersionUID),保证序列化的类和反序列化的类是同一个类

    • 使用transient(瞬间的)修饰属性,这个属性就不能被序列化

    • 静态属性也不能被序列化

    • 序列化多个对象,可以借助集合实现

  • 对象流序列化对象

  • 对象反序列化

内存流

  • ByteArrrayInputStream:内存输入流

  • ByteArrrayOutputStream:内存输出流

字符编码

  • 文件后缀名的作用:1.表示文件的类型 2.决定使用什么软件打开文件

  • 修改后缀名不会改变文件内容

  • ISO-8859-1收录除ASCII之外,还包西欧,希腊,泰语,阿拉伯语,对应的文字符 1个字节

  • UTF-8 : 针对Unicode码表的可变长度字符编码 1、2、3个字节

  • GBK   简体中文   扩充 1、2个字节

  • 编码方式和解码方式不一致时,会出现乱码

字符流

  • 字符流的父类(抽象类)

    • Reader:字符输入流

      • public int read(){}

      • public int read (char[] c){}

      • public int read (char[] b, int off ,int len){}

    • Writer:字符输入流

      • public void write (int n){}

      • public void write (String str){}

      • public void write (char [] c){}

文件字符流

使用字节流可以复制任何文件

  • File Reader:(文件字符输入流,从硬盘中读到内存)

    • public int read (char [] c)//从流中读取多个字符,将读到的内容存入c数组,返回实际读到的字符数,如果达到文件的尾部,则返回-1

  • File Writer(文件字符输出流,从内存中写到硬盘)

    • public void write(String str)//一次写多个字符,将b数组中所有字符,写入输出流

  • 文件字符流实现文件内容复制

字符缓冲流

缓冲流:BufferedReader/BufferedWriter()默认8K

  • 高效读写

  • 支持输入换行符

  • 可以一次写一行,读一行

  • 字符缓冲输入流读取文件

  • 字符输出缓冲流向文件写入内容

打印流

  • PrintWriter(数据原样打印)

    • 封装print()/println()方法,支持写入后换行

    • 支持数据原样打印

    • System.setout():重定向标准输出流

转换流

  • 桥转换流:Input Stream Reader / Output StreamWriter

    • 可以将字节流转换为字符流

    • 可以设置字符的编码方法

File类

递归遍历文件夹和递归删除文件夹

Properties:属性集合

  • 特点

    • 存储属性名和属性值

    • 属性名和属性值都是字符串类型

    • 没有泛型

    • 和流有关

RandomAccessFile

  • RandomAcessFile即可以读取文件内容,也可以向文件中写入内容

  • 和其他输入流/输出流不同的是,程序可以直接跳到文件的任意位置来读写文件

  • 读写模式

    • r:只读

    • rw:读写

  • 作用

    • 快速定位数据,支持并发读写

    • 方便的获取二进制文件

多线程同时下载文件

总结

  • 流的概念

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

  • 流的分类

    • 输入流 (InputStream),输出流(OutputStream)

    • 字节流(FileInputStream/FileOutputStream)

    • 字符流(FileReader/File Writer)

    • 节点流 ,过滤流

  • 序列化和反序列化

    • 将对象通过流写入到文件,或将对象通过流读取到内存,必须实现Serializable接口

  • File对象

    • 代表物理盘符中的一个文件或者文件夹

ObjectInputStream 字节流,读八种基本类型,读对象,缓冲

ObjectOutputStream 字节流,写八种基本类型,写对象,缓冲

BufferInputStream 字节流,缓冲

BufferedOutputStream 字节流,缓冲

DataInputStream 字节流,读八种基本类型

DataOutputStream 字节流,写八种基本类型

PrintWriter 字符流,写八种基本类型,字符串并换行,缓冲功能,写对象

PrintStream 字节流,写八种基本类型,字符串并换行,缓冲功能,写对象

BufferedReader 字符流,缓冲,读入一行文本

文章知识点与官方知识档案匹配,可进一步学习相关知识Java技能树首页概览91738 人正在系统学习中

声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2021年5月25日
下一篇 2021年5月25日

相关推荐