Java I/O流总结
2017-09-03 12:11
302 查看
简介
近期学习Hadoop的过程中,发现对流的概念理解的不是很深入。决定把《Java核心技术》书中关于流与文件的部分重新梳理学习。结合JDK 7,利用SmartDraw工具将流中主要的类接口通过UML图,将I/O主要的流类和接口展示出来。流的概念
在Java API中,可以从其中读入一个字节序列的对象称为输入流,而可以向其中写入一个字节序列的对象称作输出流。这些字节序列的来源地和目的地可以是文件,而且通常都是文件,但是也可以是网络连接,甚至是内存块。抽象类InputStream和OutputStream构成了有层次结构的输入/输出(I/O)类的基础。因为面向字节的流不便于处理以Unicode形式存储信息,所以从抽象类Reader和Writer中继承出来的专门用于处理Unicode字符的类构成一个单独的层次结构。这些类拥有的读入和写出操作都是基于两字节的Unicode码元的,而不是基于字节的字符。
从对流的描述中,我们了解流其实针对的是文件内容的处理,这个和File类有区别的,File类关心的是在磁盘文件上的存储。
流家族UML图
把流家族中的成员按照它们的使用方法进行划分,这样就形成了处理字节和字符的两个单独的层次结构。InputStream和OutputStream类可以读写整个的字节和字节数组,构成了下图所示层次结构的基础:对于Unicode文本,可以使用抽象类Reader和Writer的子类,基本方法与对应的InputStream和OutputStream中的类类似:
几个和流相关的接口:Closeable/AutoCloseable, Readable, Flushable和Appendable,基类InputStream,OutputStream, Reader和Writer与它们的实现关系如下图所示:
组合流过滤器
某些流(例如FileInputStream和由URL类的openStream方法返回的输入流)可以从文件或其他更外部的位置获取字节,而其他的流(如DataInputStream和PrintWriter)可以将字节组装到更有用的数据类型中。Java程序员必须对二者进行组合。例如:从文件中读取输入数字,首先需要创建一个FileInputStream,然后将其传递给DataInputStream的构造器:FileInputStream fin = new FileInputStream("employee.dat"); DataInputStream din = DataInputStream(fin); double s = din.readdouble();
参考资料
1. Java核心编程 卷2 第1章 流与文件2. Java JDK7 API
相关文章推荐
- java知识总结(八)I/O流操作
- Core Java第十四章知识点总结——文件与I/O流
- 关于Java中的I/O流的总结
- java总结I/O流
- java--I/O流总结
- Java I/O流总结(二)
- Java I/O流总结
- Java I/O流总结(一)
- Java基础I/O流总结
- Java中I/O流总结
- java中常见的I/O流总结
- Java I/O流总结与巩固
- JAVA之 I/O流的输入,输出的经典总结!
- Java I/O流-总结(InputStream,OutputStream,Reader,Writer)
- Java I/O流总结
- Java的同步机制总结——synchronized
- Java Message Service 总结
- Thinking in Java 第7章 多形性 总结
- 程序员面试金典——解题总结: 9.14 Java 14.5Java中的对象反射是什么?它有什么用?
- Java-String类的常用方法总结