IO总结

首先是传输方向上以程序为中心,划分为输入流和输出流这两大类。其它的IO操作类都要继承这俩类的。这个继承也是符合实际情况,传输数据不是输入就是输出。然后就是按文件类型划分为字符流和字节流。字符流专用于传输字符文件,字节可以传输所有二进制文件。
两两组合起来则可得到IO流的四大类。字符输入流(Reader)、字符输出流(Writer)、字节输入流(InputStream)、字节输出流(OutputStream)

这代表这四大流的类都是抽象类,其他的各种有关IO操作都与这四大类之间存在直接或间接的继承关系。因而其各个子类大部分的名字都是以xxx开头然后以其直接或间接的父类结尾。比如如为了提高读写效率的缓存流就是以Buffer为开头如BufferInputStream、BufferReader等。还有能够传输数据并且能保留数据类型的信息的数据流以Data开头,以及可以通过序列化来进行对象的传输的对象流以Object开头。如下图所示一些常用的操作IO流的类与这几个类的继承关系如下。
这里写图片描述

而从操作文件的角度来看的话。其实各种流的操作步骤读写过程都是大同小异。
1. 先与文件建立联系也就是把文件的地址路径作为参数传入各种流当中。
2. 用一个数组进行存储文件中的字节或字符,然后将数组内容写入目的文件当中。
3. 之后就是反复的读取和写入直到读到文件的末尾。
4. 最后释放文件资源

而其他IO类都是为了让这个过程更有效率或者是对其进行某些特殊的处理。如缓存流也被称为包装流,在实例化其对象的时候需要传入一个InputStream/OutputStream的对象作为参数。就像包装一样把其他的流包含起来进行对文件的操作。其内部实现都是会创建一个内部缓冲区数组。在读取或写入流中的字节时,可根据需要从包含的输入流填充该内部缓冲区,一次读取多个字节从而提高效率并提供特有的方法来进行读写。还有对特殊的文件内容如存储对象的文件,采用特殊的操作从而使得传输和接收变得更加有针对性。因为针对此类文件的特性可以在内部封装一些特殊的方法,从而使得操作文件更加具有效率和简单。下图对文件操作做了一个简单的总结。
这里写图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
java中的IO操作总结(四) 前面已经把java io的主要操作讲完了 这一节我们来说说关于java io的其他内容 Serializable序列化 实例1:对象的序列化 ? 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 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.ObjectOutputStream; import java.io.Serializable; @SuppressWarnings("serial") //一个类要想实现序列化则必须实现Serializable接口 class Person implements Serializable { private String name; private int age; public Person(String name, int age) { this.name = name; this.age = age; } public String toString() { return "Name:" + this.name + ", Age:" + this.age; } } public class Demo { public static void main(String[] args) { String path = File.separator + "home" + File.separator + "siu" + File.separator + "work" + File.separator + "demo.txt"; Person p1 = new Person("zhangsan",12); Person p2 = new Person("lisi",14); //此处创建文件写入流的引用是要给ObjectOutputStream的构造函数玩儿 FileOutputStream fos = null; ObjectOutputStream oos = null; try { fos = new FileOutputStream(path); oos = new ObjectOutputStream(fos); //这里可以写入对象,也可以写入其他类型数据 oos.writeObject(p1); oos.writeObject(p2); } catch (IOException e) { e.printStackTrace(); } finally { try { oos.close(); } catch (IOException e) { e.printStackTrace(); } } } } 解压密码 www.jiangyea.com

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值