Java IO 体系结构

参考文章地址: http://blog.csdn.net/oracle_microsoft/article/details/2634231

Java IO体系结构看似庞大复杂,其实有规律可循,要弄清楚其结构,需要明白两点:

1. 其对称性质:InputStream 与 OutputStream, Reader 与 Writer,他们分别是一套字节输入-输出,字符输入-输出体系

2. 原始处理器(适配器)与链接流处理器(装饰器)

 

其结构图如下:

InputStream-OutputStream体系

 

Reader-Writer体系

 

1. 基类

InputStream与OutputStream是所有字节型输入输出流的基抽象类,同时也是适配器(原始流处理器)需要适配的对象,也是装饰器(链接流处理器)装饰对象的基类.

 

2. 原始流处理器

原始流处理器接收Byte数组对象,String对象,FileDescriptor对象将其适配成InputStream,以供其他装饰器使用,他们都继承自InputStream 包括如下几个:

ByteArrayInputStream: 接收Byte数组为流源,为多线程通信提供缓冲区操作功能

FileInputStream: 接收一个File作为流源,用于文件的读取

PipedInputStream: 接收一个PipedOutputStream,与PipedOutputStream配合作为管道使用

StringBufferInputStream: 接收一个String作为流的源(已弃用)

 

3. 链接流处理器

链接流处理器可以接收另一个流处理器(InputStream,包括链接流处理器和原始流处理器)作为源,并对其功能进行扩展,所以说他们是装饰器.

1) FilterInputStream继承自InputStream,是所有装饰器的父类,FilterInputStream内部也包含一个InputStream,这个InputStream就是被装饰类--一个原始流处理器,它包括如下几个子类:

BufferedInputStream: 用来将数据读入内存缓冲区,并从此缓冲区提供数据

DataInputStream: 提供基于多字节的读取方法,可以读取原始数据类型(Byte, Int, Long, Double等等)

LineNumberInputStream:  提供具有行计数功能的流处理器

PushbackInputStream:  提供已读取字节"推回"输入流的功能

2) ObjectInputStream: 可以将使用ObjectOutputStream写入的基本数据和对象进行反串行化

3) SequenceInputStream: 可以合并多个InputStream原始流,依次读取这些合并的原始流

 

对于OutputStream, Reader, Writer的体系结构也跟InputStream的结构类似

转载于:https://www.cnblogs.com/zemliu/p/3269015.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/421560.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java wap_JAVA和WAP移动学习技术

JAVA和WAP移动学习技术JAVA/WAP移动学习技术摘 要 移动学习是今后课堂学习的必要补充,WAP技术是基于连接浏览的移动学习关键技术。本文以移动电话学生成绩查询系统为例,利用UML模型表征实现的过程,分析其运用的WML 、SERVLET与连接池等技术。…

java string 日期格式_java String.Format() 日期格式用法

