天天看點

Java IO

IO解決問題

解決裝置與裝置之間 的資料傳輸問題。  比如:硬碟--->記憶體            記憶體----->硬碟

位元組流:

輸入位元組流

InputStream 所有輸入位元組流的基類。抽象類。

FileInputStream 讀取檔案的輸入位元組流。

BufferedInputStream 緩沖輸入位元組流。該類内部其實就是維護了一個8kb位元組數組而已。  該類出現的目的是為了提高讀取檔案資料的效率。

輸出位元組流

OutputStream  所有輸出位元組流的基類。  抽象類。

FileOutputStream 向檔案輸出資料 的輸出位元組流。

BufferedOutputStream  緩沖輸出位元組流。該類出現的目的是為了提高向檔案寫資料的效率。該類内部其實也是維護了一個8kb的位元組數組而已。

什麼情況使用位元組流:讀取到資料不需要經過編碼或者解碼的情況情況下這時候使用位元組流。比如:圖檔資料

字元流 = 位元組流 + 編碼(解碼)

字元流:

輸入字元流

Reader 所有輸入字元流的基類。抽象類。

FileReader 讀取檔案字元的輸入字元流。 

BufferedReader 緩沖輸入字元流。該類出現的目的是為了提高讀取檔案字元的效率并且拓展了功能(readLine()),它内部 其實就是維護了一個8192個長度的字元數組。

輸出字元流

Writer 所有輸出字元流的基類。抽象類。

FileWriter 向檔案輸出字元資料的輸出字元流。

BufferedWriter 緩沖輸出字元流。該類出現的目的是為了提高寫檔案字元的效率并且拓展了功能(newLine())。

什麼情況下使用字元流:如果讀寫的都是字元資料,這時候我們就使用字元流。

轉換流

輸入位元組流的轉換流             輸入位元組流---------輸入字元流

InputSrteamReader 

輸出位元組流的轉換流

OutputStreamWriter

轉換流的作用:

1. 可以把對應的位元組流轉換成字元流使用。

2. 可以指定碼表進行讀寫檔案的資料。

package cn.itcast.io;                  import java.io.BufferedReader;              import java.io.FileInputStream;              import java.io.FileOutputStream;              import java.io.IOException;              import java.io.InputStream;              import java.io.InputStreamReader;              import java.io.OutputStream;              import java.io.OutputStreamWriter;              import java.net.InetAddress;              import java.net.Socket;                  public class Io {               public static void main(String[] args) throws Exception{              //    readFile();                 writeFile();                 testInput();                   }               public static  void readFile() throws IOException{                 FileInputStream fileInputStream = new FileInputStream("G:\\eclipse-workspace\\test\\liuchao");                 InputStreamReader inputStreamReader = new InputStreamReader(fileInputStream,"utf-8");                 int content = 0;                 StringBuilder stringBuilder = new StringBuilder();                 while ((content =inputStreamReader.read())!=-1) {              //      System.out.println((char)content+"");                   stringBuilder.append((char)content);                     }                 System.out.print(stringBuilder);                 inputStreamReader.close();               }                  //    FileReader fileReader = new FileReader("G:\\eclipse-workspace\\test\\liuchao");              //    int con=0;              //    while((con=fileReader.read()!=-1)) {              //      System.out.print((char)con);              //    }              //    FileReader.close();                    public static void writeFile() throws Exception {                  FileOutputStream fileOutputStream = new FileOutputStream("G:\\eclipse-workspace\\test\\liuchao");                  OutputStreamWriter outputStreamWriter = new OutputStreamWriter(fileOutputStream,"gbk");                  outputStreamWriter.write("劉超");                 outputStreamWriter.close();               }                    public static void TestOutPut() throws Exception {                  Socket socket = new Socket(InetAddress.getLocalHost(),9090);                  OutputStream outputStream = socket.getOutputStream();                  OutputStreamWriter outputStreamWriter = new OutputStreamWriter(outputStream);                  outputStreamWriter.write("愛你");                  socket.close();               }                public static void testInput() throws Exception {                  InputStream  in = System.in;                  InputStreamReader inputStreamReader = new InputStreamReader(in);                  BufferedReader bufferedReader = new BufferedReader(inputStreamReader);                  System.out.println(bufferedReader.readLine());                   }              }