Java的IO输入输出流类的介绍(有图)
一.字节流
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输入输出流类的介绍(有图)的更多相关文章
- Java的IO流各个类的使用原则
参考:http://blog.csdn.net/ilibaba/article/details/3955799 Java IO 的一般使用原则(花多眼乱,其实每个类都有专门的作用): 这里有详细介绍: ...
- 第27章 java I/O输入输出流
java I/O输入输出流 1.编码问题 import java.io.UnsupportedEncodingException; /** * java涉及的编码 */ public class En ...
- Java复习7.输入输出流
Java复习7.输入输出流 20131005 前言: Java中涉及数据的读写,都是基于流的,这一块的知识相当重要,而且在Java中的数据,char字符是16bit的,所以存在字节流和字符流的区别.如 ...
- (Unity)XML文件读写与IO文件操作类使用介绍
using System.Xml; //xml文件操作命名空间 #region 写入操作 void WriteXMLFile(string _fileName) { Xm ...
- Java IO 输入输出流 详解 (一)***
首先看个图: 这是Javaio 比较基本的一些处理流,除此之外我们还会提到一些比较深入的基于io的处理类,比如console类,SteamTokenzier,Externalizable接口,Seri ...
- java io 输入输出流
数据流分类: 流序列中的数据既可以是未经加工的原始二进制数据, 也可以是经一定编码处理后符合某种格式规定的特定数据. 因此Java中的流分为两种: 1) 字节流:数据流中最小的数据单元是字节 2) 字 ...
- java.IO输入输出流:过滤流:buffer流和data流
java.io使用了适配器模式装饰模式等设计模式来解决字符流的套接和输入输出问题. 字节流只能一次处理一个字节,为了更方便的操作数据,便加入了套接流. 问题引入:缓冲流为什么比普通的文件字节流效率高? ...
- Java I/O输入输出流详解
一.文件的编码 开发时一定要注意项目默认的编码!!!!!!!! 文件操作的时候一定要记得关闭!!!!!!!! ASCII:美国标准 ...
- IO输入输出流
在Java中进行文件的读写,Java IO流是必备的知识. IO流指 的是输入输出流,用来处理设备上的数据.这里的设备指硬盘,内存,键盘录入,网络传输等. 按处理数据类型来分:字节流和字符流. 按流的 ...
随机推荐
- sql添加列,删除列,修改列
有时候,当数据库里面有数据了,再到设计器里面删除列,就删不掉.只能用代码删除. alter table tableName drop column columnName 添加列 ) 修改列 ) --修 ...
- .NET Core + gRPC 实现数据串流 (Streaming)
引入 gRPC 是谷歌推出的一个高性能优秀的 RPC 框架,基于 HTTP/2 实现.并且该框架对 .NET Core 有着优秀的支持.最近在做一个项目正好用到了 gRPC,遇到了需要串流传输的问题. ...
- 深入了解java虚拟机(JVM) 第五章 如何判断对象为垃圾对象
本章开始学习垃圾回收的过程,垃圾回收的过程首先就是要确定对象是否是垃圾对象,如果是垃圾对象,垃圾回收器才会进行回收.垃圾回收主要又两种算法:引用计数算法和可达性分析算法. 一.引用计数算法 引用计数算 ...
- mysql索引的应用场景以及如何使用
唯一的是什么? 1. 索引列(字段)的所有值都只能出现一次,即必须唯一 ---------------------------------------------------------------- ...
- Docker 下系统日志恢复
众所周知,docker 是一款进程级虚拟机.上文我们已经分析解释了该如何使用,本文针对日志消失问题进行恢复与解释. Docker 可以理解为阉割版的系统,内部功能不全.可以通过组件安装进行基本功能恢复 ...
- 20 行代码极速为 App 加上聊天功能
现在很多 App 都需要集成 IM 功能,今天就为大家分享一下集成 IM 基本功能的步骤.本文内容以 JMessage 为例.极光 IM ( JMessage ) = 极光推送 ( JPush ) + ...
- ajax方法参数详解与$.each()和jquery里面each方法的区别
JQuery中$.ajax()方法参数详解 url: 要求为String类型的参数,(默认为当前页地址)发送请求的地址. type: 要求为String类型的参数,请求方式(post或get)默认为g ...
- [Python]json 错误xx is not JSON serializable
TypeError: Decimal('1457501') is not JSON serializable 在使用json的时候经常会遇到xxx is not JSON serializable, ...
- POJ3076 Sudoku
POJ3076 Sudoku 本题为16*16宫格 剪枝见代码 #include <cstdio> #include <iostream> #include <algor ...
- leetcode-771-Jewels and Stones(建立哈希表,降低时间复杂度)
题目描述: You're given strings J representing the types of stones that are jewels, and S representing th ...