InputStream
|--FileInputStream/:文件输入流。从文件系统中的某个文件中获得输入字节。用于读取图像,声音,视频等数据类的原始字节流。
|
|--FilterInputStream/:包含一些输入流,将这些流用作其基本数据源,可以直接传输数据或者提供额外的功能。
|
|--BufferedInputStream/:输入流缓冲区。
| 为另一个输入流添加一些功能,创建一个缓冲区,支持mark和reset方法。
| mark操作记录输入流中的某个点,reset操作在从包含的输入流获取新字节前,再读取最后一次。
|--DataInputStream/:用于操作基本数据类型数据的对象,应用程序可以使用数据输入流写入稍后有数据输入流读取的数据。
|
|--ObjectInputStream/:对象的序列化。用于操作对象的流,将一个具体的对象进行持久化写入到硬盘上。
|
|--PipedInputStream/:管道流。管道读取流可以读取管道写入流的数据。注意:需要加多线程技术,否则会发生死锁。read方法是阻塞式的。
|
|--ByteArrayInputStream/:字节数组输入流。操作的都是内存中的数组,所以不需要关闭。把数组封装到流中,可以提供更多的方法操作数组。
|
|--SequenceInputStream/:序列流。将多个读取流合并成一个读取流,可以方便操作多个读取流。原理(迭代器)。
 
 
 
OutputStream
|--FileOutputStream/:文件输出流。用于将写入File和FileDescriptor的输出流。用来操作图像,声音,视频等原始字节流。
|
|--FilterOutputStream/:包含一些输出流,重写那些将请求传递给包含输出流OutputStream的所有方法。
| 其子类可以进一步重写这些方法并额外提供方法和字段。
|--BufferedOutputStream/:输出流缓冲区。
| 应用程序可以将各个字节写入底层输出流中,而不必每个字节每次都抵用底层系统。提高了输出的效率。
|--DataOutputStream/:数据输出流允许应用程序将基本数据类型写入到输出流中。应用程序可以使用输入流将数据读入。
|
|--PrintStream/:为其他输出流添加了功能,方便打印各种数据值表示类型。PrintStream永远不会抛出IOException异常。
| 为了刷新可以创建一个新的PrintStream,调用println可以提供换行功能。使用了默认的字节编码。
|--ObjectOutputStream/:将java对象的基本数据类型和图形写入到OutputStream。
|
|--PipedOutputStream/:可以将管道输出流连接到管道输入流来创建通信管道。
| 用方法connect(PipedInputStream snk) 将此管道输出流连接到接收者。 同样使用多线程技术,避免死锁。  
|--ByteArrayOutputStream/:实现了一个输出流,其中的数据写入到一个byte数组。
| 使用toByteArray()和toString()获取数据。关闭无效,依然可以调用。不会产生任何IOException异常。
 
//-----------------------------------
字符流:
Reader
|--InputStreamReader/:数据转换流。是字节流通向字符流的桥梁。
| 为了达到高效。BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
|--FileReader/:用于读取字符类文件的便捷类。用于读取字符流。
| FileReader(String fileName)throws FileNotFoundException.filename要从中读取数据的文件的名称。
|--BufferedReader/:从字节输入流中读取文本,缓冲各个字节,实现字符,数组,和行的高效读取。
|
|--LineNumberReader/:跟踪行号的缓冲字符输入流。setLineNumber(int) 和 getLineNumber(),它们可分别用于设置和获取当前行号。 
|--CharArrayReader/:此类实现一个可用作字符输入流的字符缓冲区。
|
|--StringReader/:字符串的字符流。
 
Writer
|--OutputStreamWriter/:字符流通向字节流的桥梁,可以使用指定的charset将要写入流中的字符编码成字节。
| 为了高效Writer out = new BufferedWriter(new OutputStreamWriter(System.out));
|--FileWriter:用来写入字符文件的便捷类。用于写入字符流FileWriter(String fileName,boolean append)throws IOException
|/fileName - 一个字符串,表示与系统有关的文件名。
| append - 一个 boolean 值,如果为 true,则将数据写入文件末尾处,而不是写入文件开始处。
|--BufferedWriter:将文本写入字符输出流,缓冲各个字符,从而提供单个字符,数组和字符串的高效写入。
| PrintWriter out= new PrintWriter(new BufferedWriter(new FileWriter("foo.out")));
|--CharArrayWriter:此类实现一个可用作Writer的字符缓冲区,可使用使用tocharArray()和toString()获取数据。close()无效。无异常。
|
|--StringWriter:一个字符流,可以用其回收字符缓冲区中的输出来构造字符串。close()无效,无异常。
|
|--PrintWriter:想文本输出流打印对象的格式化表示形式。此类实现在PrintStream中的所有print方法,
 
 
 
File:将系统中的文件和文件夹封装成了对象。提供了更多的属性和行为可以对其操作。这是流办不到的,因为流只能操作数据。
1,创建。
boolean createNewFile():
boolean mkdir();
boolean mkdirs();创建多级目录。 
 
2,删除。
boolean delete();
void deleteOnExit();在虚拟机退出时删除。
 
3,获取.
long length():获取文件大小。
String getName():
String getPath():
String getAbsolutePath():
String getParent();
 
4,判断:
boolean exists():判断文件或者文件夹是否存在。
boolean isDirectory();
boolean isFile();
boolean isHidden();
boolean isAbsolute();
 
5,重命名。
boolean renameTo(File dest) :可以实现移动的效果。剪切+重命名。
 
String[] list():列出指定目录下的当前的文件和文件夹的名称。包含隐藏文件。
如果调用list方法的File 对象中封装的是一个文件,那么list方法返回数组为null。如果封装的对象不存在也会返回null。
只有封装的对象存在并且是文件夹时,这个方法才有效
 
RandomAccessFile:此类的实例支持对随机访问文件的读取和写入,随机访问一个存储文件的大型byte数组。
该文件指针可以通过 getFilePointer 方法读取,并通过 seek 方法设置。 
Serializable/:用于启动对象的序列化功能。接口Serializable可以强制制定的类具备序列化功能:
静态数据是不会被序列化的。可以把非静态数据不进行序列化:关键字 transient
 
流的操作规律:
1,源和目的
2,是否文本。
3,具体设备。
4,额外功能,(要使用哪个装饰类)