
第7章输入输出系统.doc
20页第7章 输入输出系统7.1 I/O 流概述7.2 流的分类7.3 字节流的处理7.4 字符流的处理7.5 文件处理7.6 对象的串行化7.7 输入输出程序例幻灯片27.1 I/O 流概述l 在Java中,把所有的输入和输出都当做流来处理 "流"是一个抽象概念,它代表任何有能力产出数据的数据源对象或者是有能力接收数据的接收端对象"流"屏蔽了实际的输入/输出设备中处理数据的细节l 一个程序可以打开一个数据源上的流,然后按顺序读取这个流中的数据到程序中,这样的流称为输入流;一个程序也可以打开一个目的地的流,然后按顺序的把程序中的数据写入到这个目的地中,这样的流称为输出流,其过程如图所示幻灯片3l JDK 提供了包java.io,其中包括一系列的类来实现输入/输出处理幻灯片47.2 流的分类l Java的输入/输出流中,根据它们的数据类型,主要可分为两类:字节流(Btye Stream)和字符流(Character Stream)l 在java.io中包含子类较多的有“四大家族”,它们分别是l InputStream, OutputStreaml Reader, Writer幻灯片51. 字节流l 字节流是按字节读/写二进制数据。
l 字节流有两个基本的类:InputStream类和OutputStream类InputStream类用于处理字节输入流,OutputStream类用于处理字节输出流,这两个都是抽象类l 从InputStream和OutputStream派生出来的一系列类这类流以字节(byte)为基本处理单位 幻灯片6幻灯片82. 字符流l 字符流的输入/输出数据是字符码,即Unicode字符l 字符流有两个基本类:Reader类和Writer类Reader类用于处理字符输入流,Writer类用于处理字符输出流l 从Reader和Writer派生出的一系列类,这类流以16位的Unicode码表示的字符为基本处理单位 幻灯片10幻灯片113. 其它l 文件处理:l File、RandomAccessFile;l 接口:l DataInput、DataOutput、ObjectInput、ObjectOutput;幻灯片127.3 字节流的处理1. InputStreaml ◇ 从流中读取数据:l int read( ) //读取一个字节,返回值为所读的字节l int read( byte b[ ] ) //读取多个字节,放置到字节数组b中,通常读取的字节数量为b的长度,返回值为实际读取的字节的数量l int read( byte b[ ], int off, int len ) //读取len个字节,放置到以下标off开始字节数组b中,返回值为实际读取的字节的数量 l int available( ) //返回值为流中尚未读取的字节的数量l long skip( long n ) //读指针跳过n个字节不读,返回值为实际跳过的字节数量幻灯片13l ◇ 关闭流:l close( ) //流操作完毕后必须关闭l l ◇ 使用输入流中的标记:l void mark( int readlimit ) //记录当前读指针所在位置,readlimit表示读指针读出readlimit个字节后所标记的指针位置才失效l void reset( ) //把读指针重新指向用mark方法所记录的位置l boolean markSupported( ) //当前的流是否支持读指针的记录功能幻灯片142.OutputStreaml ◇ 输出数据:l void write( int b ) //将指定的字节写入此输出流,要写入的字节是参数 b 的八个低位。
b 的 24 个高位将被忽略l void write( byte b[ ] ) //将 b.length 个字节从指定的字节数组写入此输出流l void write( byte b[ ], int off, int len ) //把字节数组b中从下标off开始,长度为len的字节写入流中 l ◇ flush( ) //刷空输出流,并输出所有被缓存的字节由于某些流支持缓存功能,该方法将把缓存中所有内容强制输出到流中l l ◇ 关闭流:l close( ) //流操作完毕后必须关闭幻灯片153. 标准流l 在Java程序开始执行时,Java会创建三个与设备相关联的流对象:System.in、System.out和System.errl System.in 标准输入流,类型是InputStreaml 对象使程序能够读取来自键盘的输入;l System.out 标准输出流,类型是PrintStreaml 对象使程序能够向屏幕输出数据;l System.err 标准错误流,类型是PrintStreaml 对象使程序能够向屏幕输出错误信息幻灯片16l 每种标准流都可以被重定向。
对System.in进行重定向,程序能够从其它数据源读取数据;对System.out和System.err进行重新定向,使程序能够将输出数据和错误信息发送到其它的位置,比如磁盘上的某个文件l 例:P152幻灯片174. 在使用输入输出流类时,有两个语句总是要注意的:l 一是导入java.io包(import java.io.*;);l 二是对IOException异常的处理,一般是在调用的方法的声明时"throws IOException",当然也可以用try-catch语句进行异常处理幻灯片185. 过滤流l 过滤流在读/写数据的同时可以对数据进行处理,它将其它流用作其基本数据源,它可以直接传输数据或提供一些额外的功能l 类FilterInputStream和FilterOutputStream分别作为所有过滤输入流和输出流的父类幻灯片19l 为了使用一个过滤流,必须首先把过滤流连接到某个输入/出流上,通常通过在构造方法的参数中指定所要连接的输入/出流来实现例如:l FilterInputStream( InputStream in );l FilterOutputStream( OutputStream out );幻灯片20几种常见的过滤流l ◇ BufferedInputStream和BufferedOutputStreaml 缓冲流,用于提高输入/输出处理的效率。
l ◇ DataInputStream 和 DataOutputStreaml 不仅能读/写数据流,而且能读/写各种的java语言的基本类型,如:boolean,int,float等l ◇ LineNumberInputStreaml 除了提供对输入处理的支持外,LineNumberInputStream可以记录当前的行号l ◇ PushbackInputStreaml 提供了一个方法可以把刚读过的字节退回到输入流中,以便重新再读一遍l ◇PrintStreaml 输出各种数据值表示形式幻灯片21BufferedInputStreaml BufferedInputStream(InputStream in) l 创建一个 BufferedInputStream 并保存其参数,即输入流 in,以便将来使用 l BufferedInputStream(InputStream in, int size) l 创建具有指定缓冲区大小的 BufferedInputStream 并保存其参数,即输入流 in,以便将来使 幻灯片22BufferedOutputStreaml BufferedOutputStream(OutputStream out) l 创建一个新的缓冲输出流,以将数据写入指定的底层输出流。
l BufferedOutputStream(OutputStream out, int size) l 创建一个新的缓冲输出流,以将具有指定缓冲区大小的数据写入指定的底层输出流 幻灯片23DataInputStreaml DataInputStream(InputStream in) l 使用指定的底层 InputStream 创建一个 DataInputStreaml int read(byte[] b) l boolean readBoolean() l byte readByte() l char readChar() l double readDouble() l float readFloat() l int readInt() 幻灯片24DataOutputStreaml DataOutputStream(OutputStream out) l 创建一个新的数据输出流,将数据写入指定基础输出流l void writeBoolean(boolean v) l void writeByte(int v) l void writeBytes(String s) l void writeChar(int v) l void writeChars(String s) l void writeDouble(double v) l void writeFloat(float v) l void writeInt(int v) l void writeLong(long v) l void writeShort(int v) 幻灯片25PrintStreaml PrintStream 为其他输出流添加了功能,使它们能够方便地打印各种数据值表示形式(字符)。
它还提供其他两项功能:l 与其他输出流不同,PrintStream 永远不会抛出 IOException,而是异常情况仅设置可通过 checkError 方法测试的内部标志l 自动刷新幻灯片26l PrintStream(File file) l 创建具有指定文件且不带自动行刷新的新打印流 l PrintStream(File file, String csn) l 创建具有指定文件名称和字符集且不带自动行刷新的新打印流 l PrintStream(OutputStream out) l 创建新的打印流 l PrintStream(OutputStream out, boolean autoFlush) l 创建新的打印流 l PrintStream(OutputStream out, boolean autoFlush, String encoding) l 创建新的打印流 l PrintStream(String fileName) l 创建具有指定文件名称且不带自动行刷新的新打印流 l PrintStream(String fileName, String csn) l 创建具有指定文件名称和字符集且不带自动行刷新的新打印流。
幻灯片276. FileInputStreaml 从文件系统中的某个文件中获得输入字节l FileInputStream(File file) l 通过打开一个到实际文件。






![河南新冠肺炎文件-豫建科[2020]63号+豫建科〔2019〕282号](http://img.jinchutou.com/static_www/Images/s.gif)





