`
JackyCheng2007
  • 浏览: 250134 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Java IO 深入学习

    博客分类:
  • Java
阅读更多
IO可算是jdk的一个很基本的东西了,所以打算整理一下我对IO的学习和理解。
IO,当然就是Input和Output的简写,分别代表了读和写两个方面。
流的引入,使我们可以形象的认为数据就像流水一般在各种是被间流走,而不必理会沟渠是怎么铺设的。我们只要关注怎么控制这些字节或者字符的流动就好了。

InputStream & OutputStream
这两个类代表了字节流的输入和输出。他们是两颗大树的树根,就像一对夫妻一样,下面都有一群子孙。查看附图。


装饰模式 Decorator design pattern
在深入了解这些子类之前,得先了解一下装饰模式,jdk就是采用这种模式来设计这些子类的。装饰模式其实是解决组合问题的。举个例子,当你设计一种字体的时候,你可能需要为它设置颜色,大小,字体类型,动画特效等等。如果让你为每一种成型的样子设计一个类来表示,或者设计一个模板来生产,那可以说有无数种组合,你几乎是做不到的。那么我可以做到的就是设计几种装饰类,可以利用这些类来人任意的组合来为文字添加效果,这样就可以满足各种需求了。
回到对象设计上来说,就是动态的为对象添加新的功能和职责,期望他能在原来的基础上完成更多的或者更好的完成工作。这里关键就是一个动态的。因为通过继承你也可以为一个类扩展新的功能,但那时固定的。通过装饰模式可以对对象进行动态的包装,怎么包装用户使用的时候按需进行。你只要提供包装来就好了。
Java IO正是有这种多种特征相组合的需求。所以也就采用了这种设计模式。
那么怎么才能实现这种模式呢?
装饰器可以被看成是一种代理,当你要执行一个类的方法的时候,可以委托给这个类的装饰器去做,并且他会为你干点别的事情。所以装饰器得持有被装饰的对象引用,以调用他干最基本的事情,同时,还要在要提供附加功能的方法上添加点东西,以达到装饰的效果。
当然装饰器也可以提供更多的方法以满足更多的需要,但都得围绕被装饰的对象来扩展。
毕竟一种装饰器可能仅提供某一方面的装饰和增强,因此需要更多种装饰器来满足不同的需要。这些装饰器之间又可以相互装饰已达到组合出拳的效果。
既然如此,得有一个基类装饰器,来包含被装饰对象的所有方法和特性,别的装饰器都继承他,这样每个装饰器都只扩展自己想要扩展的方法,其他的就不必重写。不然,你要在所有的装饰器里面都得重写很多不需要修改的方法。

FilterInputStream & FilterOutputStream正是为此目的而设计,所有的装饰类都继承于这个抽象类。


FilterInputStream & FilterOutputStream
FilterInputStream & FilterOutputStream分别继承于InputStream & OutputStream。并且提供了装饰器接口用来装饰被装饰对象。

BufferedInputStream & BufferedOutputStream
不论你要读写的IO设备是什么,你总是需要缓存读写内容。想想看,为什么呢?一提到缓存基本都是为了解决瓶颈问题的,为了提高性能。相比内存的速度来说,IO设备就太慢了。所以就需要缓存来解决,把你要写的内容缓存起来,等待一个时机,就一次flush出去,完成批量的写。

Reader & Writer
从jdk1.1开始来了一对新夫妇。这两个类代表了字符流的输入和输出。下面也有一群子孙(查看附图)。其实,这个家族的出现最主要的原因是为了国际化。也就是解决多语言的问题。因为InputStream&OutputStream主要处理8位字节的问题,不能很好的处理16位的unicode。unicode就是用来解决国际化问题的,这个家族支持unicode。
既然是这样,那么基本上这个家族都有和InputStream&OutputStream对应的子类,除了一些特殊的必须基于字节的子类。


更新中...
  • 大小: 122 KB
  • 大小: 135.7 KB
0
5
分享到:
评论

相关推荐

    Java IO 体系.md

    Java IO 体系 - Java IO 体系 ...Java IO 是一个庞大的知识体系,很多人学着学着就会学懵了,包括我在内也是如此,所以本文将会从 Java 的 BIO 开始,一步一步深入学习,引出 JDK1.4 之后出现的 NIO

    java的各种io操作

    java提供各种IO操作。深入浅出的讲解IO.适合初学者学习

    Java的IO流讲解代码: File 类、RandomAccessFile 类、字节流(文件字节流、缓冲字节流、基本数据类型

    此代码资源的目标是提供简单易懂的示例代码,帮助读者深入理解Java IO流的概念和使用方法。通过研究这些代码示例,读者将能够了解如何使用不同类型的IO类来进行文件读写、字符流、字节流、网络传输等各种常见的IO...

    io:java io学习项目

    java io学习以io,nio为基础,netty为辅程序员素养:掌握面向对象的需求分析和设计理解SOLID原则,理解常用设计模式,熟练掌握重构理解面向服务的架构理解Linux操作系统的一些概念,比如内核空间,用户空间,系统调用,...

    (超赞)JAVA精华之--深入JAVA API

    1.1 深入JAVA API 1.1.1 Lang包 1.1.2 集合类 1.1.2.1.1 日期类Date 1.1.2.1.2 日历类Calendar 1.1.2.1.3 随机数类Random 1.1.2.1.4 向量类Vector 1.1.2.1.5 栈类Stack 1.1.2.1.6 哈希表类Hashtable 1.1.2.1.7 ...

    【Java面试+Java学习指南】 一份涵盖大部分Java程序员所需要掌握的核心知识

    JavaIO流 多线程 深入理解内部类 javac和javap Java8新特性终极指南 序列化和反序列化 继承、封装、多态的实现原理 容器 Java集合类总结 Java集合详解1:一文读懂ArrayList,Vector与Stack使用方法和实现原理 Java...

    Java开发详解.zip

    000000_【课程介绍 —— 写在前面的话】_Java学习概述笔记.pdf 010101_【第1章:JAVA概述及开发环境搭建】_JAVA发展概述笔记.pdf 010102_【第1章:JAVA概述及开发环境搭建】_Java开发环境搭建笔记.pdf 010201_【第2...

    动力节点老杜推荐Java学习路线

    深入学习面向对象编程的核心概念,如类、对象、封装、继承和多态。 掌握Java的常用类库,包括字符串处理、日期与时间、输入输出流等,为后续的应用开发打下坚实基础。 阶段二:深入学习 学习Java集合框架,包括List...

    深入理解Java IO的flush

    本篇文章是小编总结的关于Java IO的flush的相关知识点内容,有需要的朋友可以跟着学习下。

    JAVA SE学习精华集锦

    1.1 深入JAVA API 2 1.1.1 Lang包 2 1.1.2 集合类 8 1.1.2.1.1 日期类Date 9 1.1.2.1.2 日历类Calendar 10 1.1.2.1.3 随机数类Random 11 1.1.2.1.4 向量类Vector 12 1.1.2.1.5 栈类Stack 13 1.1.2.1.6 哈希表类...

    java输入输出的深入讲解

    java输入输出的深入讲解,javase中io流是一个比较难但是很重要得学习部分。这个文档很值得学习。

    Java工程师面试复习指南

    JavaIO流 多线程 深入理解内部类 javac和javap Java8新特性终极指南 序列化和反序列化 继承封装多态的实现原理 集合类 Java集合类总结 Java集合详解:一文读懂ArrayList,Vector与Stack使用方法和实现原理 Java集合...

    深入java虚拟机

    要想成为JAVA(高级)工程师肯定要学习JAVA。一般的程序员或许只需知道一些JAVA的语法结构就可以应付了。但要成为JAVA(高级) 工程师,您要对JAVA做比较深入的研究。您应该多研究一下JDBC、IO包、Util包、Text包、...

    JAVA学习基本路线

    如果是Java的话,首先当然是基本的语法,面向对象,JDK,然后就是深入一点的IO,线程,集合,差不多这些就是Java的基础

    《Java开发实战经典》——学习攻略

    对于大部分的自学者而言,IO操作也许是最难过的一个坎了,如果没有很好的理解抽象类和接口的概念,那么要想充分的理解IO操作是很难的,在整个IO操作之中,完整的体现了Java语言多态性的设计思想,而且在学习IO的时候...

    疯狂java讲义

    《疯狂Java讲义(附光盘第2版)》为所有打算深入掌握Java编程的读者而编写,适合各种层次的Java学习者和工作者阅读,也适合作为大学教育、培训机构的Java教材。但如果只是想简单涉猎Java,则《疯狂Java讲义(附光盘第2...

    Java SE查阅手册.pdf

    笔记适合了解Java或者有学过其他编程语言的Java初学者学习,多线程与IO的提高笔记与Spring的笔记还在总结当中,另外Linux、MySQL的笔记以后也会发布。现在也是边学习边总结,所以总结的此笔记必然有不足的地方,如果...

    2018秋招java笔试题-javapass:java深入学习资料集锦

    IO 与 NIO 设计模式 :open_file_folder: 数据结构与算法 数据结构 算法 :laptop: 计算机网络与数据通信 网络相关 数据通信(RESTful,RPC,消息队列)总结 :mobile_phone: 操作系统 Linux相关 :pencil: 主流框架/软件 ...

    【Java面试+Java学习指南】一部分大部分Java招聘所需要掌握的核心知识

    IO Linux 计算机网络 HTTP/HTTPS TCP/IP 7种常见的设计模式及使用场景 Java必会基础与新版本特性 线上问题排查 集合框架 哈希映射 并发哈希映射 数组列表 向量 深入浅出JVM JVM内存模型 性能调优、线上问题...

    java教程-每日一课,27天java从入门到进阶

    精品java学习教程,原理讲解+源码实战 27天实现java从入门到进阶 第一天:语言环境 第二天:常量变量 第三天:流程控制 第四、五天:方法与数组 第六天:类 第七天:对象的出生 第八天:类与类继承 第九天:具体到...

Global site tag (gtag.js) - Google Analytics