第一范文网 - 专业文章范例文档资料分享平台

ch09

来源:用户分享 时间:2025/5/26 0:24:16 本文由loading 分享 下载这篇文档手机版
说明:文章内容仅供预览,部分内容可能不全,需要完整文档或者需要复制内容,请下载word后使用。下载word有问题请添加微信号:xxxxxxx或QQ:xxxxxx 处理(尽可能给您提供完整文档),感谢您的支持与谅解。

第9章 输入输出流

流是指在通信路径上从信源到目的地传输的字节序列。多数应用程序都需要与外部设备进行数据交换,如磁盘和网络。Java语言的输入与输出功能通过流类来实现,这些类都存放在java.io包中。

本章要点

? 数据流的概念 ? 字节流类的用法 ? 字符流类的用法 ? 文件的读出与写入 本章难点

? 输入输出流类之间的关系 学习目标

? 掌握数据流的概念

? 掌握利用数据流输入与输出数据 ? 掌握文件的读出与写入

9.1 数据流的概念

9.1.1 输入流与输出流

流是按一定顺序排列的数据的集合。输入数据时,一个程序打开数据源上的一个流(文件或内存等),然后按顺序输入这个流中的数据,这样的流称为输入流。

输出数据时,一个程序可以打开一个目的地的流,然后按顺序从程序向这个目的地输出数据,这样的流称为输出流。

输入和输出的方向是以程序为基准的,向程序输入数据的流定义为输入流,从程序输出数据的流定义为输出流。通常,将从输入流中向程序中输入数据称为读数据(read),反之,从程序中将数据输出到输出流中称为写数据(write)。

9.1.2 字节流与字符流

按照Java的输入/输出流的数据类型,流可分为字节流和字符流两类。

1.字节流

字节流是按字节读/写二进制数据。

在javo.io包中,基本输入流类(InputStream)和基本输出流类(OutputStream)是处理以8位字节为基本单位的字节流类,读写以字节为单位进行。

在对数据流操作时,即可以向输出流写入一个字节,或从输入流中读取一个字节,显然这样数据的传输效率很低。

为提高数据的传输效率,通常使用缓冲流(buffered stream),即为一个流配有一个缓冲区(buffer),一个缓冲区就是专门用于传送数据的—块内存。

当向一个缓冲流写入数据时,系统将数据发送到缓冲区,而不是直接发送到外部设备。

缓冲区自动记录数据,当缓冲区满时,系统将数据全部发送到相应的设备。当从一个缓冲流中读取数据时,系统实际是从缓冲区中读取数据。当缓冲区空时,系统就会从相关设备自动读取数据,并读取尽可能多的数据充满缓冲区。由此可见,缓冲流提高了内存与外部设备之间的数据传输效率。

2.字符流

字符流的输入/输出数据是Unicode字符,当遇到不同的编码时,Java的字符流会自动将其转换成Unicode字符。Reader类和Writer类是专门处理16位字符流的类,其读写以字符为单位进行。

上述提到的InputStream类、OutputStream类、Reader类和Writer类均是基本输入和输出的抽象类,不能用于直接创建对象来完成输入输出操作,所以,需要使用这些类的子类来完成特定类型或格式的输入输出操作。

在Java编程操作中,文件操作是最常用的操作之一,我们可以利用字节流操作来完成对于随机文件的读取,可以利用字符流操作完成对于一般文本文件的读取。

图9-1列出了常用的基本流类,图9-2列出了字节流各类之间的关系,图9-3列出了字符流各类之间的关系。

InputStreamOutputStreamReaderWriterFileRandomAccessFileObject

图9-1 基本流类的继承关系

AudioInputStream声音输入流ByteArrayInputStream字节数组输入流FileInputStream文件输入流InputStream字节输入流FilterInputStream过滤器输入流ObjectInputStream对象输入流PiperInputStream管道输入流SequenceInputStream顺序输入流StringBufferInputStream缓冲字符串输入流ByteArrayOutputStream字节输出流FileOutputStream文件输出流OutputStream字节输出流FilterOutputStream过滤器输出流ObjectOutputStream对象输出流PiperOutputStream管道输出流SequenceInputStream顺序输出流BufferedInputStream缓冲输入流CheckedInputStreamCipherInputStreamDataInputStream数据输入流DigestInputStreamInflaterInputStreamLineNumberInputStream行号输入流ProgressMonitorInputStreamPushbackInputStream回压输入流BufferedOutputStream缓冲输出流CheckedOutputStreamCipherOutputStreamDataOutputStream数据输出流DeflaterOutputStreamDigestOutputStreamPrintStream格式化输出流Object

图9-2 I/O包字节流的类层次关系图

BufferReaderCharArrayReaderFilterReaderReaderInputStreamReaderPipedReaderStringReaderObjectBufferWriterCharArrayWriterFilterWriterOutputStreamWriterPipedWriterPrintWriterStringWriterLineNumberReaderPushbackReaderFileReaderWriterFileWriter

图9-3 I/O包字符流的类层次关系图

9.1.3 Java的标准数据流

Java的标准数据流是指在字符方式下(如DOS),程序与系统进行交互的方式。

Java通过系统类System实现标准输入输出的功能。System类在java.lang包中,声明为一个final类。

System类定义了三个成员变量,分别是:

static PrintStream err “标准”错误输出流,对象是屏幕。 static InputStream in “标准”输入流,对象是键盘。 static PrintStream out “标准”输出流,对象是屏幕。

这三个变量都是静态(static)成员变量,即类成员变量,所以可以直接使用。in定义为9.3节要讨论的InputStream类的static成员变量,所以可以直接调用InputStream类提供的输入方法,out和err定义为9.3节要讨论的PrintStream类的static成员变量,所以可以直接调用PrintStream类提供的输出方法。

1.标准输入System.in

System.in用于标准输入,其中read方法从键盘接收数据。

public int read() throws IOException 返回读入的一个字节

public int read(byte[] b) throws IOException 读入的多个字节返回缓冲区b中 如果输入流结束,返回-1,发生I/O错误时,抛出IOException异常。 2.标准输出System.out

System.out用于屏幕输出,常用的调用方法有print和println,这两个方法支持Java的任意基本类型作为参数。

System.out.print(String str); 向屏幕输出字符串str

搜索更多关于: ch09 的文档
ch09.doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
本文链接:https://www.diyifanwen.net/c4mnmb4iv5u208bi78dqg_1.html(转载请注明文章来源)
热门推荐
Copyright © 2012-2023 第一范文网 版权所有 免责声明 | 联系我们
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ:xxxxxx 邮箱:xxxxxx@qq.com
渝ICP备2023013149号
Top