软件工程师-浅谈Java的输入输出流技术步骤说明

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

星期八职场经验网()【现成经验助你快速完成工作】Java中的流分为两种,一种是字节流,另一种是字符流,分别由四个抽象类来表示(每种流包括输入和输出两种所以一共四个):InputStream,OutputStream,Reader,Writer。Java中其他多种多样变化的流均是由它们派生出来的。AD:Java语言的输入输出功能是十分强大而灵活的,美中不足的是看上去输入输出的代码并不是很简洁,因为你往往需要包装许多不同的对象。在Java类库中,IO部分的内容是很庞大的,因为它涉及的领域很广泛:标准输入输出,文件的操作,网络上的数据流,字符串流,对象流,zip文件流....本文的目的是为大家做一个简要的介绍。流是一个很形象的概念,当程序需要读取数据的时候,就会开启一个通向数据源的流,这个数据源可以是文件,内存,或是网络连接。类似的,当程序需要写入数据的时候,就会开启一个通向目的地的流。这时候你就可以想象数据好像在这其中“流”动一样。Java中的流分为两种,一种是字节流,另一种是字符流,分别由四个抽象类来表示(每种流包括输入和输出两种所以一共四个):InputStream,OutputStream,Reader,Writer。Java中其他多种多样变化的流均是由它们派生出来的。在这其中InputStream和OutputStream在早期的Java版本中就已经存在了,它们是基于字节流的,而基于字符流的Reader和Writer是后来加入作为补充的。以上的层次图是Java类库中的一个基本的层次体系。在这四个抽象类中,InputStream和Reader定义了完全相同的接口:1.intread()2.intread(charcbuf[])3.intread(charcbuf[],intoffset,intlength)而OutputStream和Writer也是如此:1.intwrite(intc)2.intwrite(charcbuf[])3.intwrite(charcbuf[],intoffset,intlength)这六个方法都是最基本的,read()和write()通过方法的重载来读写一个字节,或者一个字节数组。星期八职场经验网()【现成经验助你快速完成工作】更多灵活多变的功能是由它们的子类来扩充完成的。知道了Java输入输出的基本层次结构以后,本文在这里想给大家一些以后可以反复应用例子,对于所有子类的细节及其功能并不详细讨论。1.importjava.io.*;2.publicclassIOStreamDemo{3.publicvoidsamples()throwsIOException{4.5.//1.这是从键盘读入一行数据,返回的是一个字符串6.BufferedReaderstdin=newBufferedReader(newInputStreamReader(System.in));7.System.out.print(Enteraline:);8.System.out.println(stdin.readLine());9.10.//2.这是从文件中逐行读入数据11.BufferedReaderin=newBufferedReader(newFileReader(IOStreamDemo.java));12.Strings,s2=newString();13.while((s=in.readLine())!=null)14.s2+=s+\n;15.in.close();16.17.//3.这是从一个字符串中逐个读入字节18.StringReaderin1=newStringReader(s2);19.intc;20.while((c=in1.read())!=-1)21.System.out.print((char)c);22.23.//4.这是将一个字符串写入文件24.try{25.BufferedReaderin2=newBufferedReader(newStringReader(s2));26.PrintWriterout1=newPrintWriter(newBufferedWriter(newFileWriter(IODemo.out)));27.intlineCount=1;28.while((s=in2.readLine())!=null)星期八职场经验网()【现成经验助你快速完成工作】29.out1.println(lineCount+++:+s);30.out1.close();31.}catch(EOFExceptione){32.System.err.println(Endofstream);33.}34.}35.}对于上面的例子,需要说明的有以下几点:1.BufferedReader是Reader的一个子类,它具有缓冲的作用,避免了频繁的从物理设备中读取信息。它有以下两个构造函数:1.BufferedReader(Readerin)2.BufferedReader(Readerin,intsz)这里的sz是指定缓冲区的大小。它的基本方法:1.voidclose()//关闭流2.voidmark(intreadAheadLimit)//标记当前位置3.booleanmarkSupported()//是否支持标记4.intread()//继承自Reader的基本方法5.intread(char[]cbuf,intoff,intlen)//继承自Reader的基本方法6.StringreadLine()//读取一行内容并以字符串形式返回7.booleanready()//判断流是否已经做好读入的准备8.voidreset()//重设到最近的一个标记9.longskip(longn)//跳过指定个数的字符读取2.InputStreamReader是InputStream和Reader之间的桥梁,由于System.in是字节流,需要用它来包装之后变为字符流供给BufferedReader使用。星期八职场经验网()【现成经验助你快速完成工作】3.PrintWriterout1=newPrintWriter(newBufferedWriter(newFileWriter(IODemo.out)));这句话体现了Java输入输出系统的一个特点,为了达到某个目的,需要包装好几层。首先,输出目的地是文件IODemo.out,所以最内层包装的是FileWriter,建立一个输出文件流,接下来,我们希望这个流是缓冲的,所以用BufferedWriter来包装它以达到目的,最后,我们需要格式化输出结果,于是将PrintWriter包在最外层。Java提供了这样一个功能,将标准的输入输出流转向,也就是说,我们可以将某个其他的流设为标准输入或输出流,看下面这个例子:1.importjava.io.*;2.publicclassRedirecting{3.publicstaticvoidmain(String[]args)throwsIOException{4.PrintStreamconsole=System.out;5.BufferedInputStreamin=newBufferedInputStream(newFileInputStream(Redirecting.java));6.PrintStreamout=newPrintStream(newBufferedOutputStream(newFileOutputStream(test.out)));7.System.setIn(in);8.System.setOut(out);9.BufferedReaderbr=newBufferedReader(newInputStreamReader(System.in));10.Strings;11.while((s=br.readLine())!=null)12.System.out.println(s);13.out.close();14.System.setOut(console);15.}16.}在这里java.lang.System的静态方法:1.staticvoidsetIn(InputStreamin)2.staticvoidsetOut(PrintStreamout)星期八职场经验网()【现成经验助你快速完成工作】提供了重新定义标准输入输出流的方法,这样做是很方便的,比如一个程序的结果有很多,有时候甚至要翻页显示,这样不便于观看结果,这是你就可以将标准输出流定义为一个文件流,程序运行完之后打开相应的文件观看结果,就直观了许多。Java流有着另一个重要的用途,那就是利用对象流对对象进行序列化。下面将开始介绍这方面的问题。在一个程序运行的时候,其中的变量数据是保存在内存中的,一旦程序结束这些数据将不会被保存,一种解决的办法是将数据写入文件,而Java中提供了一种机制,它可以将程序中的对象写入文件,之后再从文件中把对象读出来重新建立。这就是所谓的对象序列化Java中引入它主要是为了RMI(RemoteMethodInvocation)和JavaBean所用,不过在平时应用中,它也是很有用的一种技术。所有需要实现对象序列化的对象必须首先实现Serializable接口。下面看一个例子:1.importjava.io.*;2.importjava.util.*;3.4.publicclassLogonimplementsSerializable{5.privateDatedate=newDate();6.privateStringusername;7.privatetransientStringpassword;8.9.Logon(Stringname,Stringpwd){10.username=name;11.password=pwd;12.}13.14.publicStringtoString(){15.Stringpwd=(password==null)?(n/a):password;16.returnlogoninfo:\n+username:+username+\ndate:+date+\npassword:+pwd;17.}18.19.publicstaticvoidmain(String[]args)throwsIOException,ClassNotFoundException{20.Logona=newLogon(Morgan,morgan83);星期八职场经验网()【现成经验助你快速完成工作】21.System.out.println(logona=+a);22.ObjectOutputStreamo=newObjectOutputStream(newFileOutputStream(Logon.out));23.o.writeObject(a);24.o.close();25.intseconds=5;26.longt=System.currentTimeMillis()+seconds*1000;27.while(System.currentTimeMillis()t);28.ObjectInputStreamin=newObjectInputStream(newFileInputStream(Logon.out));29.System.out.println(Recoveringobjectat+newDate());30.a=(Logon)in.readObject();31.System.out.println(logona=+a);32.}33.}类Logon是一个记录登录信息的类,包括用户

1 / 6
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功