下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
圣思园科 课程目掌握JavaI/O的设摘自《ThinkinginJava 流(stream)”指的是所有数据通信通道之中,数据的起点和终点。信息的通道就是一个数据流。只要是数据从一个地方“流”到另外一个地方,这种若程序是数据流的源,即数据的提供者,这个数据流对程序来说就是一个“输出数据流”(数据从程序流出)。若程序是数据流的终点,这个数据流对程序而言就是一个“输入数据流”(数据从程序从流结构上可分为字节流(以字节为处理单位或称面向字节)和字符流(以字符为处理单位或称字节流的输入流和输出流基础是InputStream和OutputStream这两个抽象类,字节流的输入输出操作由这两个类的子类实现。字符流是Java1.1版后新增加的以字符为单位进行输入输出处理的流,字符流输入输出的基础是抽象类Reader和Java2定义了两种类型的流:字节流和字符流。字节流(bytestream)为处理字 流(characterstream)为字符的输入和 单位的。Java1.1中加入了字符流的功能 字节流类(ByteStreams)字节流类用于字符流类(CharacterStreams)符流两种基本的流是:输入流(InputStream)和输出流(OutputStream)。可从中读出读数据的逻辑openawhilemoreinformationreadinformationclosethestreamopenawhilemoreinformationwriteinformationclosethestream节点流过滤流。字节流类以InputStream和 抽象类InputStream和OutputStream定义了实现其方法都在InputStream和OutputStream中被定义为三个基本的读方intread():一个字节数据,intread(byte[]b):将数据读入一个字节 intread(byte[]b,intoff,intlen):将数 longskip(longn:在输入流中跳过n个字节,并返intavailable:voidclose:voidmark(intreadlimit):在输入流的当前位置放 voidreset:booleanmarkSupported:测试当前流是否支持该类的所有方法在出错条件 一数据源上顺序数据。可以完成最基本的从输入流读入数据的功能。当Java程序需要外设的数据时,可根据数据的不同象来完成与该外设的连接,然后再调用执行这个流类对象的特定输入方法来实现对相应外设的输InputStreamreadvoidwrite(intb):往输出voidwrite(byteb):往输出流中写voidwrite(byte[]b,intintlen):往输出流中写入数组b中从偏移voidflush:刷新输出流,强制缓冲voidclose:关闭输出流,释放和这 OutputStream中包含一套字节输出流需要的方法,可以完成最基本的输出数据到输出流的功能。当Java程序需要将数据输出到外设时,可根据数据的不同形式,创建一个适当的OutputStream子类类型的对象来完成与该外设的连接,然后再调用执行这个流类对象的特定输出方法来实现对相应外设的输OutputStream类子类对象也继承了OutputStream在InputStream类和OutputStream类子类中,FilterInputStream和FilterOutputStream过滤流抽象类又派生出DataInputStream和DataOutputStream数据输入输出流类等子数据输入流DataInputStream中定义了多个针对不同类型readByte()readBoolean()、readShort()、readChar()、readInt()、readLong()、据的写方法,如writeByte()、writeBoolean()、writeShort()、writeChar()、writeInt()、wri 从另一个线程的PipedOutputStream对象输入。要使管道流有InputStream从文件中获取输入字 增加了缓冲的功
OutputStream可以往输出流中写Java基本数据类
提供数据写入到缓区的功 将数据写入到文件 通过流的,可以动态的增加流的功能,而这 (文件),也称为预定义设备(文件所有Jv程序自动导javalang该包定义了一个名Syste类,类封了运方信。,用它某前间与统的不同属。Sstem同时包含三个预定义的流变量,in,outer成在Sstem中是被定义publcstati型,意味着它们可以不 特定ste而被用于程序的其他部。System.in是InputStream的对象;System.out和System类的类变量n表示标准输入流,其publicstaticfinalInputStream标准输入流已打开,作好提供输入数据的准备。一般这个流对应键盘输入,可以使用InputStream类的read()和skip(longn)等方法来从输入流获得数据。read()从输入流中读一个字节,skip(longn)在输publicstaticfinalPrintStream标准输出流也已打开,作好接收数据的准备。一可以使用PrintStream类的print()和println()System类的类变量err表示标准错误输出publicstaticfinalPrintStream标准错误输出流已打开,作好接收数据的准备。一般这个流也对应显示器输出,与System.out一样,可以PrintStream参见程序 voidclose()throwsFileInputStream类创建一个能从文件 节的InputStream类,它的两个常用的构造 FileInputStreamf0=newFilef=newFile("c:\\file\\name.txtFileInputStreamf1=new义的read()方法。intread()throws available()判定剩余的字节个数及怎样用skip()方 这个有些刻意创作的例子说明了怎样数据的FileOutputStream(StringfilePath)FileOutputStream(FilefileObj)FileOutputStream(StringfilePath,booleanappend) voidwrite(intbyteval)throws该方法按照byteval指定的数向文件写入字节。尽管byteval作为整数,但仅低8位字节可以写入文件。如果在写的过程中出现问题,一个 些语言用错误代码报告文件错误,而Java用异常处理机制。这样不仅是文件处理更为简洁,而且使Java正在执行输入时容易区分是文件出错还是异常,而不是通过read()的返回值。这样,当read()返回-1时,它仅表示一点:遇到了文件 ByteArrayInputStream(bytearray[],intstart,int importclassByteArrayInputStreamDemopublicstaticvoidmain(Stringargs[])throwsIOException{Stringtmp="abcdefghijklmnopqrstuvwxyz";byteb[]=tmp.getBytes();ByteArrayInputStreaminput1=newByteArrayInputStreaminput2=ByteArrayInputStream(b,0,}}input1对象包含整个字母表中小写字母,input2仅包含开参见程序ByteArrayInputStream实现mark()和reset()方法。然而,如mark不被调用,reset(该例先从流中每个字符,然后以小写 ByteArrayOutputStream(ByteArrayOutputStream(int区保存在ByteArrayOutputStream的受保护的buf成员里。 参见程reset:将此字节数组输出流的count字段重为零,从而丢弃输出流中目前已累对于字节流,缓冲流(bufferedstream),为缓冲区可用,所以可以跳过、标记和重BufferedInputStream和BufferedOutputStreamPushbackInputStream也可实现缓冲 的BufferedInputStream类允许把任何InputStreamBufferedInputStream(InputStreaminputStream,int第一种形式BufferedInputStreamInputStreai BufferedInputStreammarkresetBufferedInputStream.markSupportedpublicvoidmark(intreadlimit):在此输入流中reset方法的后续调用会取重新相同的字节publicvoidreset():将此流重新定位到对此输mark方法时的位置 outputStream,intbufSize)用flush()方法更新要想在程序结束之前将缓冲区里的数据写入磁盘,除了填满缓冲区或关闭输出流外,还可以显式调用f()方法。f()方法的声明为:publicvoidflush()throws参见程序 缓冲的一个新颖的用法是实现推(pushback)。Pushback用于输入流允许 PushbackInputStream有两个构造方intnumBytes) voidunread(intvoidunread(bytebuffer[voidunread(bytebuffer,intoffset,int第一种形式推回ch的低位字节,它将是随后调用read() InputStream流。SequenceInputStream InputStreamsecond) 所有InputStream流直到最后一个被读 字节文件流FileInputStream和进制数据文件流DataInputStream和
合成为有用的数据类型以数据类 文可以以数据类型读文流来构造另一个流。(PatternOf比如:FileInputStreamfinDataInputStreamdin=newdoubles=要的流。如:DataInputStreamdin=newDataInputStream(newBufferedInputStream(new 实际上这就是装饰模式的 使用数据文件流的一般步(3)用流对象的方法对基本类型的数据进行输 DataInputStream类的构造方法如DataInputStream(InputStreamin)创建过滤流DataOutputStream(OutputStreamout)创建输出数流对象,写数据到指定的参见程序 参见程序 1,1,2,3,5,8,13,21,.„。参见程序进程进程使用管道的好 管道流继承自InputStreamOutputStream,所以他们并不是过滤通常,数据由某个线程从PipedInputStream PipedOutputStream。不建议对这两个对象尝 PipedOutputStreamPipedInputStream 创建尚未连接的 src)PipedInputStreamsrcpublicvoidconnect(PipedOutputStreamsrc)src。如果此对象IOException src为未连接的传送输出流,snk为未连snk.connect(src)src.connect(snk) PipedOutputStream(PipedInputStreamsnk)publicvoidconnect(PipedInputStreamsnk)接到其他某个传送输入流,则抛出IOException。 snksrc为未src.connect(snk)snk.connect(src) 序序序publicfinalvoidwriteUTF(Stringstr)throwsIOException以与机器无关方式使用UTF-8修 –首先,通过writeShort之类的方法将两个字节度,使用字符的UTF-8修 计数器written(protectedintwritten)增加写入输出流的字节总数。该值至少是2加str的长度,最多是2加str的三倍长度 观察InputStream抽象类,它所定义的唯一public intread()throwsIOException; 是抽象的,也就是说事实上InputStream已publicintread(byteb[])throwsIOException;publicintread(byteb[],intoff,intlen)throwsIOException;者用來从此InputStream中 b.lengthbytes的数据 于b中,并且返 InputStream中最多lenbytes的数据,並且从b这个byte数组索引值为off之处开始儲存起樣返回所讀取的數目很显然的,InputStream把如何提取数据給读取者的实现部份加以,不同的InputStream实现可能都有不同的实现先让我提一个问题。那为什么InputStream的设计者不將所有的read()方法义為抽象,而单单只將intread()這一個版本定义為 版本的read()方法其实是read(byteb[])的实现其实就可以写成returnread(b,0,b.length);事实上,在Sun所提供的原始程序中,我们 read(bytebintoffintlen)來加以实而 版本还可以使用第一個版本read()來实现自己。我们也不是不可以用第 版本來实现第一個版byteb[]=newbyte[1];if(read(b)<0)returnreturn但是,显然InputStream的設計者,选择让intread()成為最後被抽離的對象。而讓第二版本的read()依赖第 版本的read(), 版本的read()建构在第一個版本的read()之上。所以,第一個版本的read()就成了此抽象類別唯一的抽象方法。在某java.io.ByteArrayInputStream的類別,它允許我們以(stream)的方式依序地讀取一個bytearray中的內容。假設,我們現在要实己的ByteArrayInputStream,那麼因為它勢必继承Inputstream類別,所了要实现那唯一的抽象方法:intread()先來看看构造方法(constructor),假設我們可以在构造它時傳入一個bytearray(java.io.ByteArrayInputStream提供的publicMyByteArrayInputStream(byte那麼我們使用一個名为data的成員变量來儲存傳入的bytearray到目前為止,除了intread()之外,我們已publicclassMyByteArrayInputStreamextendsjava.io.InputStream{protectedbytedata[];protectedintptr=0;publicMyByteArrayInputStream(byte{data=b;}}那intread()又該如何实现呢publicintread(){return(ptr<data.length)?(data[ptr++]):-1;}参见程序MyOwnSt
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 内分泌科护理质量改进
- 2026年外贸行业HR面试要点及答案解析
- 明斯克协议书 不加入北约
- 2026年电气装备总工程师项目管理能力考试题含答案
- 滥伐林木生态赔偿协议书
- 原告撤诉和解协议书没签
- 合资协议书可以约定的事项
- 离婚协议书婚内债务平分
- 2025年熔化焊接与热切割报名考试题库及答案
- 2025年四川省康复专科护理题库及答案
- 宁夏调味料项目可行性研究报告
- GRR计算表格模板
- 长沙市长郡双语实验学校人教版七年级上册期中生物期中试卷及答案
- 马克思主义经典著作选读智慧树知到课后章节答案2023年下四川大学
- 金庸短篇小说《越女剑》中英文对照版
- 2023年洛阳市洛龙区政务中心综合窗口人员招聘笔试题库及答案解析
- GB/T 19867.1-2005电弧焊焊接工艺规程
- GB/T 16102-1995车间空气中硝基苯的盐酸萘乙二胺分光光度测定方法
- GB/T 15171-1994软包装件密封性能试验方法
- 医院转院证明样本图片(范文四篇)
- 外科护理学期末试卷3套18p
评论
0/150
提交评论