java IO流总结

Java IO主要主要在java.io包下,分为四大块:
1、基于字节操作的I/O接口:InputStream和OutputStream
2、基于字符操作的I/O接口:Writer和Reader
3、基于磁盘操作的I/O接口:File
4、基于网络操作的I/O接口:Socket(不在java.io包下)

InputStreamOutputStream

java IO流总结_第1张图片

 java IO流总结_第2张图片

InputStream类是个抽象类,里面核心的方法就是read()、read(byte b[])、read(byte b[], int off, int len),这三个方法是用于读取数据的底层的方法,他们可以用来读取一下这些类型的数据:
A. 字节数组
B. String对象
C. 文件
D. 管道,从一端进入,从另一端输出
E. 流
F. internet资源
每一种数据源都有相应的InputStream子类,因为InputStream是个处于顶层的类,用来处理各种数据源的类都继承了InputStream类,我们来看看这些类:
ByteArrayInputStream:处理字节数组的类,允许将内存的缓冲区当做InputStream使用。
StringBufferInputStream:将String转换成InputStream,内部实现用的是StringBuffer。
FileInputStream:从文件中读取数据。
PipedInputStream:用于从管道中读取数据。
SequenceInputStream:将多个流对象转化成一个InputStream。
FilterInputStream:装饰器类,为其它InputStream类提供功能。
从上面的图1中我们可以看出,FilterInputStream虽说是Inputstream的子类,但它依然是BufferedInputStream、DataInputStream、LineNumberInputStream、PushbackInputStream类的父类,这四个类分别提供了最贴近我们程序员使用的方法,如:readInt() 、readInt()、readInt()等等。对于IO操作,不管是磁盘还是网络,最终都是对字节的操作,而我们平时写的程序都是字符形式的,所以在传输的过程中需要进行转换。在字符到字节的转换过程中,我们需要用到一个类:InputStreamReader。

WriterReader

java IO流总结_第3张图片

java IO流总结_第4张图片

WriterReader操作的目的就是操作字符和不是字节,和InputStreamOutputStream配合增加IO效果。通过InputStreamReaderOutputStreamReader可以进行字节和字符的转换,设计WriterReader的目的是国际化,使IO操作支持16位的Unicode.

缓冲输入文件。

[java]  view plain  copy
  1. import java.io.BufferedReader;  
  2. import java.io.FileReader;  
  3.   
  4. public class InputStreamTest {  
  5.   
  6.     public static String read(String filename) throws Exception {  
  7.         BufferedReader br = new BufferedReader(new FileReader(filename));  
  8.         String s;  
  9.         StringBuffer sb = new StringBuffer();  
  10.         while ((s = br.readLine()) != null) {  
  11.             sb.append(s + "\n");  
  12.         }  
  13.         br.close();  
  14.         return sb.toString();  
  15.     }  
  16.   
  17.     public static void main(String[] args) throws Exception {  
  18.         System.out.println(read("src/InputStreamTest.java"));  
  19.     }  
  20.  }  

从内存中读取。

[java]  view plain  copy
  1. import java.io.StringReader;  
  2.   
  3. public class MemoryInput {  
  4.   
  5.     public static void main(String[] args) throws Exception {  
  6.         StringReader in = new StringReader(  
  7.                 InputStreamTest.read("src/MemoryInput.java"));  
  8.         int c;  
  9.         while ((c = in.read()) != -1)  
  10.             System.out.println((char) c);  
  11.     }  
  12.   
  13. }  

基本的文件输出。

[java]  view plain  copy
  1. import java.io.BufferedReader;  
  2. import java.io.BufferedWriter;  
  3. import java.io.FileWriter;  
  4. import java.io.PrintWriter;  
  5. import java.io.StringReader;  
  6.   
  7. public class BasicFileOutput {  
  8.   
  9.     static String file = "basie.out";  
  10.   
  11.     public static void main(String[] args) throws Exception {  
  12.         BufferedReader in = new BufferedReader(new StringReader(  
  13.                 InputStreamTest.read("src/BasicFileOutput.java")));  
  14.         PrintWriter out = new PrintWriter(new BufferedWriter(new FileWriter(  
  15.                 file)));  
  16.         int lineCount = 1;  
  17.         String s;  
  18.         while ((s = in.readLine()) != null) {  
  19.             out.println(lineCount++ + ": " + s);  
  20.         }  
  21.         out.close();  
  22.         System.out.println(InputStreamTest.read(file));  
  23.     }  
  24. }  

我们最原始的使用的从控制台输入或者输出的那些类和方法,如System.inSystem.out等。

[java]  view plain  copy
  1. public class StandardIO {  
  2.   
  3.     public static void main(String[] args) throws IOException {  
  4.         BufferedReader in = new BufferedReader(new InputStreamReader(System.in));  
  5.         String s;  
  6.         while ((s = in.readLine()) != null && s.length() != 0)  
  7.             System.out.println(s);  
  8.     }  
  9. }  

System.in返回的是未经包装的InputStream对象,所以需要进行装饰,经InputStreamReader转换为Reader对象,放入BufferedReader的构造方法中。除此之外,System.outSystem.err都是直接的PriintStream对象,可直接使用。我们也可以使用java.util包下的Scanner类来代替上述程序:

[java]  view plain  copy
  1. public class StandardIO {  
  2.   
  3.     public static void main(String[] args) throws IOException {  
  4.         Scanner in = new Scanner(System.in);  
  5.         String s;  
  6.         while((s = in.next()) != null && s.length() != 0){  
  7.             System.out.println(s);  
  8.         }  
  9.     }  

你可能感兴趣的:(java IO流总结)