一.字节流

1.InputStream/OutputStream(输入流与输出流几乎一一对应)

读取的方法
   int read()
   int read(byte[] buffer)
   int read(byte[] buffer,int offset,int length)

2.各种类的区分,常用的9种(按处理的基本单位划分)

2.1.以字节数组为颗粒(颗粒就是基本单位的意思)

ByteArrayInputStream

2.2.以文件为颗粒

FileInputStream

2.3.管道流(接水管)

PipedInputStream,

主要用在多线程中线程间通信,一个线程通过管道输出流发送数据,

而另一个线程通过管道输入流读取数据,这样可实现两个线程间的通讯。

2.4.以字符串为基本单位(但已经不推荐使用)

StringBufferInputStream

2.5.把流合并的特殊流(只有输入流才有,输出流没有对应的类)

SequenceInputStream :把多个 InputStream 合并为一InputStream .

“序列输入流”类允许应用程序把几个输入流连续地合并起来,并且使它们像单个输入流一样出现。

每个输入流依次被读取,直到到达该流的末尾。

然后“序列输入流”类关闭这个流并自动地切换到下一个输入流。

2.6.增强流(过滤流)

FilterInputStream

2.7.缓冲流

BufferedInputStream(继承于FilterInputStream)

2.8.打印流

注意:printStream也是继承了FilterInputStream,所以它可以对输入进行格式化

2.9.以对象为颗粒的

ObjectInputStream

附:InputStream,OutputStream类的继承关系图:

and:


*********************************************************

二、字符流

1.Reader/Writer:虽然是以字符为单位,

但返回的是字符对应的ASCII码,也就是int类型的数字

对应方法:
      int read()
      int read(char[] buffer)
      int read(char[] buffer,int offset,int length)

Writer的方法,比较特殊,增加了2个:
      void write(int c)
      void write(char[] cbuf)
      void write(char[] cbuf,int offset,int length)

void write(String string)//字符串跟字符数组关系很紧密
      void write(String string,int offset,int length)

2.各种类的区分,常用的9种(按处理的基本单位划分)

2.1.以字符(char)数组为颗粒的

CharArrayReader(与ByteArrayInputStream对应,一个是字符数组,一个是字节数组)

2.2.以文件为颗粒

FileReader(与FileIputStream对应,不过父类层次不同,FileReader是转换流InputStreamReader的子类,因为内部有字符的转换过程)

2.3.特殊的转换流(输入时,字节转字符;输出时,字符转字节)

InputStreamReader(FileReader就是继承了它)

2.4.管道流

PipedReader(与PipedInputStream对应)

2.5.字符流

StringReader(与StringBufferInputStream对应)

2.6.增强流(过滤流)

FilterReader

2.7.缓冲流

BufferedReader(与BufferedInputStream对应,不过不是继承FilterReader)

2.8.打印流(既然是打印,当然只有输出流才有)

PrintWriter

2.9.以对象为颗粒的

ObjectReader(与ObjectInputStream对应)

**************特别提醒,两个转换流********************
InputStreamReader(字节到字符)和 OutputStreamReader(字符到字节):

1.InputStreamReader

从字节流到字符流的桥梁:它读入字节,并根据指定的编码方式,将之转换为字符流。

使用的编码方式可能由名称指定,或平台可接受的缺省编码方式
    InputStreamReader的read()方法之一的每次调用,可能促使从基本字节输入流中读取一个或多个字节。

为了达到更高效率,考虑用 BufferedReader 封装 InputStreamReader,
    如:
    BufferedReader in = new BufferedReader(new InputStreamReader(System.in));

2.OutputStreamWriter

将多个字符写入到一个输出流,根据指定的字符编码将多个字符转换为字节
  每个 OutputStreamWriter 合并它自己的 CharToByteConverter, 因而是从字符流到字节流的桥梁。

附上:字符流Reader,Writer的类继承关系图:

and:

