Java IO系统详细解析(高度样式化)

来源:互联网 发布:朗读软件 编辑:程序博客网 时间:2024/05/29 12:58

JavaIO系统是用来进行输入和输出的,Java系统本身提供了非常丰富的类库,利用这些类库几乎可以进行一切的IO操作,但要彻底弄明白这些类的用法和它们之间的关系却并还容易,笔者总结了一些学习Java IO的思路,希望对大家能有帮助。

   InputOutputReadWriteStream的含义

很多时候在Java中使用IO的时候,都是这几个关键字交叉混合使用,一不小心就容易弄迷,要明这四个关键字,就要把握住一点,JavaIO的所有操作就是两类,输入和输出,而所谓的输入、输出都是站在程序的角度而言的。

比如要通过一个程序,往硬盘中写入一个文件,对程序而言,肯定是程序在源源不断的把数据往硬盘上放,对程序而言它是在Output,也就是在往出Write,所以Output总是Write对应,表达的是输出的意思。

反过来,要通过一个程序把内存中的数据取出来,那么程序要做的工作就是源源不断的把内存中的数据往外拿,就要不断的去读,从程序的角度看,是有数据不断的往程序里放,这样就是Input,它在Input的时需要不断的Read,所以Input总是Read对应。

Stream代表的是任何有能力产出数据的数据源,或是任何有能力接收数据的接收源。在JavaIO中,所有的Stream都包括InputOutput两种类型。

   Java IO的分类

二.1           IO的分类

所有Java IO都可以分成两类

l  输入流

l  输出流

二.2           对输入输出的分类

所有的输入流、输出流都可以分为字节(输入、输出)流,字符(输入、输出)流,处理字节的主要是(OutputStream/InputStream 系列,处理字符的,主要是(Reader/Write)系列。

二.2.1      面向字节(Byte)的输入流(InputStream系列):

1)       ByteArrayInputStream:把内存中的一个缓冲区作为InputStream使用

2)       StringBufferInputStream:把一个String对象作为InputStream

3)       FileInputStream:把一个文件作为InputStream,实现对文件的读取操作

4)       PipedInputStream:实现了pipe的概念,主要在线程中使用

5)       SequenceInputStream:把多个InputStream合并为一个InputStream

二.2.2      面向字节(Byte)的输出流(OutputStream系列):

1)       ByteArrayOutputStream:把信息存入内存中的一个缓冲区中

2)       FileOutputStream:把信息存入文件中

3)       PipedOutputStream:实现了pipe的概念,主要在线程中使用

4)       SequenceOutputStream:把多个OutStream合并为一个OutStream

二.2.3      面向Unicode字符的输入流(Reader系列):

1)       CharArrayReader:与ByteArrayInputStream对应

2)       StringReader:与StringBufferInputStream对应

3)       FileReader:与FileInputStream对应

4)       PipedReader:与PipedInputStream对应

二.2.4      面向Unicode字符的输出流(Write系列):

1)       CharArrayWrite:与ByteArrayOutputStream对应

2)       StringWrite:无与之对应的以字节为导向的stream

3)       FileWrite:与FileOutputStream对应

4)       PipedWrite:与PipedOutputStream对应

二.3           对流进行包装的流(Filter系列)

二.3.1      输入系列:

二.3.1.1         用于包装InputStream的流

1)       DataInputStream:从Stream中读取基本类型(intchar等)数据。

2)       BufferedInputStream:使用缓冲区

3)       LineNumberInputStream:会记录input stream内的行数,然后可以调用getLineNumber()setLineNumber(int)

4)       PushbackInputStream:很少用到,一般用于编译器开发

二.3.1.2         用于包装ReaderReader

1)       没有与DataInputStream对应的Reader

2)       BufferedReader:与BufferedInputStream对应

3)       LineNumberReader:与LineNumberInputStream对应

4)       PushBackReader:与PushbackInputStream对应

二.3.2      输出系列

二.3.2.1         用于包装OutputStream的流

1)       DataIOutStream:往stream中输出基本类型(intchar等)数据。

2)       BufferedOutStream:使用缓冲区

3)       PrintStream:产生格式化输出

二.3.2.2         用于包装WriteWriter

1)       BufferedWriter:与BufferedOutStream对应

2)       PrintWriter:与 PrintStream对应

   一个特殊的类:RandomAccessFile

针对这个类,记住以下几点:

1)       可通过RandomAccessFile对象完成对文件的读写操作

2)       在产生一个对象时,可指明要打开的文件的性质:r,只读;w,只写;rw可读写

3)       可以直接跳到文件中指定的位置

   总结

四.1           节点流类型

一根管直接插到下面的类型上,下面的管道指的是线程和线和之间的通讯。

四.2           分类表

类型

字符流

字节流

磁盘文件

FileReader

FileInputStream

FileWriter

FileOutputStream

内存数组

CharArrayReader

ByteArrayInputStream

CharArrayWriter

ByteArrayOutputStream

内存字符串

StringReader

 

StringWriter

 

管道

PipedReader

PipedInputStream

PipedWriter

PipedOutputStream

四.3            

缓冲流要“套接”在相应的读写流之上,对读写的数据提供了缓冲的功能,提高了读写的效率。对于输出的缓冲流,写出的数据会先在内存中缓存,使用flush方法将会使其的数据立刻写出。

四.4           转换流

InputStreamReaderOutputStreamWriter用于字节数据到字符数据之间的转换

InputStreamReader需要和InputStream"套接"

OutputStreamReader需要和OutputStream"套接"

原创粉丝点击