首先上在网上找的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)方法关联,实现 线程之间的流的传输.