Java的IO输入输出流类的介绍(有图)的更多相关文章

  1. Java的IO流各个类的使用原则

    参考:http://blog.csdn.net/ilibaba/article/details/3955799 Java IO 的一般使用原则(花多眼乱,其实每个类都有专门的作用): 这里有详细介绍: ...

  2. 第27章 java I/O输入输出流

    java I/O输入输出流 1.编码问题 import java.io.UnsupportedEncodingException; /** * java涉及的编码 */ public class En ...

  3. Java复习7.输入输出流

    Java复习7.输入输出流 20131005 前言: Java中涉及数据的读写,都是基于流的,这一块的知识相当重要,而且在Java中的数据,char字符是16bit的,所以存在字节流和字符流的区别.如 ...

  4. (Unity)XML文件读写与IO文件操作类使用介绍

    using System.Xml;                //xml文件操作命名空间 #region 写入操作 void WriteXMLFile(string _fileName) { Xm ...

  5. Java IO 输入输出流 详解 (一)***

    首先看个图: 这是Javaio 比较基本的一些处理流,除此之外我们还会提到一些比较深入的基于io的处理类,比如console类,SteamTokenzier,Externalizable接口,Seri ...

  6. java io 输入输出流

    数据流分类: 流序列中的数据既可以是未经加工的原始二进制数据, 也可以是经一定编码处理后符合某种格式规定的特定数据. 因此Java中的流分为两种: 1) 字节流:数据流中最小的数据单元是字节 2) 字 ...

  7. java.IO输入输出流:过滤流:buffer流和data流

    java.io使用了适配器模式装饰模式等设计模式来解决字符流的套接和输入输出问题. 字节流只能一次处理一个字节,为了更方便的操作数据,便加入了套接流. 问题引入:缓冲流为什么比普通的文件字节流效率高? ...

  8. Java I/O输入输出流详解

    一.文件的编码               开发时一定要注意项目默认的编码!!!!!!!!               文件操作的时候一定要记得关闭!!!!!!!!        ASCII:美国标准 ...

  9. IO输入输出流

    在Java中进行文件的读写,Java IO流是必备的知识. IO流指 的是输入输出流,用来处理设备上的数据.这里的设备指硬盘,内存,键盘录入,网络传输等. 按处理数据类型来分:字节流和字符流. 按流的 ...

随机推荐

  1. C++ 控制台编程

    播放媒体文件 #include<windows.h> #program <mmsystem.h> #pragma comment(lib,"winmm.lib&quo ...

  2. Discuz!和jQuery冲突的解决办法

    Common.js是官方自带的,我没改过它,所以不可能出错,所以问题就应该是两者冲突了.导致的结果我也发现了,前台的DIY功能不能用了.   我还花了很多时间在那里研究冲突的地方,后来还是没能解决.之 ...

  3. 创建第一个MVC专案--初识MVC

    MVC1.0正式版2009就上市了,可自己今年才开始去接触,汗颜~ 自己在学的过程中也看过一些文章,很多都是大致介绍的没有连接数据库实现下操作,直至自己买了本后发现MVC有很强大的数据库操作类已封装好 ...

  4. docker swarm 命令

    初始化swarm manager并制定网卡地址 docker swarm init --advertise-addr 192.168.10.117 强制删除集群,如果是manager,需要加–forc ...

  5. 图形学思考 - 聊聊透视图投射矩阵perspective projective matrix

    from:版权声明:本文作者靖心,靖空间地址:http://blog.csdn.net/kenden23/,未经本作者允许不得转载. 什么是透视图投射矩阵perspective projective ...

  6. Kid的某些跳刺套路

    需要按二段方向键的跳跃: 中途松开方向键的跳跃: 中途按下方向键的跳跃: 意想不到的小跳(如果上方有墙,小跳比大跳磕头跳的更远)(kid站的是最后的位置): 意想不到的小跳*2: 意想不到的小跳*3( ...

  7. mongodb获取具体某一天的查询语句

    比如我要查询截止日期为2010-12-21这一天的数据记录.方法一. db.集合名.find({con_date:new Date("2010/12/21")})1方法二. db. ...

  8. [ActionScript 3.0] 嵌入字体

    首先我们要生成一个swf的字体库,以微软雅黑为例,新建YaHei_font.fla,ctrl+L,在库面板中右键→新建字型,弹出字体元件属性窗口,选择要嵌入的字体, 并选择为ActionScript ...

  9. 队列优化dijsktra(SPFA)的玄学优化

    转载:大佬博客 最近想到了许多优化spfa的方法,这里想写个日报与大家探讨下 前置知识:spfa(不带任何优化) 由于使用较多 STLSTL ,本文中所有代码的评测均开启 O_2O2​ 优化 对一些数 ...

  10. 2016级算法第二次上机-A.画个圈圈诅咒你

    890 画个圈圈诅咒你 思路 简单题.题目中的圆并没有什么实际作用,简化成线段重合问题会更好理解些. 暴力解法:使用双重for循环会T到想哭,记住最直接的方法一般是过不了题的. 解法一:二分查找.空间 ...