




已阅读5页,还剩5页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第九章 输入输出9.1 输入输出 流(Stream):是对输入输出的总称或者叫抽象,可以指任何输入输出设备,如键盘、屏幕、打印机、文件等,数据从一个地方运动到另一个地方就像水的流动一样。 流的分类: 1、从输入输出方面分:1) 输入流:InputStream、Reader2)输出流:OutputStream、Writer2、按字节分: 1)八位流:InputStream、OutputStream 2)十六位流:Reader、Writer9.2 流在功能上的分类1、节点流(node stream):基本的流 直接提供输入输出功能的流是node stream: 1)用于文件输入输出的流八位字节流:FileInputStream、FileOutStream十六位字节流:FileReader、FileWriter 2)用于内存数组的流八位字节流:ByteArrayInputStream、ByteArrayOutputStream十六位字节流:CharArrayReader、CharArrayWriter 3)用于字符串的流八位字节流:没有对应的类十六位字节流:StringReader、StringWriter 4)管道流八位字节流:PipedInputStream、PipedOutputStream十六位字节流:PipedReader、PipedWriter2、处理流(Processing stream) 用于增强节点流的功能,可看作是高级的流。 1)提高输入和输出效率的缓冲流八位字节流:BufferedInputStream、BufferedOutStream十六位字节流:BufferedReader、BufferedWriter 2)具有过滤功能的流八位字节流:FilterInputStream、FilterOutStream十六位字节流:FilterReader、FilterWriter 3)对象序列化的流八位字节流:ObjectInputStream、ObjectOutStream十六位字节流:没有对应的类 4)八位转换十六位的流八位字节流:没有对应的类十六位字节流:InputStreamReader、OutStreamWriter 5)用于数据转换的流八位字节流:DataInputStream、DataOutStream十六位字节流:没有对应的类 6)打印流八位字节流:PrintStream十六位字节流:PrintWriter 除此之外还有计数的流、带有Pushback缓冲的流等。9.3 InputStream类1、InputSteam类是八位面向字节输入流的父类,他有很多子类。InputStream方法:1)三个基本的read()方法int read()int read(byte )int read(byte, int ,int )简单读方法返回一个int值,它包含从流里读出的一个字节或者-1,其中后者表明文件结束。其它两种方法将数据读入到字节数组中,并返回所读的字节数。第三个方法中的两个int参数指定了所要填入的数组的子范围。2)其他方法void close():关闭流。int available():这个方法报告立刻可以从流中读取的字节数。skip(long):这个方法丢弃了流中指定数目的字符。boolean markSupported()void mark(int)void reset(int) 如果流支持“回放”操作,则这些方法可以用来完成这个操作。如果mark()和reset()方法可以在特定的流上操作,则markSupported()方法将返回ture。mark(int)方法用来指明应当标记流的当前点和分配一个足够大的缓冲区,它最少可以容纳参数所指定数量的字符。在随后的read()操作完成之后,调用reset()方法来返回你标记的输入点。 本节重点介绍其子类FileInputStream。 阅读下面的程序: 建立FileInputStream流对象:FileInputStream in = new FileInputStream( “d:/javacode/source.txt” );使用FileInputStream类提供的方法read(),他读入一个字节并且返回该字节,其返回值为int型,若到了文件尾,他返回-12、注意事项1)有关输入输出的方法几乎都要捕获异常2)while的循环条件使用语句b=in.read()判断,因为赋值语句也有返回值3)由于读入的数据类型是int,所以应该把他们转换为char4)close方法用于关闭流以释放资源3、编写输入输出程序的一般过程 1)选择一种适当的流 2)选择一种读或写的方法 3)关闭流9.4 OutputStream类1、OutputSteam类是八位面向字节输出流的父类,他有很多子类。类似于InputStream,可以向目的地写入数据。OutputStream方法:1) 个基本的write()方法int write( )int write(byte )int write(byte, int ,int )2) 其他方法void close()void flush():有时一个输出流在积累了若干次之后才进行真正的写操作。flush()方法允许你强制执行写操作。下面的程序利用OutputStream向文件destnation.txt中写入0123456789共10个字符: 注意: 1)48+i 的目的是把数字i变成byte类型。2)DataOutputStream out =new DataOutputStream(new FileOutputStream(d:javacodedestnation.txt);2、DataInputStream和DataOutputStream这些过滤器通过流来读写Java基本类。例如:DataInputStream方法byte readByte()long readLong()double readDouble()DataOutputStream方法void writeByte(byte)void writeLong(long)void writeDouble(double)这些流都有读写字符串的方法,如readLine、readChar,但不应当使用这些方法。3、处理流的应用 处理流提供了更加强大的输入输出功能,提供了比节点流更多的输入输出方法。因此一般情况下,尽量使用处理流。如:DataInputSteam可以读入各种基本类型数据类型的功能。1)使用处理流时,要用一个节点流作为其构造方法的参数 DataInputStream in =new DataInputStream(new FileInputStream(d:javacodescource.txt);2)使用DataInputStream 类提供的方法读文件9.5 Reader和Writer类Reader和Writer是面向字符输入,他们以字符(十六位)为单位读写,因此效率较InputStream和OutputStream类高,因此尽可能使用Reader和Writer。他们有自己的子类,如:1、UnicodeJava技术使用Unicode来表示字符串和字符,而且它提供了16位版本的流,以便用类似的方法来处理字符。这些16位版本的流称为读者和作者。和其他流一样,它们都在java.io包中。读者和作者中最重要的版本是InputStreamReader和OutputStreamWriter。这些类用来作为字节流与读者和作者之间的接口。当你构造一个InputStreamReader或OutputStreamWriter时,转换规则定义了16位Unicode和其它平台的特定表示之间的转换。2、字节和字符转换缺省情况下,如果你构造了一个连接到流的读者和作者,那么转换规则会在使用缺省平台所定义的字节编码和Unicode之间切换。在英语国家中,所使用的字节编码是:ISO 8859-1。你可以使用所支持的另一种编码形式来指定其它的字节编码。在native2ascii工具中,你可以找到一个关于所支持的编码形式的列表。使用转换模式,Java技术能够获得本地平台字符集的全部灵活性,同时由于内部使用Unicode,所以还能保持平台独立性。3、缓冲读者和作者因为在各种格式之间进行转换和其它I/O操作很类似,所以在处理大块数据时效率最高。在InputStreamReader和OutputStreamWriter的结尾链接一个BufferedReader和BufferedWriter是一个好主意。记住对BufferedWriter使用flush()方法。4、读入字符串输入下面这个例子说明了从控制台标准输入读取字符串所应当使用的一个技术。 import java.io.*; public class CharInput public static void main (String args) throws java.io.IOException String s; InputStreamReader ir; BufferedReader in; ir = new InputStreamReader( System.in ); in = new BufferedReader( ir ); while (s = in.readLine() != null) System.out.println(Read: + s); 5、使用其它字符转换如果你需要从一个非本地(例如,从连接到一个不同类型的机器的网络连接读取)的字符编码读取输入,你可以象下面这个程序那样,使用显式的字符编码构造ir=new InputStreamReader(System.in, “8859_1”);6、阅读程序: 1) import java.io.*;public class Reader1public static void main(String args)String s = new String();int b;try FileReader in = new FileReader(d:javacodesc09source.txt);while(b=in.read()!=-1) System.out.print(char)b); in.close();catch(Exception e) 使用处理流BufferedReader和PrintWriter: 2)复制文件 使用FileReader和FileWriter java TestNodeStreams file1 file2 使用BufferedReader和BufferedWriter jav
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年体育休闲广场运动项目引进与推广研究报告
- 药品药店安全管理制度
- 药品销售异常管理制度
- 药店医保网络管理制度
- 药店消毒制度管理制度
- 莱西中学资产管理制度
- 设备台账资料管理制度
- 设备客户报修管理制度
- 设备更新维护管理制度
- 设备申请购买管理制度
- 中国血脂管理指南理论知识考核试题及答案
- 教考结合·必修上册文言知识梳理- 备考
- 血管活性药物静脉输注护理
- 2024年机关事业单位工人汽车驾驶员高级技师国家题库练习题答案
- 村级积分制管理
- Nikon尼康D3100中文说明书
- 国家开放大学2024春《1494员工劳动关系管理》期末考试真题及答案-开
- DBJ∕T 13-234-2024 不发火建筑地面应用技术标准
- 2024年新疆中考地理真题卷及答案
- 人教版初三物理总复习电学专题复习教学设计
- 项目风险记录及跟踪表
评论
0/150
提交评论