IO流
开发工具与关键技术:MyEclipse 10、Java
作者:潘玉莹
撰写时间:2019-05-22
一、 什么是流
Java的IO流是实现输入/输出的基础,它可以方便地实现数据的输入/输出操作,在 Java中把不同的输入/输出源(键盘、文件、网络连接等)抽象表述 为“流”(stream),通过流的方式允许Java程序使用相同的方式来访问不同的输入输 出源。 stream是从起源(source)到接收(sink)的有序数据。 Java把所有传统的流类型(类或抽象类)都放在java.io包中,用以实现输入输出功能。
二、 流的分类
- 输入流和输出流
按照流的流向来分,可以分为输入流和输出流。输入、输出都是从程序运行所在 内存的角度来划分的。
输入流:只能从中读取数据,而不能向其写入数据。由InputStream和 Reader作为基类
输出流:只能向其写入数据,而不能从中读取数据。由OutputStream和Writer作为基类 - 字节流和字符流
字节流和字符流的用法几乎完全一样,区别在于字节流和字符流所操作的数据单元不同
字节流操作的数据单元是8位的字节,由InputStream和OutputStream作为基类
字符流操作的数据单元是16位的字符,由 Reader和 Writer作为基类。 - 节点流和处理流
按照流的角色来分,可以分为节点流和处理流。
节点流:可以从向一个特定的IO设备(如磁盘、网络)读/写数据的流。也 被称为低级流。
处理流:用于对一个已存在的流进行连接或封装,通过封装后的流来实现数 据读/写功能。也称为高级流。
三、 流的物理模型
注:倾斜+下划线代表抽象类,无法创建实例,红色的代表节点流,必须与指定的物理节点关联使用:如图所示
分类 字节输入流 字节输出流 字符输入流 字符输出流
抽象基类 InputSiream OutputStream Reader Writer
访问文件 FilelnputStream FileOutputStream FileReader FileWriter
访问数组 ByteArraylnputStream ByteArrayOutputStream CharArrayReader CharArrayWriter
访问管道 PipedlnputStream PipedOutputStream PipedReader PipedWriter
访问字符串 StringReader StringWriler
缓冲流 BufferedlnputStrcam BufferedOutputStrem BufferedReader BufferedWriter
转换流 InputStreamReader OutputStreamWriter
对象流 ObjectlnputStream ObjectOutputStream
抽象基类 FilterInputStream FilterOutputStream FilterReader FilterWriter
打印流 PrintStream PrintWriter
推回输入流 PushbacklnputStream PushbackReader
四、 字节流和字符流的区别
字节流和字符流的操作方式几乎完全一样,区别只是操作的数据单元不同而已。字节流操作的数据单元是字节,字符流操作的数据单元是字符。InputStream和Reader的方法基本一致,只是InputStream读取的是字节,使用的参数是byte数组(byte[]),而Reader读取的是字符,使用的参数是char数组(char[])
InputStream和Reader都是抽象类,本身不能创建实例,但它们分别有一个用于读取 文件的输入流:FileInputStream和 FileReader,它们都是节点流需要直接和指定文件 关联。
五、 字节流输入流首先确定是字节输入流,所以确定用的是InputStream作为基类然后用FileInputStream访问文件,声明一个字节数组存放读取的流,然后再进行遍历,最后关闭流。代码如图所示
执行代码如图所示 访问文件如下
六、 字符流输入流首先确定是字符输入流,所以确定用的是read作为基类然后用FileRead访问文件,声明一个字符数组存放读取的流,然后再对数据进行遍历,最后关闭流。代码如图所示
执行代码如图所示 访问文件
七、 字节输出流首先确定是字符输出流,所以确定用的是OutputStream作为基类,声明一个字符串;然后用FileOutSteam访问文件,声明一个字节数组存放读取的流,然后再对数据进行遍历,把流推进最后关闭流。代码如图所示
执行结果如图所示 输出的为你声明的字符串
八、 字符输出流首先确定是字符输出流,所以确定用的是write作为基类,声明一个字符串;然后用Filewriter访问字符,声明一个字符数组存放读取的流,然后再对数据进行遍历,把流推进最后关闭流。代码如图所示
执行代码如图所示