`
houchangxi
  • 浏览: 63324 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Java IO 框架整理

阅读更多


总体来说,IO可以分为字节流和字符流,不同在于字符流由字节流包装而来,在IO读入之后经过JVM处理,把字节流转换成字符流。而字符流的字符采用哪种字符编码实现由JVM默认编码决定。
而每个流都分输入和输出,所以,总体来说,IO有四个顶层类:
InputStream
OutputStream
Reader
Writer

而作为机器级别于机器直接交互的则是字节流:
InputStream
OutputStream

以IO的中间类,进行字节流到字符流的转换过渡,通常可作为字符流类的构造参数,可指定编码:
InputStreamReader
OutputStreamWriter

而字节流和字符流的缓冲容器来看有byte和char之分,所以派生出:
ByteArrayInputStream
ByteArrayOutputStream
CharArrayInputStream
CharArrayOutputStream

以上类只是表示流的表示形式,而在传输形式上还表现为是否有缓冲。所以,可以派生出子类为可缓冲类:
BufferInputStream
BufferOutputStream
BufferReader
BufferWriter

每一个顶层类都有对目录文件(File)的支持:
FileInputStream
FileOutputStream
FileReader
FileWriter

在Java中,一个强大的功能就是可以对对象进行序列化,转成二进制文件输出,也就是字节流输出而不是字符流输出,所以有顶层的InputStream和OutputStream派生类:
ObjectInputStream
ObjectOutputStream

流包括了节点流和过滤流,注意的是过滤流,可在读写的同时对数据进行操作,并且实现了同步操作,顶层过滤流类:
FilterInputStream
FilterOutputStream
其子类则在其基础上,对节点流进行封装,常见子类有:
BufferInputStream          BufferOutputStream
DataInputStream            DataOutputStream
LineNumberInputStream      PrintStream
可参考子类的构造方法。


以上IO操作几乎就是把流装载到内存中,对其进行操作的时候是顺序读写,而需要随机读写时:
RandomAccessFile


从整个类框架的结构实现的接口来看,顶层类:
InputStream implements Closable,
OutputStream implements Closable, Flushable
Reader implements Closable, Readable
Writer implements Closable, Flushable, Appendable
各个接口方法:
Closable: close();
Flushable: flush();
Readable: read(CharBuffer cb);
Appendable: append();
从IO类使用时的规则来看,实现这些方法就是很自然的了,也是必须要实现的。如:流使用完必须关闭,流输出前必须刷新。

注意的是,这四个顶层类都没有实现Serializable接口。
java.io.Serializable虽然属于IO框架,但其并不是直接作用于IO框架四个顶层IO类及其子类,而是作用于其它对象,使其可被序列化,再通过IO类对其进行输入输出。如:File、ObjectStreamClass、String。


从IO类的构造器来看,通过几层的包装使得IO类从顶层类的基础功能增强为具有一定能力应用类。如:
BufferReader br = new BufferReader(new InputStreamReader(System.in));
PrintWriter pw = new PrintWriter(new BufferWriter(new FileWriter("pw.out")));
ObjectOutputStream out =
new ObjectOutputStream(new FileOutputStream("file.out"));
从设计模式的角度来看,应该就是装饰器模式(但从装饰器定义来看,似乎又不是,请指点)。

 

Java IO 框架中主要应用了两个设计模式:装饰模式和适配器模式。

姑且就把Java IO划分为元素和行为两个部分,元素则是适配,行为则是装饰加强。

适配器模式主要在于字节流到字符流的转换和元素的包装上,如类:InputStreamReader, CharArrayReader, FileReader, PipedReader, StringReader。
装饰模式主要在对流的强化之中,如缓冲、过滤、行定位等,如类:BufferedReader, FilterReader, LineNumberReader。

一个典型的例子就是:
BufferReader br = new BufferReader(new InputStreamReader(System.in));
综合了两种模式:把InputStream适配成InputStreamReader,再把InputStreamReader加强装饰城BufferedReader。

 

转自:http://tanshenghui.iteye.com/blog/618724

分享到:
评论

相关推荐

    JAVA_IO流整理思维导图.emmx

    JAVA_IO流整理思维导图.

    JAVA面试核心知识点整理283页-2020.pdf.zip

    网络有协议,java 高并发io框架netty。数据结构包括堆栈,队列,链表,二叉树,红黑树,算法包括各种排序,贪心算法,动态规划。以及进阶的分布式,大数据,机器学习,内容非常全,精心总结的。

    JAVA面试核心知识点整理.rar

    网络有协议,java 高并发io框架netty。数据结构包括堆栈,队列,链表,二叉树,红黑树,算法包括各种排序,贪心算法,动态规划。以及进阶的分布式,大数据,机器学习,内容非常全,精心总结的。

    C++异步网络IO库,仿java的mina实现

    前段时间整理一下代码,仿照java的mina自己做了一套C++的异步socket IO 框架。 编译环境: fedora 10 / cenos 5.4 / cygwin gcc version 4.3.2 其他linux环境没试过,不过应该也没啥问题。 使用到的库: 如果光...

    自整理Java关于基础和框架的面试题

    自己整理一些Java关于基础和框架的面试题 基础方面包括io流、多线程、异常处理 框架为ssm、ssh

    韩顺平java从入门到精通视频教程(全94讲)学习笔记整理(齐全)-共448页.docx

    java文件io流编程 java网络编程 java多线程编程 java ee基础1 java面向对象编程--数据库编程-->java se java 基础2 html--css--javascript-->div+css java ee中级部分 Servlet--Jsp-->mvc模式 java ee高级部分 ...

    GitHub 115k 的 Java 学习教程1.zip

    我整理的这份 GitHub 上星标 115k+ 的 Java 教程,里面涵盖了 Java 所有的知识点,包括 Java 语法、Java 集合框架、Java IO、Java 并发编程和 Java 虚拟机,内容不多,只讲重点。

    java基础学习知识整理资料很完善,还附带源码

    Java多态和接口 Java类与对象基础 Java集合框架(1) Java循环语句 Java常用类 Java数组及排序 Java异常处理 Java封装与继承 Java文件处理(IO)1 Java static-final及常用类x

    高级Java技能点.docx

    包括Java基础知识、多线程、IO模型、JVM、开源框架等资料的整理、包括Java基础知识、多线程、IO模型、JVM、开源框架等资料的整理、包括Java基础知识、多线程、IO模型、JVM、开源框架等资料的整理

    免费超全面的Java基础类型,容器,并发,IO流,面向对象,Web编程等代码总结

    Java基础类型,容器,并发,IO流,面向对象,Web编程等代码总结。 2、分类文档 JVM虚拟机 JVM特点,结构与执行周期 JVM类加载机制 JVM运行时区数据 JVM执行引擎和垃圾回收 基础语法 理解Java中对象基础Object类 ...

    java多线程tcpsocketserver源码-Java-Book:Java学习资料整理

    Java学习资料整理 框架 / dubbo监控 / / / / / / / / / / / / / / / / / / / / 收藏 / 技术社区 书籍推荐 计算机基础 计算机科学导论 --(如果不是计算机科班的,应先看看计算机基础,了解一些基本概念,有助于之后的...

    java各知识点详细总结(毕向东笔记整理)

    java各知识点详细总结(毕向东笔记整理)。第一章:编程基础 3-11 第二章:数组 11 -31 第三章:面向对象程序开发 31 -74 第四章:异常机制 74 -89 第五章:多线程技术 89 -122122122 第六章:常用类 API 122API 122 ...

    JAVA_Thinking in Java(中文版 由yyc,spirit整理).chm

    JAVA_Thinking in Java(中文版 由yyc,spirit整理).chm ------------------------------------------------- 本教程由yyc,spirit整理 ------------------------------------------------- “Thinking in Java...

    积分管理系统java源码-dunwu.github.io:个人文档整理项目

    领域的知识点非常庞杂,我整理成了多个教程项目,每个项目都包含大量文档和代码。 :books: - 本人作为一名 Java 程序员,十年的技术积累,汇总与此。 :books: - Java 核心技术教程。内容包含:Java 语法基础特性、...

    免费开源!!Java的必备基础知识、数据库知识、以及框架知识

    Java面向对象编程题数据库常用框架系统设计工具参考资料 本仓库是针对Java的一些基础知识、数据库知识、以及框架知识进行收集、整理(持续更新中)。 仓库对应网站:https://duhouan.github.io/Java/#/

    Java 知识汇总(资源,工具,笔记,源码,文章,文档分类整理).zip

    Java 知识汇总(资源,工具,笔记,源码,文章,文档分类整理).zip ## 项目宗旨 - **Java基础** 面向对象基本语法,抽象类,接口,内部类等;常用类api使用;常用算法,常用加密算法;Rxjava的使用;Http客户端接口测试,Okhttp的...

    2019java亲生经历面试题答案解析准备.zip

    春节跳槽最新Java面试题及答案整理.txt 分享18道Java基础面试笔试题(面试实拍).docx 去BAT面试完的Mysql面试题总结(55道,带完整答案).docx 。。。。。。。还有很多就不在一一的说明了,希望对大家有很大的帮助...

    java8集合源码分析-Awesome-Java:真棒-Java

    IO框架 Java基础字节流 字符流 NIO等 Java8 Java8语言的行为参数化和流编程等 Java虚拟机 Java虚拟机相关,内存模型,类加载机制,JVM性能解析等 零散的文章 数据结构与算法 算法的度量,基础数据结构,链表,二叉树...

    【白雪红叶】JAVA学习技术栈梳理思维导图.xmind

    关于java程序员发展需要学习的路线整理集合 技术 应用技术 计算机基础知识 cpu mem disk net 线程,进程 第三方库 poi Jsoup zxing Gson 数据结构 树 栈 链表 队列 图 操作系统 linux 代码控制...

Global site tag (gtag.js) - Google Analytics