Java之IO(一)InputStream和OutputStream
转载请注明源出处: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的更多相关文章
- Java流对象:InputStream、OutputStream、Reader、Writer
流对象使用完一般要用close方法关闭.释放资源. InputStream 和OutPutStream 二者都是字节输入和输出的抽象父类,子字节为单位处理数据,每次读取.写入一个字节,适合处理二进制文 ...
- Java之IO(零)总结
转载请注明原出处:http://www.cnblogs.com/lighten/p/7274378.html 1.前言 本章是对之前所讲述的整个Java的IO包的一个总结,抽出个人认为比较重要的知识点 ...
- java中IO流小解
下面这张图列出了java中一些处理流: java中根据操作对象的不同可以分为:字节流和字符流. 首先我们先表示一下什么叫节点流和处理流: 节点流:可以从或向一个特定的地方(节点)读写数据.如FileR ...
- java(jdk1.7) IO系列01之InputStream和OutputStream解析
1.InputStream和OutputStream简介 在java中InputStream和OutputStream分别代表字节输入流和字节输出流,表示以字节的方式来实现进程或者程序的通信,Inpu ...
- Java IO流操作汇总: inputStream 和 outputStream【转】
我们在进行Android java 开发的时候,经常会遇到各种IO流操作.IO流操作一般分为两类:字符流和字节流.以“Reader”结尾都是字符流,操作的都是字符型的数据:以“Stream”结尾的都是 ...
- Java IO流详解(三)——字节流InputStream和OutPutStream
我们都知道在计算机中,无论是文本.图片.音频还是视频,所有的文件都是以二进制(字节)形式存在的,IO流中针对字节的输入输出提供了一系列的流,统称为字节流.字节流是程序中最常用的流.在JDK中,提供了两 ...
- Java IO(四) InputStream 和 OutputStream
Java IO(四) InputStream 和 OutputStream 一.介绍 InputStream 和 OutputStream 是字节流的超类(父类),都是抽象类,都是通过实例化它们的子类 ...
- Java:IO流(二)——InputStream/OutputStream具体用法:FileXXXStream、ByteArrayXXXStream
1.说明 InputStream和OutputStream是Java标准库中最基本的IO流,它们都位于java.io包中,该包提供了所有同步IO的功能. 2.模块:java.io.InputStrea ...
- JAVA IO包的整理---------InputStream和OutputStream
一:OutPutStream类: public abstract class OutputStream extends Object implements Closeable, Flushable 这 ...
随机推荐
- 25. Green Living 绿色生活
25. Green Living 绿色生活 ①We all know that humans are damaging the environment,but what can we do about ...
- 怎么备份VMware虚拟磁盘文件或移植到其他虚拟机
原文:http://jingyan.baidu.com/article/a681b0de17b3173b1843468f.html 方法/步骤 第一种方法:直接复制本地主机磁盘下的虚拟磁盘文件 ...
- s28 LNMP架构服务搭建
nginx-location使用 location语法 location使用的语法例子为: location [=|~|~*|^~] uri{ 对location语法列表说明. |1ocation | ...
- HDU 2095 find your present (2) (异或)
题意:给定n个数,让你找出那一个次数为1的. 析:由于题意说了,只有那一个数是奇数,所以其他的都是偶数,根据异或的性质,两个相同的数异或为0: 任何数和0异或得原数,可以很简单的做出这个题. 代码如下 ...
- 使用原生Java Web来实现大文件的上传
版权所有 2009-2018荆门泽优软件有限公司 保留所有权利 官方网站:http://www.ncmem.com/ 产品首页:http://www.ncmem.com/webapp/up6.2/in ...
- 一种基于Redis的10行代码实现IP频率控制方法
优点:可支持海量访问的频率控制,只需要增加Redis机器,单个Redis节点(只占用一个cpu core)即可支持10万/s以上的处理. 基于IP频率限制是种常见需求,基于Redis可以十分简单实现对 ...
- 201709021工作日记--Volley源码详解(五)
学习完了CacheDispatcher这个类,下面我们看下NetworkDispatcher这个类的具体细节,先上代码: /** * 提供一个线程执行网络调度的请求分发 * Provides a th ...
- C#-VS字符串、日期、时间和时间段
小知识 哈希表,内存中的对象,用速度很快的哈希表当字典表,记录主键和内容. @,遇到转义字符,不转义,直接输出,即就是.转义字符是反斜杠/ 全部的内置类型都用类和结构描述.值类型用结构,引用类型用类. ...
- 《Android开发艺术探索》第11章 Android的线程和线程池
第11章 Android的线程和线程池 11.1 主线程和子线程 (1)在Java中默认情况下一个进程只有一个线程,也就是主线程,其他线程都是子线程,也叫工作线程.Android中的主线程主要处理和界 ...
- hdu 5003 模拟水题
http://acm.hdu.edu.cn/showproblem.php?pid=5003 记得排序后输出 #include <cstdio> #include <cstring& ...