文档章节

io介绍

h
 hehe12323
发布于 2016/12/26 22:59
字数 1018
阅读 9
收藏 1

 1.做java开发有一段时间了,对java的io类库总是没有较全面的了解,仅仅停留在会使用几个常用api的基础   上。抽空学习了一下,对io类库有了更全面的了解。

 2.IO:输入输出,java中使用流的抽象概念来表示。

 3.从操作的基本单元的类型划分:可分为面向字节操作的IO和面向字符操作的IO。

   3.1.在面向字节操作的IO中,api的设计者认为有关输入的类都继承自InputStream,有关输出的类都继                承自OutputStream。

         InputStream又按不同的数据源产生输入划分为不同的类,主要有:

ByteArrayInputStream

缓冲字节数组当作inputStream

FileInputStream

文件当作inputStream

PipedInputStream

用于写入PipedOutputStream的数据

SequenceInputStream

将多个InputStream进行逻辑串联成单一的inputStream

StringBufferedInputStream

String转成inputStream(jdk1.1开始不建议使用)

FilterInputStream

此为装饰器的抽象类

             对应的OutputStream的主要类有:

ByteArrayOutputStream

缓冲字节数组当作OutputStream

FileOutputStream

文件当作OutputStream

PipedOutputStream

用于写出到PipedinputStream的数据

FilterOutputStream

此为装饰器的抽象类

3.2.关于FilterOutputStream/FilterInputStream两个抽象类的作用,java设计者采用装饰器模式来实现不              同功 能的组合,而装饰器模式必须具有和其所装饰的对象相同的接口,先看看两个装饰器有哪些具               体装饰功能类

 

               FilterInputStream

DataInputStream

可以读取不同基本类型数据以及String对象

BufferedInputStream

对数据进行缓冲读取

PushbackInputStream

具有”推回”一个字节的功能

CheckInputStream

可对读取数据校验

InflaterInputSream

具有对输入数据解压缩功能

DeflaterInputSteam

具有对输入数据压缩数据功能

 

               FilterOutputStream

DataOutputStream

可以写出不同基本类型数据以及String对象

BufferedOutputStream

对数据进行缓冲写出

PrintStream

格式化输出(能够方便地打印各种数据值表示形式,指定字符编码,提供两项其他输出流同的功能:1.永远不会抛出 IOException,异常情况仅设置可通过 checkError 方法测试的内部标志;2.自动刷新--自动调用 flush 方法println 方法,写入一个换行符)

CheckOutputStream

可对写出数据校验

InflaterOutputSream

具有对输出数据解压缩数据功能

DeflaterOutputSteam

具有对输出数据压缩数据功能

      3.3.我可以对InputStream和OutputSream进行功能的组合操作,如对数据缓冲再格式化输出。 

 

 

      4.JDK又为我们提供另一种形式的IO操作----面向字符的IO操作,think in java的作者说面向字符形式的IO           提供兼容Unicode的功能,主要是为了国际化,且比面向字节形式IO要更快。同样,api的设计者认为             有关输入的类都继承自Reader,有关输出的类都继承自Writer。

 

        按不同的数据源产生划分

Reader

BufferedReader

缓冲字符数组当作Reader(InputStream的不同,此类直 接继承Reader)

CharArrayReader

缓冲字符数组当作Reader

PipedReader

传送的字符输入流

StringReader

字符串的读取

InputStreamReader

此为适配器类(是字节流通向字符流的桥梁,使用指定的 charset 读取字节并将其解码为字符)

FilterReader

此为装饰器的抽象类

 

          Writer 

BufferedWriter

缓冲字符数组当作Writer

CharArrayWriter

缓冲字符数组当作Writer

PipedWriter

传送的字符输出流

StringWriter

字符串的写出

PrintWriter

向文本输出流打印对象的格式化表示形式

OutputStreamWriter

此为适配器类(是字节流通向字符流的桥梁,使用指定的 charset 读取字节并将其解码为字符)

