版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、,第 8 章 输 入 输 出,8.1 File类 8.2 流式输入输出 8.3 典型的I/O方式 8.4 RandomAccessFile 8.5 对象串行化 8.6 NIO,8.1 File类File类是外存文件和目录的路径名(pathname)的抽象表示,主要用于帮助程序员操作文件和获得文件的信息,但是不提供对文件数据读取的方法(这一功能主要由文件流提供)。通过File类的方法,我们可以得到文件或目录的描述信息(包括文件名、路径、可读写性、大小、最后修改时间等)、生成新的目录和临时文件、改变文件名、删除文件、列出一个目录中的所有文件或满足某种模式的文件、检查一个File对象代表的是文件还是
2、目录等。,8.2 流式输入输出很多编程语言的输入输出系统中都包含流的概念,它代表能够输出数据的数据源对象或能够接收数据的接收端对象。I/O流能够对应用程序隐藏底层系统和硬件对数据的处理细节。流中的字节具有严格的先进先出顺序,因而可以认为流式输入输出是一种顺序存取方式的输入输出。,1. 字节流InputStream是输入字节流的根类,所有输入字节流都是InputStream的子类。图8-1给出了输入字节流的类层次结构。其中阴影部分的类为节点流,其余为过滤流。InputStream能够从不同的数据源产生输入,这些数据源包括字节数组、String对象、文件和管道等。输入字节流的基本功能如表8-2所示
3、。,图8-1 输入字节流的类层次结构,图8-2 输出字节流的类层次结构,2. 字符流JDK 1.1中引入了Reader和Writer的概念,用于提供兼容Unicode的面向字符的输入输出功能。设计Reader和Writer的主要目的是为了国际化,而不是为了替代字节流。虽然有观点认为字符流的处理效率会比字节流低一些,我们仍鼓励读者优先考虑使用字符流。,图8-3 输入字符流的类层次结构,图8-4 输出字符流的类层次结构,8.3 典型的I/O方式所有的流在创建时自动打开,程序可以通过调用close()方法将其关闭,否则,Java运行环境的垃圾收集机制将隐含将其关闭。,1. 基本文件I/O基本的文件输
4、入一般采用FileInputStream或FileReader类,传入的参数为文件系统中指定文件的路径名字符串或抽象路径名File对象,基本的文件输出一般采用FileOutputStream或FileWriter类,传入的参数为目标文件路径名字符串或代表目标文件路径名的File对象。,2. 缓存数据例8-2中的文件读写是逐字节进行的,这种方式在读写大量数据时非常慢。一种改进的方式是将数据积累到一个大的数据块后再成批地读入或写出,通过减少系统资源的读写次数来提高程序执行的效率。能够实现这一功能的I/O类包括BufferedInputStreamBufferedOutputStream以及Buff
5、eredReaderBufferedWriter。BufferedOutputStream和BufferedWriter只在缓冲区满或调用flush()方法时才写数据。缓存流是过滤流,其前端(构造方法参数)必须是一个其他流,在构造缓存流时,还可以指定缓冲区的大小。,3. 使用数据流存储和恢复数据数据流包括DataInputStream和DataOutputStream类,用来对数据进行结构化的读写。这两个类都是面向字节的,因此其中应使用InputStream和OutputStream作为参数。如果我们使用DataOutputStream写入数据,Java能够保证通过DataInputStrea
6、m正确地读出数据。,4. 标准I/O在Java中,标准输入是键盘,标准输出是加载Java程序的命令行窗口。程序的所有输入都可以来自于标准输入,而所有的输出也都可以发送到标准输出。由于从键盘输入和向屏幕输出在Java程序中是非常常用的操作,因此,Java在System类中定义了与标准输入输出相关的3个流,分别是System.in、System.out及System.err。这3个流都是System类的静态成员变量。,8.4 RandomAccessFile流式的输入输出为用户提供一种对数据的顺序访问方式,容易看到,流中的数据必须按照顺序进行读写。当不需要按照顺序(随机地)访问磁盘文件中的内容时,
7、可以使用RandomAccessFile类,以实现对文件的随机读写操作。RandomAccessFile适用于由大小已知的记录组成的文件,使用这个类,可以在文件内部向前和向后移动,程序员可以通过seek()方法指向文件的某处,然后读取或修改记录,文件中记录的大小可以不同,只要能够确定记录的大小及位置即可正确读取。,8.5 对 象 串 行 化到目前为止,我们创建的所有对象都仅在程序运行时存在,而程序终止后,这些对象都不再存在。如果能够在程序终止后仍保留对象的状态和信息,那么会是非常有用的。,一个类只有实现了Serializable接口,其对象才能被串行化。因此,如果想要串行化某个类的对象,这个类就必须实现Serializable接口。实际上,Serializable是一个空接口:public interface Serializable ;,8.6 NIOJava的新I/O(又称NIO)能够提供更高效的输入输出,效率的提升来自于使用了更接近于操作系统的I/O方式,即通道(Channel)和缓冲区(Buffer)。通道表示应用程序与能够执行输入输出的实体(文件、Soc
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 三年级下册英语教案-lesson23 How Much Are They 冀教版
- 2024年抗击疫情简报9篇
- 2024年实心球教学篇(全文)-1
- 2024年协会成立申请书5篇
- 商场CT检查感染防控规定
- 2024年度环卫清运环卫处清运队队长先进事迹典型材料
- 杏树病虫害防治注意事项
- 家庭教育讲座:业主家书
- 农田安全:小麦病虫害防治技巧
- 运动与健康:预防脑梗塞的新趋势
- (正式版)SHT 3225-2024 石油化工安全仪表系统安全完整性等级设计规范
- 矿安益620道学习题
- 2024版国开电大专科《理工英语1》在线形考试题及答案
- 严重精神障碍患者家属护理教育
- XX镇卫生院基本公共卫生服务项目实施方案(2024年)
- X炼钢厂生产设备管理制度范本
- 注塑车间现场改善提案
- 固定资产投资项目节能登记表
- 幼儿心理健康知识讲座
- 大国三农II-农业科技版智慧树知到期末考试答案2024年
- 【数学】三角函数、平面向量及其应用与复数综合练习(二)-2023-2024学年高一下人教A版(2019)必修第二册
评论
0/150
提交评论