InputStreamReader和OutputStreamWriter分别继承自java.io包中的Reader和Writer,对他们中的抽象的未实现的方法给出实现。如:

public int read(char cbuf[], int offset, int length) throws IOException {

return sd.read(cbuf, offset, length);

}

如上代码中的sd(StreamDecoder类对象),在Sun的JDK实现中,实际的方法实现是对sun.nio.cs.StreamDecoder类和sun.nio.cs.StreamEncoder类的同名方法的调用封装。

我们可以通过这样两张 类结构关系图看下。

字节流到字符流解码的相关类结构关系

我们再来看下OutputStreamWriter相关的类结构关系:

字符流到字节流编码相关类结构关系

我们看到这样几点:

InputStreamReader和OutputStreamWriter实际上是对同样继承了Reader和Writer的StreamDecoder和StreamEncoder的封装

StreamDecoder和StreamEncoder不是Java SE API中的内容,是Sun JDK给出的自身实现。但我们知道他们对构造方法中的字节流类(InputStream和OutputStream)参数和字符集类(Charset)进 行了封装,并通过此二者进行了字节流和字符流之间的编码解码转换

从表层来看,InputStreamReader和OutputStreamWriter做了InputStream/OutputStream字节流类到Reader/Writer之间的转换。

而从如上Sun JDK中的实现类关系结构中可以看出,是StreamDecoder和StreamEncoder的设计实现在实际上采用了适配器模式。

FileReader与InputStreamReader区别:

FileReader:需要从文件中读取数据时用,FileReader 是InputStreamReader 类的子类,

所有方法(read ()等)都从父类 InputStreamReader 中继承来,它使用的字符集可以由名称指定或显式给定,

或者可以接受平台默认的字符集,从API中可以看出,它是一个专门操作文件的一个Reader的子类。

InputStreamReader:需要从键盘接收数据时用。通常是按字符流读入时,一般也不仅从键盘,

也可以文件,网络,其它对象中读取,不过是按字符进行读取。它是Reader的直接子类。

主要区别:就在于构造函数!从 InputStreamReader 的构造函数中看到,参数为 InputStream 和编码方式,

可以看出,当要指定编码方式时,必须使用 InputStreamReader 类;

举个例子:将一个文本文件中的数据存储到另一个文件中,本身处理的就是纯文本文件那么就用FileReader;

如果是将键盘录入的数据保存到一个文件中,那么键盘传过来的是字节流,这时候就要使用InputStreamReader

最详细的IO结构图:

java io图_JAVA IO流结构图相关推荐

  1. java io 输出流_Java IO 输入和输出流

    数据流是指一组有顺序的,有起点和终点的字节集合. 最初的版本中,java.io 包中的流只有普通的字节流,即以 byte 为基本处理单位的流.字节流用来读写 8 位的数据,由于不会对数据做任何转换,因 ...

  2. java io运用_Java IO相关使用

    date: 2020-06-14 14:42:22 updated: 2020-08-21 17:35:45 Java IO相关使用 1. 文件 创建 File 对象的三种方式 一个路径名:File( ...

  3. java 异步模型_Java IO编程全解(三)——伪异步IO编程

    为了解决同步阻塞I/O面临的一个链路需要一个线程处理的问题,后来有人对它的线程模型进行了优化,后端通过一个线程池来处理多个客户端的请求接入,形成客户端个数M:线程池最大线程数N的比例关系,其中M可以远 ...

  4. java字节流分为_Java的流操作分为字节流和字符流两种。

    Java的流操作分为字节流和字符流两种.           1. 字节流  所有的读操作都继承自一个公共超类java.io.InputStream类.  所有的写操作都继承自一个公共超类java.i ...

  5. java io框架图_Java IO流体系继承结构图解析

    Java IO体系结构看似庞大复杂,其实有规律可循,要弄清楚其结构,需要明白两点: 1. 其对称性质:InputStream 与 OutputStream, Reader 与 Writer,他们分别是 ...

  6. java io体系_java IO流的体系结构图

    常用字节流字符流 字节流   InputStream                                                                           ...

  7. java 数据流对比_Java IO流之字符流字节流区别

    java IO流主要是对字符字节的操作,企业应用比较广泛,比如最常见的导入导出.... 一.IO流的分类: 1.根据处理数据类型的不同分为:字符流(Reader,Writer)和字节流(InputSt ...

  8. java切割输入流_java IO流之文件切割两例(含Properties 用法)

    package cn.itcast.io.p1.splitfile; import java.io.File; import java.io.FileInputStream; import java. ...

  9. java漫画下载_Java IO流 根据 输入url地址 爬虫下载漫画图片 保存到本地硬盘

    package com.yaimer.test; import java.io.*; import java.net.HttpURLConnection; import java.net.Malfor ...

最新文章

  1. 李开复:AI行业正在回归商业本质,技术公司要有服务心态落地为王
  2. (寒假开黑gym)2017-2018 ACM-ICPC German Collegiate Programming Contest (GCPC 2017)
  3. 用 Python 实现文件查找
  4. Java锁 (概览)
  5. ODAC(V9.5.15) 学习笔记(四)TCustomDADataSet(2)
  6. pytorch之过拟合的处理(Dropout)(笔记五)
  7. 区块链工作笔记0001---以太坊流程简介
  8. 自动驾驶算法-滤波器系列(七)——ESKF(error-state Kalman Filter)介绍
  9. 【C语言】【笔试题】实现函数itoa(int n,char s[]),将整数n这个数字转换为对应的字符串,保存到s中...
  10. Python 思维锻炼
  11. windows server 2003忘记密码
  12. RE: C与C++社区混战,C#会重蹈覆辙吗?
  13. Aurora使用教程 第一讲
  14. 深圳市工业和信息化局关于征集创新产品的通知
  15. CSBJ综述:微生物组数据挖掘方法的挑战与机遇
  16. 根据身高体重计算BMI指数,判断您是否健康。
  17. 因为铂金Birkin包 爱马仕把数字艺术家告了
  18. WiFi手机可以连接,电脑上也能连接,可以微信聊天,但是不能浏览器上网怎么解决?
  19. 达芬奇调色软件DaVinci Resolve15破解版
  20. 泰勒级数与麦克劳伦级数

热门文章

  1. 2018-2019 ACM-ICPC, Asia East Continent Finals题解
  2. Java 高级数据结构 —— Properties
  3. Need ffmpeg exe. You can download it by calling: imageio.plugins.ffmpeg.download()
  4. 冷知识 —— 物种大交换
  5. 极简代码(六)—— 返回 0/1 构成的布尔向量
  6. numpy实用技巧(二)
  7. Spark standalone 模式下的集群部署
  8. C++基础——用C++实例理解UML类图
  9. python小白从哪来开始-国外大牛解析:小白如何从零基础开始学习python编程语言...
  10. python可以做什么-Python简直就是万能的,你用Python都做过哪些事?