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(),关闭输出流。流关闭之后不能在输出字节,也不能再次打开。父方法是抽象方法。

  

时间: 2024-08-09 16:16:58

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

Java流家族之InputStream、OutputStream

Java流家族之InputStream 实现的接口: Closeable , AutoCloseable 已知直接子类: AudioInputStream , ByteArrayInputStream , FileInputStream , FilterInputStream , InputStream , ObjectInputStream PipedInputStream , SequenceInputStream , StringBufferInputStream 具体的方法: Modif

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

流对象使用完一般要用close方法关闭.释放资源. InputStream 和OutPutStream 二者都是字节输入和输出的抽象父类,子字节为单位处理数据,每次读取.写入一个字节,适合处理二进制文件,如:音频.视频.图片等. Redaer和writer是字符输入输出的抽象父类,以字符为单位处理数据,每次读取或写入一个字符,适合处理文本文件,实现类有FileReader和FileWriter. 附:Java代码实现图片文件的拷贝: package com.buaa.comparable; im

java中IO流小解

下面这张图列出了java中一些处理流: java中根据操作对象的不同可以分为:字节流和字符流. 首先我们先表示一下什么叫节点流和处理流: 节点流:可以从或向一个特定的地方(节点)读写数据.如FileReader  处理流:是对一个已存在的流的连接和封装,通过所封装的流的功能调用实现数据读写.如BufferedReader.处理流的构造方法总是要带一个其他的流对象做参数. java字节流 InputStream和OutputStream是java字节流中输入输出流的祖先. FileInputStr

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

1.InputStream和OutputStream简介 在java中InputStream和OutputStream分别代表字节输入流和字节输出流,表示以字节的方式来实现进程或者程序的通信,InputStream是输入流,表示以字节的方式从文件(FileInputStream)或者字节数组(ByteArrayInputStream)等读取数据,与之相对应的OutputStream是输出流,表示以字节的方式向文件(FileOutputStream)或者字节数组(ByteArrayOutputSt

java IO(二):字节流(InputStream和OutputStream)

*/ .hljs { display: block; overflow-x: auto; padding: 0.5em; color: #333; background: #f8f8f8; } .hljs-comment, .hljs-template_comment, .diff .hljs-header, .hljs-javadoc { color: #998; font-style: italic; } .hljs-keyword, .css .rule .hljs-keyword, .h

java的InputStream和OutputStream的理解【转】

1.在java中stream代表一种数据流(源),javaio的底层数据元,---(想像成水龙头)2.任何有能力产生数据流(源)的javaio对象就可以看作是一个InputStream对象既然它能产生出数据,我们就可以将数据取出,java对封装的通用方法就read()方法了--(出水龙头)3.任何有能力接收数据源(流)的javaio对象我们就可以看作是一个OutputStream对象同样,它能接收数据,我们就可以调用它的write方法,来让它接收数据--(进水龙头了,呵呵)4.当然,我们可以在I

Java IO 节点流 FileInput/OutputStream

Java IO 节点流 FileInput/OutputStream @author ixenos 节点流之 文件流 文件读写是最常见的I/O操作,通过文件流来连接磁盘文件,读写文件内容 1.文件的读写工作流程: 1)打开文件输入流或输出流 FileInputStream实现读文件,调用FileInputStream的构造器可以打开一个文件输入流: 1 public FileInputStream(String fileName) throws FileNotFoundException //指

【转载】关于java 的InputStream和OutputStream的理解

关于InputStream和OutputStream的输入输出方向的理解 InputStream输入类,首先需要读取的内容转化成输入流,再从它那里进行读取,先关联源:之后过程中关联目的,这样形成了流: 把要读取的内容输入到输入流,再从输入流进行读取,所以是read() OutputStream输出类,首先需要与写入的目的地相关联,然后通过它进行写入,首先关联的是流的目的:之后的过程中再关联源,这样形成了流 把要输出的东西通过输出流输出到目的地,所以是write() 下面的例子就是将f中的内容读至

黑马程序员——Java基础---IO(下)

黑马程序员——Java基础---IO(下) ------<a href="http://www.itheima.com" target="blank">Java培训.Android培训.iOS培训..Net培训</a>.期待与您交流! ------ 一.概述 Java除了基本的字节流.字符流之外,还提供了File类.properties类.打印流.序列流等和输入输出相关的类,它们能够帮助我们更好的处理信息.下面将对它们进行简单的介绍. 一.正