Jav最新实用教程 第七章鞠入鞠业流
Java最新实用教程 第七章 输入输出流
Jav最新实用教程 学习目的: 掌握流的概念、标准的输入隃出流类、内存读写流类 文件的输入输出类、管道流类、连接多个流的方法和过 滤流类的常用功能 n了解 java. lo包中的其他流类 学习重点 标准的输入输出流 "内存读写流 管道流 文件输入输出流 过滤流 2021年2月20日星期六
Java最新实用教程 2021年2月20日星期六 2 ⚫ 学习目的: ▪ 掌握流的概念、标准的输入/输出流类、内存读写流类、 文件的输入输出类、管道流类、连接多个流的方法和过 滤流类的常用功能 ▪ 了解java.io包中的其他流类 ⚫ 学习重点: ▪标准的输入输出流 ▪内存读写流 ▪管道流 ▪文件输入输出流 ▪过滤流
Jav最新实用教程 第七章输入输出流 本章提要: 流的概念 2常见的ⅣO流 ■标准输入输出流 ■内存读写流 ■管道流 ■文件输入输出流 ■连接多个流 ■过滤流 2021年2月20日星期六
Java最新实用教程 2021年2月20日星期六 3 第七章 输入输出流 本章提要: 1. 流的概念 2. 常见的I/O流 ◼ 标准输入输出流 ◼ 内存读写流 ◼ 管道流 ◼ 文件输入输出流 ◼ 连接多个流 ◼ 过滤流
Jav最新实用教程 71流的概念 流是指在计算机的输入与输出之间流动的数据序 列;是从数据源串行地流向数据目的地。 ■输入流是指从外设流入计算机的数据流。 ■输出流是指从计算机流向外设的数据流。 2021年2月20日星期六
Java最新实用教程 2021年2月20日星期六 4 7.1 流的概念 流是指在计算机的输入与输出之间流动的数据序 列;是从数据源串行地流向数据目的地。 ◼输入流是指从外设流入计算机的数据流。 ◼输出流是指从计算机流向外设的数据流
Jav最新实用教程 72常见的IO流 Inputstream是表示字节输入流的所有类的超类。需要定义 Inputstream的子类的应用程序必须始终提供返回下一个输 入字节的方法,也就是以字节作为基本处理单位。直接已 知子类: AudioInputStream, ByteArray Inputstream, FileinputStream, FilterInputStream, Inputstream ObjectInputStream, PipedInputstream SequenceInputstream, StringBufferInputstream Outputstream是表示输出字节流的所有类的超类。输出流 接受输出字节并将这些字节发送到某个接收器,需要定义 0 jutputstream子类的应用程序必须始终提供至少一种可写 入一个输出字节的方法。直接已知子类: ByteArrayOutputStream, FileOutputstream FilterOutputstream, ObjectOutputstream OutputStream, Pipedoutputstream 2021年2月20日星期六
Java最新实用教程 2021年2月20日星期六 5 7.2常见的I/O流 ◼ InputStream是表示字节输入流的所有类的超类。需要定义 InputStream的子类的应用程序必须始终提供返回下一个输 入字节的方法,也就是以字节作为基本处理单位。直接已 知子类:AudioInputStream, ByteArrayInputStream, FileInputStream, FilterInputStream, InputStream, ObjectInputStream, PipedInputStream, SequenceInputStream, StringBufferInputStream ◼ OutputStream是表示输出字节流的所有类的超类。输出流 接受输出字节并将这些字节发送到某个接收器,需要定义 OutputStream 子类的应用程序必须始终提供至少一种可写 入一个输出字节的方法。直接已知子类: ByteArrayOutputStream, FileOutputStream, FilterOutputStream, ObjectOutputStream, OutputStream, PipedOutputStream
Jav最新实用教程 72常见的IO流 ■ Reader用于读取字符流的抽象类。子类必须实现的方法 只有read(char[],int,int)和 close()。但是, 多数子类将重写此处定义的一些方法,以提供更高的效 率和/或其他功能。直接已知子类: BufferedReader, CharArrayReader, FilterReader InputstreamReader, PipedReader Stringreader ■ Writer写入字符流的抽象类。子类必须实现的方法仅有 Wrie(char[],int,int)、 flush和 close(。但 是,多数子类将重写此处定义的一些方法,以提供更高 的效率或其他功能。直接已知子类: Bufferedwriter, CharArrayWriter, FilterWriter, OutputstreamWriter, PipedWriter, PrintWriter String Writer
Java最新实用教程 2021年2月20日星期六 6 7.2常见的I/O流 ◼ Reader用于读取字符流的抽象类。子类必须实现的方法 只有 read(char[], int, int)和 close()。但是, 多数子类将重写此处定义的一些方法,以提供更高的效 率和/或其他功能。直接已知子类:BufferedReader, CharArrayReader, FilterReader, InputStreamReader, PipedReader, StringReader ◼ Writer写入字符流的抽象类。子类必须实现的方法仅有 write(char[], int, int)、flush() 和 close()。但 是,多数子类将重写此处定义的一些方法,以提供更高 的效率或其他功能。直接已知子类:BufferedWriter, CharArrayWriter, FilterWriter, OutputStreamWriter, PipedWriter, PrintWriter, StringWriter
Jav最新实用教程 72.1标准输入输出流 Java的标准数据流是指在字符方式下(如D0S),程序与 系统进行交互的方式,分为三种: System. in:“标准”输入流。此流已打开并准备提供输入数据。通常,此 流使程序能够读取来自键盘输入或者由主机环境或用户指定的另一个输入 源的输入 ■ System.out:“标准”输出流。此流已打开并准备接受输出数据。通常, 此流使程序能够向屏幕输出数据或者向主机环境或用户指定的另一个输出 目标输出数据。通常,此流使程序能够在屏幕上显示出错信息。 System.err:“标准”错误输出流。此流已打开并准备接受输出数据。通 常,此流使程序能够在屏幕上显示出错信息。按照惯例,此输出流用于显 示错误消息,或者显示那些即使用户输出流(变量out的值)已经重定向 到通常不被连续监视的某一文件或其他目标,也应该立刻引起用户注意的 其他信息。 例7-1 2021年2月20日星期六
Java最新实用教程 2021年2月20日星期六 7 7.2.1标准输入/输出流 Java的标准数据流是指在字符方式下(如DOS),程序与 系统进行交互的方式,分为三种: ◼ System.in:“标准”输入流。此流已打开并准备提供输入数据。通常,此 流使程序能够读取来自键盘输入或者由主机环境或用户指定的另一个输入 源的输入。 ◼ System.out:“标准”输出流。此流已打开并准备接受输出数据。通常, 此流使程序能够向屏幕输出数据或者向主机环境或用户指定的另一个输出 目标输出数据。通常,此流使程序能够在屏幕上显示出错信息。 ◼ System.err:“标准”错误输出流。此流已打开并准备接受输出数据。通 常,此流使程序能够在屏幕上显示出错信息。按照惯例,此输出流用于显 示错误消息,或者显示那些即使用户输出流(变量out 的值)已经重定向 到通常不被连续监视的某一文件或其他目标,也应该立刻引起用户注意的 其他信息。 例7-1
Jav最新实用教程 722内存读写 Java I/0流包括从内存中的字节数组中读取数据,以及向内 存中的字节数组输出数据的功能。 ByteArray Inputstream从内 存中的字节数组读入数据; ByteArrayOutputstream则向内存 中的字节数组输出数据。 1、 ByteArrayInputstream流 ByteArray Inputstream是把字节数组 当成源的输入流。该类有两个构造函数,每个构造函数需要 个字节数组提供数据源: ByteArrayInputstream(byte arrayal ByteArrayInputStream(byte array, int start, int num Bytes) array是输入源。第二个构造函数创建了一个 InputStream类,该类从 字节数组的子集生成,以 start指定索引的字符为起点,长度由 numBytes决 定。下面以一个例子来说明 ByteArray Inputstream的用法。 例7-2 2021年2月20日星期六
Java最新实用教程 2021年2月20日星期六 8 7.2.2内存读写 Java I/O流包括从内存中的字节数组中读取数据,以及向内 存中的字节数组输出数据的功能。ByteArrayInputStream从内 存中的字节数组读入数据;ByteArrayOutputStream则向内存 中的字节数组输出数据。 1、 ByteArrayInputStream流ByteArrayInputStream是把字节数组 当成源的输入流。该类有两个构造函数,每个构造函数需要一 个字节数组提供数据源: ByteArrayInputStream(byte array[ ]) ByteArrayInputStream(byte array[ ], int start, int numBytes) array是输入源。第二个构造函数创建了一个InputStream类,该类从 字节数组的子集生成,以start指定索引的字符为起点,长度由numBytes决 定。下面以一个例子来说明ByteArrayInputStream的用法。 例7-2
Jav最新实用教程 722内存读写 2、 ByteArrayOutputstream流 ByteArrayOutputStream是一个把字节数组当作输 出流的实现。 ByteArrayOutputstream有两个构造函数 ,如下: ByteArrayOutputstreamo ByteArrayOutputStream(int num Bytes) 在第一种形式里,一个32位字节的缓冲器被生成 。第二个构造函数生成一个跟指定 numBytes相同位数 的缓冲器。缓冲器保存在 ByteArrayOutputStream的受 保护的buf成员里。缓冲器的大小在需要的情况下会自 动增加。缓冲器保存的字节数是由 ByteArrayOutputstream的受保护的 count域保存的 例7-3 2021年2月20日星期六
Java最新实用教程 2021年2月20日星期六 9 7.2.2内存读写 2、ByteArrayOutputStream流 ByteArrayOutputStream是一个把字节数组当作输 出流的实现。ByteArrayOutputStream有两个构造函数 ,如下: ByteArrayOutputStream( ) ByteArrayOutputStream(int numBytes) 在第一种形式里,一个32位字节的缓冲器被生成 。第二个构造函数生成一个跟指定numBytes相同位数 的缓冲器。缓冲器保存在ByteArrayOutputStream的受 保护的buf成员里。缓冲器的大小在需要的情况下会自 动增加。缓冲器保存的字节数是由 ByteArrayOutputStream的受保护的count域保存的。 例7-3
Jav最新实用教程 7.2.3管道流 管道是线程或进程间的同步通信渠道。Java流中也引入了 管道的概念,它提供 了 Pipedinputstream流和 PipedOutputStreami 流来建立两个线程间的管道。一个线程通 过 PipedOutputStreaml向另一线程发送数据。而目标线程则通 过 PipeInputstream从管道读取信息。 //发送方源程序( Sender.java) import java. io. * import java util. *k public class Sender extends Thread PipedoutputStream out new PipedOutputStream o public PipedOutputStream getOut freturn out public void runo IString str=Hello, Receiver I m sender \n try fout write(str. getByteso //将str中的内容写到当前管道中 out. close o;//关闭当前管道输出流} catch(Exception e) e printStackTrace o: ] )] 2021年2月20日星期六
Java最新实用教程 2021年2月20日星期六 10 7.2.3管道流 管道是线程或进程间的同步通信渠道。Java流中也引入了 管道的概念,它提供了PipedInputStream流和 PipedOutputStream流来建立两个线程间的管道。一个线程通 过PipedOutputStream向另一线程发送数据。而目标线程则通 过PipeInputStream从管道读取信息。 //发送方源程序(Sender.java) import java.io.*;import java.util.*; public class Sender extends Thread { PipedOutputStream out = new PipedOutputStream(); public PipedOutputStream getOut(){return out;} public void run() {String str = "Hello,Receiver ! I`m sender\n"; try{out.write(str.getBytes()); //将str中的内容写到当前管道中 out.close(); //关闭当前管道输出流 } catch(Exception e){ e.printStackTrace();} }}