




全文预览已结束
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Java SE 089 Java IO流深入详解一、流的概念Java程序通过流来完成输入输出。流是生产或消费信息的抽象。流通过Java的输入/输出系统与物理设备链接。改管与它们链接的物理设备不尽相同,所有流的行为具有同样的方式。这样,相同的输入/输出类和方法适用于所有类型的外部设备。这意味着一个输入流能够抽象多种不同类型的输入,从磁盘文件,从键盘或从网络套接字。同样,一个输出流可以输出到控制台,磁盘文件或相连的网络。流是处理输入/输出的一个洁净的方法,例如它不需要代码理解键盘和网络的不同。Java中流的实现是在java.io包定义的类层次结构内部的。二、输入/输出流的概念输入或输出时,数据在通信通道中流动。所谓“数据流Stream”指的是所有数据通信通道之中,数据的起点和终点。信息的通道就是一个数据流。只要是数据从一个地方“流”到另一个地方,这种数据流动的通道都可以称为数据流。输入/输出是相对于程序来说的。程序在使用数据时所扮演的角色有两个:一个是源,一个是目的。若程序是数据流的源,即数据的提供者,这个数据流对程序来说就是一个“输出数据流”(数据从程序流出)。若程序是数据流的终点,这个数据流对程序而言就是一个“输入数据流”(数据从程序外流向程序)。在java.io包中提供了60多个类(流)。从功能上分为两大类:输入流和输出流。从流结构上分可以分为字节流(以字节为处理单位或称面向字节)与这字符流。(以字符为处理单位或称面向字符)字节流的输入流和输出流的基础是InputStream和OutputStream这两个抽象类,字节流的输入输出操作由这两个子类。字符流是java1.1之后增加的以字符为单位进行输入输出处理的流,字符流输入与输出的基础是抽象类Reader和Writer。字节流字符流InputStreamReaderOutputStreamWriter读数据的逻辑为:open a streamwhile more informationread informationclose the stream写数据的逻辑为:open a streamwhile more informationwrite informationclose the stream三、流的分类节点流:从特定的地方读写的流类,例如:磁盘或一块内在区域。过滤流:使用节点流作为输入或输出。过滤流是使用一个已经存在的输入流或输出流连接创建的。解说:它是直接跟目标进行交互的,比如要从硬盘上读取一个文件,那这样一个节点流就是针对文件的一个流,扯拉跟文件进行连接的,在读取的过程当中,我可以对它的读取进行一个过滤,读取到信息之后,可以对它进行一个包装,然后增加一些新的功能,这种流就是所谓的过滤流。过滤流总是与节点流打交道,或者是与其他的过滤流打交道,而节点流总是与特定的信息进行打交道的。输入:进入程序用过滤流对过滤流进行包装用过滤流对节点流进行包装键头表示节点流,直接与硬盘上的文件相连接硬盘上的某一文件 如txt输出:用过滤流对过滤流进行包装硬盘上的某一文件 如txt用过滤流对节点流进行包装键头表示节点流,与程序相连进入程序注意:与目标相连接的一定是节点流。在流的过程中可以通过过滤流。即过滤流不能与目标直接进行连接。java里面关于流的类很多,什么是节点流,什么是过滤流呢,java给我们提供了一个过滤流的父类,只要这个父类衍生下来的类,都叫做过滤流,其余都叫做节点流。随着我们使用的增多,就可以自动的判断出来,哪个流是过滤流,哪个流是节点流。字节流类为处理字节式输入/输出提供了丰富的环境。一个字节流可以和其他任何类型的对象并用,包括二进制数据。这样的多功能性使得字节流对很多类型的程序都很重要。字节流类以InputStream和OutputStream为顶层类,它们都是抽象类。抽象类InputStream和OutputStream定义了实现其他流类的关键方法。最重要的方法是read()和write(),它们分别对数据的字节进行读写。两种方法都在InputStream和OutputStream中被定义为抽象方法。它们被派生的流类重写。每个抽象类都有多个具体的子类,这些子类对不同外设进行处理,例如磁盘文件,网络连接,甚至是内在缓冲区。要使用流类,必须导入java.io包。InputStream三个基本的读的方法:abstract int read():读取一个字节数据,并返回读到的数据,如果返回-1,表示读到了输入流的末尾。int read(byte b):将数据读入一个字节数组,同时返回实际读取的字节数。如果返回-1,表示读到了输入流的末尾。int read(byte b,int off,int len):将数据读入一个字节数组,同时返回实际读取的字节数。如果返回-1,表示读到了输入流的末尾。off指定在数组b中存放数据的起始偏移位置;len指定读取的最大字节数。为什么只有第一个方法是抽象的,其余的两个方法是具体的?因为两个具体的方法,它们的内部实现都是通过抽象的方法去实现的,抽象方法显然在InputStream里面是没有实现的。没有实现,我们只能在子类里面去实现它。然后将另外两个方法继承过来,然后调用子类实现的那个版本。因为第二个read方法依靠第三个read方法来实现,而第三个read方法又依靠第一个read方法来实现,所以只有第一个read是与具体的IO设备相关的,它需要InputStream的子类来实现。分析,JDK里面给我们提供的每一个InputStream的子类,都会去实现read()方法,而不同功能的输入流类,它们实现方式肯定是不一样的,即这个read方法,即便在InputStream里面定义好了,子类里面也要把它重写,定义的肯定是不符合我的要求的,所以它干脆定义成一个抽象的,这就正符合一个抽象的含义。仅仅是定义了一个契约,告诉子类,实现这个方法,每次读一个字节,具体怎么实现,是根据子类的要求去做。子类要是处理网络的,就按照网络的方式实现。处理字节数组的,按照字节数组的方式实现。处理文件的,按照文件的方式来实现。依此类推,因此不同子类对read方法实现是完全不一样的,因此对于父类它仅仅给我们提供了一个抽象的read方法,而不是一个具体版本。从硬盘上读取文件:package com.javaio.io;import java.io.FileInputStream;import java.io.IOException;import java.io.InputStream;public class InputStreamTest1 public static void main(String args) throws IOException InputStream is = new FileInputStream(d:/hello.txt);byte buffer = new byte200;int length = 0 ;/buffer表示读到这个数组里面来/0表示从第几个字节开始读取/200表示每次最大读多少字节/length表示实际读多少,为什么有这样一个区分呢,最多读200,未见得实际读了200,如果/文件里面只装了100字节,最多的数量一定是要小于等于数组长度。/如果文件定义的字节数,一共小于200个字节,一次就可以读完,length就直接返回实际的字节数/如果它里面的字节大于200,如果是 500字节,那么头两次读的一定是200个字节,因为最多可以让
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 购买液压拖车合同范本
- 帮带宠物出境合同范本
- 合伙开火锅店合作协议书2篇
- 高压注水泵房配电设备维修技术协议3篇
- 考勤工作心得体会怎么写(范文10篇)
- 指导性案例的题目及答案
- 八月一日讲话参考
- 旅游行业活动策划攻略
- 2025年事业单位工勤技能考试考试题库及参考答案
- CN222980410U 一种静簧与线圈架装配结构及拍合式继电器 (四川宏发电声有限公司)
- 2025年威海桃威铁路有限公司招聘笔试参考题库含答案解析
- 妊娠期高血压疾病的观察及护理
- 医院DIP支付方式改革工作实施方案
- 完成筹备申请正式设立高等职业学校的审批办理流程
- 手足显微外科护理常规
- 《开关培训》课件
- 俄乌冲突课件初中生
- 【初中英语】15天背完英语3500词
- 2024上海中考考纲单词
- 《激光原理及应用》全套课件
- 成人高考成考大学语文(专升本)试题及答案指导(2025年)
评论
0/150
提交评论