Java IO流

首先上在网上找的InputStream和OutputStream的类图结构

 

下面的是Reader 和Writer 的类图结构

 

挑重点的讲解一下

1.ByteArrayInputStream和ByteArrayOutputStream

顾名思义,字节输入流和字节输出流,ByteArrayInputStream( ) 在构造输入流的时候传进去的是字节数组,通过read()或者read(byte[] b, int off, int len)方法读取单个字符,如果读到结尾返回-1.第二种是一次读取字节数组,而不是一个一个的读.

ByteArrayOutputStream  字节数组输出流在内存中创建一个字节数组缓冲区,所有发送到输出流的数据保存在该字节数组缓冲区中

没有带参的构造函数,有两个方法write(int b)和write(byte[] b, int off, int len)方法, 将字节数组的参数传进去,通过ByteArrayOutputStream.write( )方法将字节数组  输出到内存的字节数组缓冲区中.

可以通过toByteArray()方法返回字节数组,writeTo(OutputStream out) 将缓冲区的字节数组写进 out 对象中

2.FileInputStream和FileOutputStream

最常用的IO流,FileInputStream(File f),File作为数据源,通过read() 单个读取字节,或者通过read(byte[ ] b)每次读取一个字节数组的长度.

FileOutputStream(File f),通过write(byte[ ] b),write(int b)方法将字节数组或字节写入文件输出流.  这样可以实现文件的写操作.

3.PipedInputStream 和 PipedOutputStream

管道输入流和输出流,主要的作用是实现线程之间的输入和输出操作

管道输入流应该连接到管道输出流;管道输入流提供要写入管道输出流的所有数据字节。通常,数据由某个线程从 PipedInputStream 对象读取,并由其他线程将其写入到相应的 PipedOutputStream。不建议对这两个对象尝试使用单个线程,因为这样可能死锁线程。管道输入流包含一个缓冲区,可在缓冲区限定的范围内将读操作和写操作分离开。如果向连接管道输出流提供数据字节的线程不再存在,则认为该管道已损坏。 

在一个线程中通过PipedOutputStream的write()方法写进输入流,然后 在另一个线程中使用PipedInputStream.read()方法将输出流的内容读出来. 

他们之间通过PipedOutputStream的connect(PipedInputStream in)或者PipedInputStream的connect(PipedInputStream  out)方法关联,实现 线程之间的流的传输.

 4.SequenceInputStream 

序列输入流:表示其他输入流的逻辑串联。它从输入流的有序集合开始,并从第一个输入流开始读取,直到到达文件末尾,接着从第二个输入流读取,依次类推,直到到达包含的最后一个输入流的文件末尾为止。

有两个构造方法   SequenceInputStream(Enumeration<? extends InputStream> e)  和 SequenceInputStream(InputStream s1, InputStream s2)

 要么是个输入流类型 的枚举类 或者 两个输入流  将枚举类或者 两个输入流 合并

5.BufferedInputStream 和 BufferedOutputStream

int read(byte[] b, int off, int len)
          从此字节输入流中给定偏移量处开始将各字节读取到指定的 byte 数组中。

返回的是读取的字节数.

处理流,节点流的inputStream传进来,进行装饰,实现更强大的功能,缓冲流主要是加一个默认为8192字节的缓存,放在内存中,通过flush()或者close(),将缓存一次性写到文件对象或字节数组对象中.或者一次性读到应用程序中 ,如果在inputStream 中的read(byte[ ] b)  b的大小和8192一样大,效率和BufferedInputStream  差不多 . 还有点不同的是inputstream 的read 方法是堵塞的,而bufferedinputStream 不是堵塞的.

BufferedOutputStream的write()方法

void write(byte[] b, int off, int len)
          将指定 byte 数组中从偏移量 off 开始的 len 个字节写入此缓冲的输出流。

void  write(int b)
          将指定的字节写入此缓冲的输出流

 

posted @ 2018-02-11 01:35  灬Silence灬  阅读(120)  评论(0编辑  收藏  举报