




免费预览已结束,剩余1页可下载查看
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
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. publicclassIOStreamDemo3. publicvoidsamples()throwsIOException4. 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. try25. 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(charcbuf,intoff,intlen)/继承自Reader的基本方法6. StringreadLine()/读取一行内容并以字符串形式返回7. booleanready()/判断流是否已经做好读入的准备8. voidreset()/重设到最近的一个标记9. longskip(longn)/跳过指定个数的字符读取2. InputStreamReader是InputStream和Reader之间的桥梁,由于System.in是字节流,需要用它来包装之后变为字符流供给 BufferedReader使用。3. PrintWriter out1 = new PrintWriter(new BufferedWriter(new FileWriter(IODemo.out);这句话体现了Java输入输出系统的一个特点,为了达到某个目的,需要包装好几层。首先,输出目的地是文件IODemo.out,所以最内层包装的是FileWriter,建立一个输出文件流,接下来,我们希望这个流是缓冲的,所以用BufferedWriter来包装它以达到目的,最后,我们需要格式化输出结果,于是将PrintWriter包在最外层。Java提供了这样一个功能,将标准的输入输出流转向,也就是说,我们可以将某个其他的流设为标准输入或输出流,看下面这个例子:1. importjava.io.*;2. publicclassRedirecting3. publicstaticvoidmain(Stringargs)throwsIOException4. 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(Remote Method Invocation)和Java Bean所用,不过在平时应用中,它也是很有用的一种技术。所有需要实现对象序列化的对象必须首先实现Serializable接口。下面看一个例子:1. importjava.io.*;2. importjava.util.*;3. 4. publicclassLogonimplementsSerializable5. 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(Stringargs)throwsIOException,ClassNotFoundException20. 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是一个记录登录信息的类,包括用户名和密码。首先它实现了接口Serializable,这就标志着它可以被序列化。之后再main方法里ObjectOutputStream o = new ObjectOutputStream( new FileOutputStream(Logon.out);新建一个对象输出流包装一个文件流,表示对象序列化的目的地是文件Logon.out。然后用方法writeObject开始写入。想要还原的时候也很简单ObjectInputStream in = new ObjectInputStream( new FileInputStream(Logon.out);新建一个对象输入流以文件流Logon.out为参数,之后
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 跨境电子商务平台合作协议书
- 装饰装修工程质量监督管理体系及保证措施
- 小区绿化及环保维护协议
- 鸟类对食物资源的利用-洞察及研究
- 农业经济结构调整与产业升级协议
- 农业智能监控系统的开发服务协议
- 娱乐活动组织与策划服务协议
- 农村土地承包经营权抵押贷款登记协议
- 学校食堂餐饮配送服务协议
- 土地流转和农业发展协议
- 贵州省黔东南苗族侗族自治州2024-2025学年七年级下学期7月期末考试地理试卷含答案
- 【课件】重生之我是学霸 2025-2026学年高二上英语开学第一课
- 锦绣中国课件教学
- 茶与健康养生课程课件
- 2025车位包销合同
- 心绞痛健康宣教课件
- 2025年内蒙古中考历史真题解读及答案讲解课件
- 自然保护区巡护监测员技能测试题库及答案
- 胃肠减压技术及并发症
- 客服试题及答案
- 革命文物介绍课件
评论
0/150
提交评论