转载请注明源出处:http://www.cnblogs.com/lighten/p/6964702.html

1.前言

  计算机的IO操作一直都是比较重要的一环,IO顾名思义,就是输入输出流。不管是磁盘IO还是网络IO,数据流转就离不开IO,理解Java的IO操作类很重要,本文介绍IO的抽象父类InputStream和OutputStream,这是Java的IO操作基础,理解完抽象类,对于其它的IO流也有很大的帮助。

  流都实现了Closeable接口,也就是都需要关闭。输出流额外实现了一个Flushable方法,主要是通知立刻将数据刷入指定输出地。

2.InputStream

  1.read()方法是一个抽象方法,其是数据的读取源头,这个方法中要实现读取数据,返回读取的值。子类必须实现这个方法。

  2.read(byte[])方法用处是将流的输入读入byte[]数组,其实际上调用的是read(byte[], int, int)。

  3.read(byte[], int, int),将流读入byte[]数据的第off个位置开始,读取len个字节。

  上述就是读入byte数组的全过程,先判断参数的正确性,再读取一个字节,如果是-1则返回-1(流以-1判断是否结束),然后放入数组的off位置,之后就循环读,三种情况返回:1将所给的数据读满了,2读取-1结束符,3出现读取异常。最后返回数组所读的数据个数。

  4.skip(long),跳过指定个字节不读。

  上述代码很清楚,创建了一个跳过的缓冲数据,将流读到这里面去,跳过的字节数有长度限制,为2048个。通过循环排除IO异常的感染,直到读完或者读满要跳过的,然后返回实际跳过的数量。

  5.available(),返回估测的可读的数量,父类是直接返回了0。这个方法是对于所有流实现来说不都是准确的,所以慎用。这个方法需要被子类覆写。单次读或跳过很多字节不会阻塞,但是可能会读取或跳过少量字节。

  6.close(),关闭流,没有具体实现。会释放操作系统资源

  7.mark(int),标记读取位置,如果流实现支持,就可以重置位置,下次读取则一模一样。父类方法中什么都没做。使用之前要通过markSupported()方法判断一下是否支持。

  8.reset(),reset到mark方法最后一次调用的位置。父类不止mark,所以直接抛出IO异常。

  9.markSupported(),用于判读当前流是否支持标记流。与上两个方法配套使用。

3.OutputStream

  1.write(int),抽象方法,通常是写入一个byte,低8位将写入,高24位会被忽略。将指定字节写入输出地,子类必须实现。

  2.write(byte[]),实际上调用的就是方法3:write(b, 0, b.length);

  3.write(byte b[], int off, int len),将字节数组b的其实位置off开始,写入len长度的字节

  很简单的数组边界判定,通过循环调用write(int)方法。

  4.flush(),强制刷新方法,将write写出的字节(此时不一定到了目的地如磁盘,可能在缓存中),调用flush方法让已写缓存字节强制到目的地。父类方法没有具体实现。但是此方法并不保证正在到了目的地,比如磁盘,文件流,这个方法只保证之前写入的数据到了操作系统的write方法,不保证操作系统完成了写这个步骤。

  5.close(),关闭输出流。流关闭之后不能在输出字节,也不能再次打开。父方法是抽象方法。

  