FilterWriter

此为装饰器的抽象类

  4.1.上图看出ReaderWriterInputStreamOutputStream在类的组织结构上大致相似,但不完全相同。

  4.2.关于在字符流体系中将文件流(FileReader/FileWriter)作为适配器的子类来实现。

 

 5.最后附上一张从网上下的结构图

 

     

  

  6.文章参考thinking in java。
 

 

 

本文转载自:http://javazqd110.iteye.com/blog/2320205

上一篇: nio系列介绍1
下一篇: java内部类
h
粉丝 0
博文 7
码字总数 0
作品 0
湘潭
私信 提问
一个对异步IO的小小的介绍 (4)

一个对异步IO的小小的介绍 (1) 一个对异步IO的小小的介绍 (2) 一个对异步IO的小小的介绍 (3) 这里是ROT13 server的最后一个实现,它使用 bufferevents API。 Example: A simpler ROT13 serve...

星罗棋布
2014/03/03
192
0
Netty浅析 - 1. 基础

前言 在了解一个事物之前,最好能对它的基本属性和相关概念有个基本的认知,所以学习Netty之前,也有必要了解与Netty相关的基础概念知识;本篇将对Netty做一个基础性的介绍,主要包括Netty的...

简xiaoyao
2018/12/02
0
0
iOS转Android开发的几篇好文章

本人最近在学习Android开发,本人原本是做iOS开发的,就想找几篇文章能以iOS开发者的角度来介绍下Android开发,很幸运找到了下面几篇文章,分享给大家。 http://objccn.io/issue-11-1/ http:...

国士梅花
2015/09/22
435
0
如何计算tomcat线程池大小?

背景   在我们的日常开发中都涉及到使用tomcat做为服务器,但是我们该设置多大的线程池呢?以及根据什么原则来设计这个线程池呢?   接下来,我将介绍本人是怎么设计以及计算的。 目标 ...

onedotdot
2017/10/18
17
0
五大I/O模型详解

同步与异步&阻塞与非阻塞 五大I/O模型详解 java I/O模型简述 前文 在同步与异步&阻塞与非阻塞中,简要的介绍一些基础概念,但这些概念最终是为IO所服务,是为文件所服务。按照Linux一句话来说...

haoran_10
2016/07/08
1K
4

没有更多内容

加载失败,请刷新页面

加载更多

OSChina 周一乱弹 —— 年迈渔夫遭黑帮袭抢

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @tom_tdhzz :#今日歌曲推荐# 分享Elvis Presley的单曲《White Christmas》: 《White Christmas》- Elvis Presley 手机党少年们想听歌,请使劲...

小小编辑
今天
1K
16
CentOS7.6中安装使用fcitx框架

内容目录 一、为什么要使用fcitx?二、安装fcitx框架三、安装搜狗输入法 一、为什么要使用fcitx? Gnome3桌面自带的输入法框架为ibus,而在使用ibus时会时不时出现卡顿无法输入的现象。 搜狗和...

技术训练营
昨天
5
0
《Designing.Data-Intensive.Applications》笔记 四

第九章 一致性与共识 分布式系统最重要的的抽象之一是共识(consensus):让所有的节点对某件事达成一致。 最终一致性(eventual consistency)只提供较弱的保证,需要探索更高的一致性保证(stro...

丰田破产标志
昨天
8
0
docker 使用mysql

1, 进入容器 比如 myslq1 里面进行操作 docker exec -it mysql1 /bin/bash 2. 退出 容器 交互: exit 3. mysql 启动在容器里面,并且 可以本地连接mysql docker run --name mysql1 --env MY...

之渊
昨天
12
0
python数据结构

1、字符串及其方法(案例来自Python-100-Days) def main(): str1 = 'hello, world!' # 通过len函数计算字符串的长度 print(len(str1)) # 13 # 获得字符串首字母大写的...

huijue
昨天
6
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部