java基础性代码拾遗-3(IO流)

1. IO流的四大抽象类(只能继承不能实例化)

作为装饰器模式中的抽象构建角色。

字节流一般用于处理二进制文件,而字符流一般用于处理文本文件。

2. IO流的关系,命名规律与功能

  • 字节流
    通过BufferedInputStream缓冲后,可以利用read()方法读取字节信息,直到读到块字节数组byte[] buf没有内容为止。此时read(buf)返回的读取字节数len为-1——读取结束标记。
    通过BufferedOutputStream缓冲后,可以使用write(buf,0,len)方法按字节输出。

  • 字符流
    通过BufferedReader()缓冲后可以利用readLine()读到字符串String,以null作为结束标记。
    通过BufferedWriter()缓冲后可以利用write()直接输出字符串,或者使用append()的链式方法调用来输出字符串,以及使用newLine()输出一个/r/n。

  • 关闭流
    先读后写——>先关写再关读。

  • 为什么要引入DataInputStream/DataOutputStream类?
    用于处理java的基本数据类型:
    readInt(),readDouble(),readUTF() 处理字符串;
    writeInt(),writeDouble(),writeUTF() 处理字符串。

  • 为什么要引入ByteArrayInputStream和ByteArrayOutputStream类?
    需要将java的各种基本数据类型及类类型的数据转换为byte[],便于在网络上传输。相应的对象提供了读写基本数据类型和Object类型数据的方法。

  • 为什么要引入ObjectInputStream/ObjectOutputStream类?
    主要用于对象的序列化readObject()和反序列化writeObject()。

  • 转换流InputStreamReader和OutputStreamWriter可以提供字符编码的转换。
    在构造器中提供编码选项参数:
    InputStreamReader(,“UTF-8”)
    OutputStreamWriter(,“UTF-8”)
    注意:没有从字符到字节的转换流,因为这种转换是不必要的。

  • FileInputStream/FileOutputStream,ObjectInputStream/ObjectOutputStream,ByteArrayInputStream/ByteArrayOutputStream作为装饰器模式的具体构建角色。

  • FilterInputStream和FilterOutputStream主要以装饰器模式的装饰器角色引入。它持有对装饰器模式中的抽象构建角色(InputStream/OutputStream和Reader/Writer)的引用。

  • DataInputStream/DataOutputStream,BufferedInputStream/BufferedOutputStream作为装饰器模式的具体装饰角色。

3. 关于字节/字符流的缓冲机制
  • 字节流
  • 字符流
4. Apache FileUtils和Apache IOUtils
  • jar包
    commons-io-ver.jar

  • FileUtils
    封装了文件的相关操作。

常用方法:

FileUtils.openInputStream(File):FileInputStream
FileUtils.toFile(URL):File
FileUtils.copyFileToDirectory(File, File, boolean):void
FileUtils.copyFile(File, File):void
FileUtils.copyURLToFile(URL, File):void
FileUtils.readFileToString(File, Charset):String //UTF8
FileUtils.writeStringToFile(File, String, String):void
  • IOUtils
    封装了文件读写的相关操作。

常用方法:

IOUtils.toString(InputStream, String):String
IOUtils.write(byte[], OutputStream):void
IOUtils.write(String, Writer):void
IOUtils.copy(InputStream, Writer):void
IOUtils.copyLarge(Reader, Writer, char[]):long
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值