Java之IO(一)InputStream和OutputStream的更多相关文章

  1. Java流对象:InputStream、OutputStream、Reader、Writer

    流对象使用完一般要用close方法关闭.释放资源. InputStream 和OutPutStream 二者都是字节输入和输出的抽象父类,子字节为单位处理数据,每次读取.写入一个字节,适合处理二进制文 ...

  2. Java之IO(零)总结

    转载请注明原出处:http://www.cnblogs.com/lighten/p/7274378.html 1.前言 本章是对之前所讲述的整个Java的IO包的一个总结,抽出个人认为比较重要的知识点 ...

  3. java中IO流小解

    下面这张图列出了java中一些处理流: java中根据操作对象的不同可以分为:字节流和字符流. 首先我们先表示一下什么叫节点流和处理流: 节点流:可以从或向一个特定的地方(节点)读写数据.如FileR ...

  4. java(jdk1.7) IO系列01之InputStream和OutputStream解析

    1.InputStream和OutputStream简介 在java中InputStream和OutputStream分别代表字节输入流和字节输出流,表示以字节的方式来实现进程或者程序的通信,Inpu ...

  5. Java IO流操作汇总: inputStream 和 outputStream【转】

    我们在进行Android java 开发的时候,经常会遇到各种IO流操作.IO流操作一般分为两类:字符流和字节流.以“Reader”结尾都是字符流,操作的都是字符型的数据:以“Stream”结尾的都是 ...

  6. Java IO流详解(三)——字节流InputStream和OutPutStream

    我们都知道在计算机中,无论是文本.图片.音频还是视频,所有的文件都是以二进制(字节)形式存在的,IO流中针对字节的输入输出提供了一系列的流,统称为字节流.字节流是程序中最常用的流.在JDK中,提供了两 ...

  7. Java IO(四) InputStream 和 OutputStream

    Java IO(四) InputStream 和 OutputStream 一.介绍 InputStream 和 OutputStream 是字节流的超类(父类),都是抽象类,都是通过实例化它们的子类 ...

  8. Java:IO流(二)——InputStream/OutputStream具体用法:FileXXXStream、ByteArrayXXXStream

    1.说明 InputStream和OutputStream是Java标准库中最基本的IO流,它们都位于java.io包中,该包提供了所有同步IO的功能. 2.模块:java.io.InputStrea ...

  9. JAVA IO包的整理---------InputStream和OutputStream

    一:OutPutStream类: public abstract class OutputStream extends Object implements Closeable, Flushable 这 ...

随机推荐

  1. 25. Green Living 绿色生活

    25. Green Living 绿色生活 ①We all know that humans are damaging the environment,but what can we do about ...

  2. 怎么备份VMware虚拟磁盘文件或移植到其他虚拟机

    原文:http://jingyan.baidu.com/article/a681b0de17b3173b1843468f.html 方法/步骤     第一种方法:直接复制本地主机磁盘下的虚拟磁盘文件 ...

  3. s28 LNMP架构服务搭建

    nginx-location使用 location语法 location使用的语法例子为: location [=|~|~*|^~] uri{ 对location语法列表说明. |1ocation | ...

  4. HDU 2095 find your present (2) (异或)

    题意:给定n个数,让你找出那一个次数为1的. 析:由于题意说了,只有那一个数是奇数,所以其他的都是偶数,根据异或的性质,两个相同的数异或为0: 任何数和0异或得原数,可以很简单的做出这个题. 代码如下 ...

  5. 使用原生Java Web来实现大文件的上传

    版权所有 2009-2018荆门泽优软件有限公司 保留所有权利 官方网站:http://www.ncmem.com/ 产品首页:http://www.ncmem.com/webapp/up6.2/in ...

  6. 一种基于Redis的10行代码实现IP频率控制方法

    优点:可支持海量访问的频率控制,只需要增加Redis机器,单个Redis节点(只占用一个cpu core)即可支持10万/s以上的处理. 基于IP频率限制是种常见需求,基于Redis可以十分简单实现对 ...

  7. 201709021工作日记--Volley源码详解(五)

    学习完了CacheDispatcher这个类,下面我们看下NetworkDispatcher这个类的具体细节,先上代码: /** * 提供一个线程执行网络调度的请求分发 * Provides a th ...

  8. C#-VS字符串、日期、时间和时间段

    小知识 哈希表,内存中的对象,用速度很快的哈希表当字典表,记录主键和内容. @,遇到转义字符,不转义,直接输出,即就是.转义字符是反斜杠/ 全部的内置类型都用类和结构描述.值类型用结构,引用类型用类. ...

  9. 《Android开发艺术探索》第11章 Android的线程和线程池

    第11章 Android的线程和线程池 11.1 主线程和子线程 (1)在Java中默认情况下一个进程只有一个线程,也就是主线程,其他线程都是子线程,也叫工作线程.Android中的主线程主要处理和界 ...

  10. hdu 5003 模拟水题

    http://acm.hdu.edu.cn/showproblem.php?pid=5003 记得排序后输出 #include <cstdio> #include <cstring& ...