Java的IO系统是用来进行输入和输出的,Java系统本身提供了非常丰富的类库,利用这些类库几乎可以进行一切的IO操作,但要彻底弄明白这些类的用法和它们之间的关系却并还容易,笔者总结了一些学习Java IO的思路,希望对大家能有帮助。
很多时候在Java中使用IO的时候,都是这几个关键字交叉混合使用,一不小心就容易弄迷,要明这四个关键字,就要把握住一点,Java中IO的所有操作就是两类,输入和输出,而所谓的输入、输出都是站在程序的角度而言的。
比如要通过一个程序,往硬盘中写入一个文件,对程序而言,肯定是程序在源源不断的把数据往硬盘上放,对程序而言它是在Output,也就是在往出Write,所以Output总是Write对应,表达的是输出的意思。
反过来,要通过一个程序把内存中的数据取出来,那么程序要做的工作就是源源不断的把内存中的数据往外拿,就要不断的去读,从程序的角度看,是有数据不断的往程序里放,这样就是Input,它在Input的时需要不断的Read,所以Input总是Read对应。
Stream代表的是任何有能力产出数据的数据源,或是任何有能力接收数据的接收源。在Java的IO中,所有的Stream都包括Input和Output两种类型。
所有Java IO都可以分成两类
l 输入流
l 输出流
所有的输入流、输出流都可以分为字节(输入、输出)流,字符(输入、输出)流,处理字节的主要是(OutputStream/InputStream) 系列,处理字符的,主要是(Reader/Write)系列。
1) ByteArrayInputStream:把内存中的一个缓冲区作为InputStream使用
2) StringBufferInputStream:把一个String对象作为InputStream
3) FileInputStream:把一个文件作为InputStream,实现对文件的读取操作
4) PipedInputStream:实现了pipe的概念,主要在线程中使用
5) SequenceInputStream:把多个InputStream合并为一个InputStream
1) ByteArrayOutputStream:把信息存入内存中的一个缓冲区中
2) FileOutputStream:把信息存入文件中
3) PipedOutputStream:实现了pipe的概念,主要在线程中使用
4) SequenceOutputStream:把多个OutStream合并为一个OutStream
1) CharArrayReader:与ByteArrayInputStream对应
2) StringReader:与StringBufferInputStream对应
3) FileReader:与FileInputStream对应
4) PipedReader:与PipedInputStream对应
1) CharArrayWrite:与ByteArrayOutputStream对应
2) StringWrite:无与之对应的以字节为导向的stream
3) FileWrite:与FileOutputStream对应
4) PipedWrite:与PipedOutputStream对应
1) DataInputStream:从Stream中读取基本类型(int、char等)数据。
2) BufferedInputStream:使用缓冲区
3) LineNumberInputStream:会记录input stream内的行数,然后可以调用getLineNumber()和setLineNumber(int)
4) PushbackInputStream:很少用到,一般用于编译器开发
1) 没有与DataInputStream对应的Reader
2) BufferedReader:与BufferedInputStream对应
3) LineNumberReader:与LineNumberInputStream对应
4) PushBackReader:与PushbackInputStream对应
1) DataIOutStream:往stream中输出基本类型(int、char等)数据。
2) BufferedOutStream:使用缓冲区
3) PrintStream:产生格式化输出
1) BufferedWriter:与BufferedOutStream对应
2) PrintWriter:与 PrintStream对应
针对这个类,记住以下几点:
1) 可通过RandomAccessFile对象完成对文件的读写操作
2) 在产生一个对象时,可指明要打开的文件的性质:r,只读;w,只写;rw可读写
3) 可以直接跳到文件中指定的位置
一根管直接插到下面的类型上,下面的管道指的是线程和线和之间的通讯。
类型 |
字符流 |
字节流 |
磁盘文件 |
FileReader |
FileInputStream |
FileWriter |
FileOutputStream |
|
内存数组 |
CharArrayReader |
ByteArrayInputStream |
CharArrayWriter |
ByteArrayOutputStream |
|
内存字符串 |
StringReader |
|
StringWriter |
|
|
管道 |
PipedReader |
PipedInputStream |
PipedWriter |
PipedOutputStream |
缓冲流要“套接”在相应的读写流之上,对读写的数据提供了缓冲的功能,提高了读写的效率。对于输出的缓冲流,写出的数据会先在内存中缓存,使用flush方法将会使其的数据立刻写出。
InputStreamReader和OutputStreamWriter用于字节数据到字符数据之间的转换
InputStreamReader需要和InputStream"套接"
OutputStreamReader需要和OutputStream"套接"