您好,欢迎访问三七文档
ClicktoeditMastertitlestyleJAVA程序设计ClicktoeditMastertitlestyle第8章IO流本章目录8.1流与相关类8.2标准I/O流8.3文件输入输出流8.4随机访问文件8.5压缩8.6XMLI/O介绍创建一个好的输入/输出系统是一项艰难的任务I/O的挑战:•与不同的源和接收端进行交互,包括文件、控制台、网络链接等;•以不同的方式与它们进行通信(顺序、随机存取、缓冲、二进制、按照字符、按行、按字节等);•大多数I/O需要进行异常处理ProgramFile00101………ProgramFile00101………Program00101………NetWorkProgram101………Program101………ProgramFile00101………“Hello”在Java程序中,对于数据的输入/输出操作以流的方式进行Java提供了各种各样的流,来处理不同种类的数据8.1流与相关类1.流的概念使用多个流类型(类或抽象类)来实现输入/输出的功能隐藏了实际I/O设备处理数据的细节字节流字符流输入流InputStreamReader输出流OutputStreamWriter1.流的概念字节流:以字节为处理单位的流。主要用于处理二进制数。最基本的流字符流:以字符为处理单位的流。一个字符为两个字节InputStream(字节,8bits)OutputStream(字节,8bits)2.字节流及其方法InputStreamFileInputStreamPipedInputStreamByteArrayInputStreamFilterInputStreamSequenceInputStreamStringBufferInputStreamObjectBufferInputStreamLineNumberInputStreamDataInputStreamBufferedInputStreamPushbackInputStreamOutputStreamFileOutputStreamFilterOutputStreamPipedOutputStreamByteArrayOutputStreamObjectOutputStreamDataOutputStreamBufferedOutputStreamPrintStream类功能ByteArray-InputStream允许将内存的缓冲区当作InputStream使用StringBuffer-InputStream将String转换成InputStreamFile-InputStream用于从文件中读取信息Piped-InputStream产生用于写入相关PipedOutput-Stream的数据。实现“管道化”概念。Sequence-InputStream将两个或多个InputStream对象转换成单一InputStream。InputStream的子类型Buffered-InputStream使用它可以防止每次读取时都得进行实际的读操作。代表“使用缓冲区”。LineNumber-InputStream跟踪输入流中的行号;可调用getLineNumber( )和setLineNumber(int).Data-InputStream与DataOutputStream搭配使用,因此我们可以参照可移植方式从流读取基本数据类型(int,char,long,etc.)Pushback-InputStream具有一个字节的回退缓冲区,因此可以将读到的最后一个字符回退。FilterInputStream的子类InputStream的方法(throwsIOException)要捕捉和处理异常intread()从输入流中读取一个字节返回intread(byte[]buffer)intread(byte[]buffer,intoffset,intlength)voidclose()longskip(longn)InputStream的方法InputStreamFileInputStreamPipedInputStreamByteArrayInputStreamFilterInputStreamSequenceInputStreamStringBufferInputStreamObjectBufferInputStreamLineNumberInputStreamDataInputStreamBufferedInputStreamPushbackInputStreamOutputStream的方法(throwsIOException)要捕捉和处理异常voidwrite(intb)把字节b加入到输出流中voidwrite(byte[]b)voidwrite(byte[]b,intoff,intlen)voidclose()voidflush()OutputStream的方法OutputStreamFileOutputStreamFilterOutputStreamPipedOutputStreamByteArrayOutputStreamObjectOutputStreamDataOutputStreamBufferedOutputStreamPrintStreamReader(字符,16bits)Writer(字符,16bits)3.字符流及其方法ReaderBufferedReaderInputStreamReaderCharArrayReaderFilterReaderPipedReaderLineNumberReaderFileReaderPushbackReaderStringReaderWriterCharArrayWriterFilterWriterOutputStreamWriterPipedWriterStringWriterFileWriterPrintWriterBufferedWriterReader的方法(throwsIOException)要捕捉和处理异常intread()从输入流中读取一个字符返回intread(char[]cbuf)intread(char[]cbuffintoffset,intlength)voidclose()longskip(longn)Reader的方法Writer的方法(throwsIOException)要捕捉和处理异常voidwrite(intc)把字符c加入到输出流中voidwrite(char[]cbuf)voidwrite(char[]cbuff,intoffset,intlength)voidwrite(Stringstring)voidwrite(Stringstring,intoffset,intlength)voidclose()voidflush()Writer的方法节点流:可以从一个特定的数据源(节点)读写数据处理流(过滤流):对一个已存在流的封装。通过调用所封装流的功能实现数据读写、修改等功能缓冲流打印流数据流:提供了可以存取与机器无关的Java基本类型数据的方法对象流:支持Object的输入输出。使任意一个或一组对象可以像数据流一样输入输出。需要进行对象序列化4.一些IO流的术语标准I/O三个标准I/O流–System.in:InputStream类的对象实例in作为标准输入流对象,对应于键盘输入–System.out:PrintStream类的对象实例out作为标准输出流对象,对应于显示器输出–System.err:PrintStream类的对象实例err作为标准错误输出流对象,对应于显示器输出参见基本I/O流例子8.2标准I/O流(1)节点流类型字节流字符流文件FileInputStreamFileOutputStreamFileReaderFileWriter内存数组ByteArrayInputStreamByteArrayOutputStreamCharArrayReaderCharArrayWriter内存字符串--------------StringReaderStringWriter管道PipedInputStreamPipedOutPutStreamPipedReaderPipedWriter(2)处理流(过滤流)–结合在其他流之上–修改或管理流中数据,并提供额外的功能ProgramFileProcessingstreams(2)处理流(过滤流)字符字节流字符流缓冲BufferedInputStreamBufferedOutputStreamBufferedReaderBufferedWriter过滤FilterInputStreamFilterOutputStreamFilterReaderFilterWriter字节与字符间转换--------------InputStreamReaderOutputStreamWriter数据转换DataInputStreamDataOutputStream--------------对象ObjectInputStreamObjectOutputStream--------------打印PrintStreamPrintWriter没有缓冲的I/O,直接读写效率低为了解决这种缺点,Java提供了缓冲的I/O流–带缓冲的输入流从一个类似于缓冲区的内存区域中读取数据,当缓冲区为空时,调用基本的输入API–同样地,缓冲输出流向缓冲区中写数据,在缓冲区已满时调用基本的输出API参见字节到字符转换,以及字符缓冲示例(3)缓冲流相关类的构造方法BufferedReader(Readerin)BufferedReader(Readerin,intsz)BufferedWriter(Writerout)BufferedWriter(Writerout,intsz)BufferedlnputStream(InputStreamin)BufferedlnputStream(InputStreamin,intsize)BufferedOutputstream(Outputstreamout)BufferedOutputstream(Outputstreamout,intsize)(3)缓冲流字节到字符转换类的构造方法InputStreamReader(InputStreamin)OutputStreamWriter(OutputStreamout)PrintStream字节流PrintWriter字符流-为其他输出流添加了功能,使它们能够方便地打印各种数据值表示形式。分别针对字节和字符,提供了重载的print和println方法用于多种数据类型的输出不抛出IOException自动的Flush构造函数PrintStream(OutputStreamout)PrintWriter(OutputStreamout)PrintWriter(Writerout)参见打印流示例(4)打印流数据流(DataInputStream/DataOutputStream)数据流提供了可以存取与机器无关的Java原始类型的数据的方法,支持原始数据类型的输入输出,包括:boolean,char,byte,short,int,long,float等类型所有的数据流分别继承自InputStream和OutputStream,实现了DataInput和DateOutput接口需要在InputStream和OutputStream类型的流上,也就是在字节流之上进行构造构造函数-DataInputStream(InputStreamin)-DataOutputStream(OutputStreamout)数据流示例(5)数据流对象流支持Object的输入输出–像数据流一样支持对象的输入输出–对象类需要序列化对象流包括ObjectInputStream和O
本文标题:JAVA IO流
链接地址:https://www.777doc.com/doc-5034887 .html