I/O学习总结

I/O:BIO(阻塞式IO,基于抽象类)

I/O部分的学习,我主要围绕字节输入流InputStream、字节输出流OutputStream、字符输入流Reader、字符输出流Writer的常用方法以及整体结构来展开。
下图为整理总结的结构图:
在这里插入图片描述
一、File文件操作类:
File类既可以描述文件,也可以描述文件夹。
1.File的使用:
(1)产生File对象:

  • File(String pathname):根据文件的绝对路径来产生file对象
  • File(String parent,String child):设置父路径和子路径
  • File(URI uri):根据网络产生file对象

(2)常用的操作方法:

  • boolean exists():判断文件是否存在
  • boolean delete():删除文件
  • File.separator:文件分隔符
    linux下文件名区分大小写,使用’/’
    windows下不区分大小写,使用’’
  • String getParent():取得父路径的目录
  • File getParentFile():取得父路径的File对象
  • boolean mkdirs():创建当前目录,如果当前目录的父目录不存在,一并创建
  • boolean mkdir():创建当前目录,如果当前目录的父目录不存在,创建失败
  • boolean createNewFile():创建一个新文件
  • boolean isFile():判断是否是文件
  • boolean isDirectory():判断是否是目录
  • long length():取得文件大小,以字节为单位
  • long lastModified():取得最后修改时间

二、字节流与字符流:
1.字节操作流:原生操作,无需转换,可以处理文本文件、图像、音乐、视频等资源
(1)InputStream字节输入流
(2)OutputStream字节输出流:只接受字节数组

  • void close():关闭流

  • void flush():字符流若未关闭,数据在缓冲区中存放,不会输出到目标终端,要想将数据输出,要么将输出流关闭;yaom使用flush()强制刷新缓冲区。

  • FileOutputStream的构造方法:
    a. new FileOutputStream(file):若输出数据时,file文件不存在,则会自动创建文件(不包含创建目录),此时父目录必须存在
    b. new FileOutputStream(file,true):需要文件内容追加
    AutoCloseable接口:进行自动关闭处理
    必须使用try…catch代码块,try(定义要关闭的流对象)
    2.字符操作流:经过处理后的操作,只用于处理中文文本
    (1)Reader字符输入流:只能接受字符数组
    (2)Writer字符输出流
    3.流媒体文件:视频和音频
    4.流模型的基本操作流程:

  • 取得终端对象

  • 根据终端对象取得输入输出流

  • 根据输入输出流进行数据的读取与写入

  • 关闭流:IO操作属于资源处理,所有的资源处理(IO操作,数据库操作,网络操作)在使用后一定要关闭。
    三、转换流:
    1.InputStreamReader:字节输入流–>字符输入流
    new InputStreamReader(InputStream in)
    2.OutputStreamWriter:字节输出流–>字符输出流
    new OutputStreamReader(OutputStreamReader out)
    四、内存操作流:
    1.内存流:以内存为终端的输入输出流
    2.字节内存流:
    (1)ByteArrayInputStream(byte[] data):字节内存输入流
    (2)ByteArrayOutputStream:字节内存输出流
    3.字符内存流:
    (1)CharArrayReader:字符内存输入流
    (2)CharArrayWriter:字符内存输出流
    五、打印流:针对输出流的强化版本
    1.装饰设计模式:在不必改变原类文件和使用继承的情况下,动态的扩展一个对象的功能
    2.装饰设计模式基于抽象类,核心依然是某个类的功能,为了得到更好的效果,让其支持的功能更多。
    优点:很容易更换装饰类来达到不同的操作效果
    缺点:造成类结构复杂
    3.打印流的设计属于装饰设计模式,例如:核心是OutputStream抽象类实现的writer()功能,但是为了强化其功能,使用装饰类PrintStream
    4.PrintWriter可以接受OutputStrem和Writer的对象
    PrintStream只能接受OutputStream的对象
    六、两种输入流:
    1.BufferReader类:缓冲输入流(字符流)

  • BufferReader(Reader in)

  • String readLine():读取一行数据,默认以回车作为分隔符
    2.java.util.Scanner类:与IO有关却不在io包下的唯一类

  • 定义分隔符:useDelimiter(Pattern pattern)

  • 可以接收所有类型(File、Path、String、InputStream),支持正则表达式
    七、序列化:
    Java中要对一个对象进行序列化,该对象的类必须实现Serializable接口(标识性接口),才具备序列化的功能
    1.序列化:内存里的类的实例化对象转成二进制数据流
    2.反序列化:二进制数据流转成类的实例化对象
    3.具体实现序列化和反序列化需要使用io包中提供的两个处理类:
    (1)ObjectOutputStream:序列化

  • ObjectOutputStream(OutputStream out):选择目标终端

  • void writeObject(Object obj):将obj变为二进制流输出到目标终端
    (2)ObjectInputStream:反序列化

  • ObjectInputStream(InputStream in):选择目标终端

  • Object readObject():将二进制流反序列化为Object对象
    4.transient关键字:
    若希望类中的若干属性不被序列化,可以在属性前添加transient关键字。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值