I/O框架

I/O框架

  • I:input输入 O:output输出

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

  • 水借助管道传输:数据借助流传输
  • 按方向划分
    • 输入流:将存储设备中的内容读入到内存
    • 输出流:将内存中的内容写入到存储设备

  • 按单位

    • 字节流:以字节为单位,可以读写所有数据
    • 字符流:以字符为单位,只能读写文本数据
  • 按功能

    • 节点流:具有实际传输数据的读写功能
    • 过滤流:在节点流的基础上增强功能
  • 字节流的父类(抽象类)

    • InputStream:字节输入流

      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数组中所有字节,写入输出流
        

      • 通过文件字节流实现文件复制

  • 字节缓冲流

    • 缓冲流:BufferedInputStream/BufferedOutputStream

      • 提高io效率,减少访问磁盘的次数
      • 数据存储在缓冲区中,flush是将缓冲区的内容写入到文件中,也可以直接close
      • BufferedInputStream

      • BufferedOutputStream

  • 对象流:ObjectOutputStream/ObjectInputStream

    • 增强了缓冲区的功能

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

    • 增减了读写对象的功能

      • readObject()从流中读取一个对象
      • writeObject(Object obj)向流中写入一个对象

    • 序列化:Java对象转成其他对象(比如文件对象),就叫序列化,反过来就是反序列化

    • 序列化和反序列化注意事项

      • 如果要使对象序列化,对象类必须实现Serializable标记接口
      • 序列化类中的对象属性也要求实现Serializable标记接口
      • 序列化版本号ID,保证序列号的类和反序列化的类是同一个类(IDEA会自动修正)
      • 使用transient(瞬时的)修饰不被序列化的属性,这个属性将不可被序列化
      • 静态属性不可被序列化
      • 序列化多个对象可以使用ArryaList集合,直接序列化ArryaList集合就可以了,反之,反序列化时则需要返回ArrayList类型
  • properties集合

    • 属性集合
    • 特点
      • 存储属性名和属性值
      • 属性名和属性值都是字符串类型
      • 没有泛型
      • 和流有关

字符编码

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

字符流

  • 字符流的父类(抽象类)
    • Reader:字符输入流
      • public int read(){}//读取单个字符
      • public int read(char[] c){}读取多个字符
      • public int read(char[] c ,int off,int len){}
    • Writer:字符输出流
      • public void write(int n){}//写一个字符
      • public void write(String str){}//写一个字符串
      • public void write(char[] c){}//写一个字符数组
文件字符流
  • FileReader:
public int read(char[] c)//从流中读取多个字符,将读到内容存入c数组,返回实际读到的字符数,如果达到文件底部则返回-1
  • FileReader与FileInputStream读取文件的区别

    • FileInputStream

    • FileReader

  • FileWriter

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

  • 使用字符流复制实现文件复制

字符缓冲流
  • 缓冲流:BufferedReader/BufferedWriter

    • 高效读写

    • 支持输入换行符

    • 可一次写一行、读一行

      • BufferedReader

      • BufferedReader

打印流
  • printWriter
    • 封装了print()/println()方法,支持写入后换行
    • 支持数据原样打印

转换流
  • 4\桥转换流:InputStreamReader/OutputStreamWriter

    • 可将字节流转换为字符流
    • 可试着字符的编码方式

File类
  • 代表物理磁盘中的一个文件或者文件夹
  • 方法
createNewFile()//创建一个新的文件夹
mkdir()//创建一个新的目录
delete()//删除文件或空目录
exists()//判断File对象所代表的对象是否存在
getAbsolutePath()//获取文件的绝对路径
getName()//取得名字
getParent()//获取文件/目录所在的目录
isDirectory()//是否是目录
isFile()//是否是文件
length()//获得文件的长度
listFiles()//列出目录中的所有内容
renameTo()//修改文件名为

FileFilter接口
  • public interface FileFilter
    • boolean accept(File pathname)
  • 当调用File类中的listFiles()方法时,支持传入FileFilter接口实现类,对获取文件进行过滤,只有满足条件的文件才可出现在listFiles()的返回值中

posted on   夜不收  阅读(41)  评论(0编辑  收藏  举报

相关博文:
阅读排行:
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5
点击右上角即可分享
微信分享提示