JDK1.5中,String类新增了一个很有用的静态方法String.format():现有一个时间20090903要转化成指定时间的java.util.Date格式private Date getStartGregorianTime(String date) {Date d_date DateUtil.parseDate(date);int year new Integer(String.format("%…

java HHmm_java date HHmmss hhmmss

系统交互时,用到时间流水号的设计,出现时间流水号相同的情况,故对时间格式化各种情况做了研究SimpleDateFormat(format)format:年月日 yyyyMMdd时分秒 HHmmss 24小时制时分秒 hhmmss 12小时制年月日时分秒 yyyyMMddHHmmss …

MySql命令——命令行客户机的分隔符

delimiter //create procedure productpricint() begin select avg(price) as priceaveragefrom product; end //delimiter; 转载于:https://www.cnblogs.com/Luoma_HaoWei/p/3270889.html

NuGet学习笔记(1)——初识NuGet及快速安装使用

关于NuGet园子里已经有不少介绍及使用经验,本文仅作为自己研究学习NuGet一个记录。 初次认识NuGet是在去年把项目升级为MVC3的时候,当时看到工具菜单多一项Library Package Manager,右键项目文件多了一项Manage Nuget Packages...&#xff0c…

java 打印二叉树_java – 如何打印二叉树图?

我创建了简单的二叉树打印机。你可以根据需要使用和修改它,但它还没有优化。我认为很多东西都可以在这里改进;import java.util.ArrayList;import java.util.Collections;import java.util.List;public class BTreePrinterTest {private static Node test1() {Node …

ZOJ 2562 More Divisors

又是个水题,刚刚开始没有用搜索,因为对于反素数有: n2^t1*3^t2^5^t3*7^t4..... 这里有 t1>t2>t3>t4。 而且相同的因数的情况下,素数越不同越好。 哪知道这个方法错了! 。 看来还得中规中矩得用dfs。 我觉得还…

springMVC使用注解方式进行页面跳转

<!--控制层-->package cn.org.spartacus.spring; import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.Controller;import org.springframework.web.bind.annotation.RequestMapping;ControllerRequestMapping("…

java for 和foreach_关于java中for和foreach循环

for循环中的循环条件中的变量只求一次值&#xff01;具体看最后的图片foreach语句是java5新增&#xff0c;在遍历数组、集合的时候&#xff0c;foreach拥有不错的性能。foreach是for语句的简化&#xff0c;但是foreach并不能替代for循环。可以这么说&#xff0c;任何foreach都能…

将datatable导出为excel的三种方式(转)

一、使用Microsoft.Office.Interop.Excel.DLL 需要安装Office 代码如下&#xff1a; 2 publicstaticboolExportExcel(System.Data.DataTable dt, stringpath)3 {4 boolsucceed false;5 if(dt !null)6 {7 Microsoft.Office.Interop.Excel.Application xlApp null;8 try9 {10 xl…

java锁的实现方式_Java 集群锁如何实现呢?

针对分布式锁的实现&#xff0c;目前比较常用的有以下几种方案&#xff1a;基于数据库实现分布式锁 基于缓存(redis&#xff0c;memcached&#xff0c;tair)实现分布式锁 基于Zookeeper实现分布式锁基于数据库表要实现分布式锁&#xff0c;最简单的方式可能就是直接创建一张锁表…

java判断字符集_Java 常用工具类---- 各种字符集编码判断与转换

import java.io.UnsupportedEncodingException;/*** 判断字符编码** author guyinyihun*/public class CharacterCodingUtil {private final static String ENCODE "GBK";/*** 判断是否为ISO-8859-1** return*/public static boolean checkISO(String str) {boolean…

只安装和配置instantclient,用plsql developer,navicat for oracle,sqlplus连接oracle数据库 ....

环境配置&#xff1a; 1.到oracle官网下载instantclient basic包&#xff0c;解压缩到E:\oracle\instantclient_11_2&#xff1b; 2.设置环境变量 NLS_lANGSIMPLIFIED CHINESE_CHINA.ZHS16GBK&#xff08;注意中间有空格&#xff0c;这个如果不设&#xff0c;toad查询中文会是乱…

bae java上传图片_干货分享:gradle+svn轻松搞定BAE java代码上传

背景在BAE基础版和专业版上&#xff0c;java应用通过war包文件部署的时候&#xff0c;总会遇到一些小麻烦&#xff1a;BAE专业版的svn/git有单文件40M的限制&#xff0c;所以在专业版的svn/git中上传超过40M的war包(很多war包都会超过40M)是不可行的BAE基础版的svn/git&#xf…

java缺省包详解_Java在其它包中无法引用缺省包中的类

1、现象1.1 问题场景最近&#xff0c;在写测试代码时&#xff0c;将一个类(这里暂且称为ClassA)放在在缺省包中&#xff0c;也就是说&#xff0c;直接放在了src目录下&#xff0c;没有创建包。然后&#xff0c;将这个类打入了jar文件&#xff0c;提供给另外的工程(这里称为Proj…

myeclipse开发代码颜色搭配保护视力

废话不多说&#xff0c;这个东西主要是为了保护视力的&#xff0c;另外我也挺喜欢上边的颜色搭配的&#xff0c;今天特拿出来分享。直接上图 转载于:https://www.cnblogs.com/suncoolcat/p/3293895.html

linux下qt5静态编译器_笔记-linux下Qt5.3.2 静态编译

这里主要讲linux下的编译&#xff0c;windows下面比较简单依赖sudo apt-get install"^libxcb.*"libx11-xcb-dev libglu1-mesa-dev libxrender-dev libxi-dev编译选项configure -confirm-license -opensource -static -release -no-qml-debug -qt-freetype -qt-xcb -n…

css--block formatting context

block formatting context(块级格式化上下文) 如何产生BFC&#xff1a;当一个HTML元素满足下面条件的任何一点&#xff0c;都可以产生Block Formatting Context&#xff1a; float的值不为none。overflow的值不为visible。display的值为table-cell, table-caption, inline-bloc…