IO流是什么:流是一种有顺序,有起点有重点的字节集合,是对数据传输的总称或抽象,即设备之间的数据的传输称为流。流的本质是数据传输。
IO是流是干什么用的:流是用来传输数据的。
IO流什么时候用:请求服务器的,设备之间传输数据,读写数据都用流。
介绍完流的概念以及作用简单的总结一下io流
1. IO流主要用于硬盘、内存、键盘等处理设备上的数据操作。
2. 根据处理数据的不同可分为字符流(即处理字符数据)和字节流(即处理除字符以外的所有数据当然字节流也可以处理字符)
3. 跟了流向不同可以分为:输出流和输入流
常用IO流结构图
|-àBufferReader
|-àReader -à|
|------à字符流------| |à|InputStreamReader-àFileReader
| | |-àBufferWriter
|-àWriter-à|
|-àOutputStreamWriter -àFileWriter
流--- | |--àFileInputStream
| |àInputStream-à|
|-àFilterInputStream-àBufferedInputStream
|-------à字节流------|
|-àFileOutputStream
|àOutputStreamà|
|-àFliterOutputStream-àBufferedOutputStream
1. 字节流与字符流的区别:
1. 读写单位不同, 字节流读取的时候,读一个字节就返回一个字节(8bit);字符流使用字节流读到一个或者多个字节,先去查询指定的编码表,将查到的字符返回。
2. 处理对象不同,字节流可以处理所有的类型的数据(图片,mp3\mp4等),字符流只能处理字符数据(即纯文本数据)
2.输入流和输出流
对输入流只能进行读操作(即读取内存中的数据),对输出流只能进行写操作(即把内存中的数据写到硬盘上)
3.输入流InputStream
1.是所有输入字节流的父类,抽象类
2.ByteArrayInputStream、StringBufferInputStream、FileInputStream 基本的介质流,它们分别从Byte数组、StringBuffer和 本地文件中读取数据。
3.PipedInputStream是从其他的线程公用的管道中读取数据。
4.ObjectInputSteam 和所有的FilterInputStream的子类都是装饰流
4.输出流OutputStream
1.所有字节输出流的父类,抽象类
2.ByteArrayOutputStream、FileOutputStream两种基本的介质流,它们分别重byte数组和本地文件中写数据。
3.PipedOutputStream是向其他线程公共的管道中写入数据
4.ObjectOutputStream 、FliterOutputStream的子类都是装饰流
总结:输入流:InputStream、Reader 从文件中读到程序中
输出流:OutputSream、writer从程序中写到文件中。
5.节点流
直接与数据源相连,读入或者读出。
数据源----------à--------à程序
节点流
常用的节点流:
父类 InputStreamOutputStream Rrader Writer
文件 FileInputStreamFileOutputStream FileReader FileWriter 对文件进行处理的节点流
数组
ByteArrayInputStream,ByteArrayOutputStream,ChraArrayReader.CharArrayWriter
字符串
StringReader StringWriter
管道
PipedInputStream,PipedOutputStream,PipedReader.PipedWriter对管道进行处理的节点流
6.处理流
处理流和节点流一块使用,在节点流的基础上,在套一层,套接在节点流上的就是处理流,比如BufferReader 处理流的构造中总是带一个其他流对象作为参数。一个流对象经过其他流的多次包装,称为流的链接。
常用的处理流
1. 缓冲流:BufferedInputStreamBufferedOutputStream,BufferedReader,BufferedWriter
增加缓冲功能,避免频繁读写硬盘
2. 转换流:InputStreamReader,OutputStreamWriter实现字节流与字符流之间的转换
3. 数据流:DataInputSream.DataOutputStream提供基础数据类型的写入或者读出
InputStreamReader(inputStream) //通过构造函数初始化,使用的是本系统默认的编码表GBK。
InputStreamWriter(InputStream,String charSet); //通过该构造函数初始化,可以指定编码表。
OutputStreamWriter(OutputStream); //通过该构造函数初始化,使用的是本系统默认的编码表GBK。
OutputStreamwriter(OutputStream,String charSet); //通过该构造函数初始化,可以指定编码表。