转载请注明源出处: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. 表格边框重复合并属性: border-collapse:collapse;

    table { border-collapse:collapse; }

  2. ansible-playbook 主机变量1

    hosts 配置后可以支持指定 端口,密码等其他变量 [root@10_1_162_39 host_vars]# ll total -rw-r--r-- root root May : hosts - ...

  3. 三)mybatis 二级缓存,整合ehcache

    mybatis-config.xml <setting name="cacheEnabled" value="true" /> PersonMapp ...

  4. 数据分析工具R和RStudio入门介绍

    https://www.cnblogs.com/yjd_hycf_space/p/6672995.html Python&R语言-python和r相遇:https://www.cnblogs. ...

  5. "请求被中止: 未能创建 SSL/TLS 安全通道"解决办法

    1.安装证书: 手动双击证书安装,过程略 2.分配权限: 在控制台中找到安装的证书,右键选择“管理私钥”, 添加自己需要的权限,如果在测试可以直接添加Everyone 3.修改代码:public st ...

  6. 常用算法 (JS实现)

    全排序列 function swap(array,a,b){ var m=array[a]; array[a]=array[b]; array[b]=m; } function full_sort(a ...

  7. OKHttp概览

    1,整体思路 从使用方法出发,首先是怎么使用,其次是我们使用的功能在内部是如何实现的,实现方案上有什么技巧,有什么范式.全文基本上是对 OkHttp 源码的一个分析与导读,非常建议大家下载 OkHtt ...

  8. linux信号量(转载)

    本文转载自http://blog.csdn.net/qinxiongxu/article/details/7830537 信号量一.什么是信号量信号量的使用主要是用来保护共享资源,使得资源在一个时刻只 ...

  9. IFNULL函数

    MySQL函数里有一个很有用的函数IFNULL,它的形式是IFNULL(fieldA,fieldB),意义是当字段fieldA是NULL时取fieldB,不是NULL时取fieldA的值. 这个函数与 ...

  10. Git安全配置

      今天收到了阿里云异地登录的短信报警,登录阿里云后台发现,有人从深圳登录了我的服务器(本人在北京),查看详细信息一共登录了5次,前两次是使用的git用户进行登录,后两次已经变成了root用户,怀疑是 ...