1. 程式人生 > >字元流與位元組流 多執行緒

字元流與位元組流 多執行緒

(Input)輸入流:輸入流指的是將資料以字元或位元組形式從外部媒介比如檔案、資料庫等讀取到記憶體中。

通過JAVA程式讀取硬碟上的某個檔案內容就需要使用輸入流。

(Output)輸出流:輸出流指的是將記憶體中的資料寫入外部媒介。

通過JAVA程式將內容寫入到硬碟上的某個檔案就需要使用輸出流。

一.什麼是IO流

流:源於UNIX中管道(pipe)的概念,在UNXI中,管道是一條不間斷的位元組流,用來實現程式或程序的通訊,或讀寫外圍裝置,外部檔案等。

二.IO流的分類:

1.位元組流:InputStream和OutputStream

2.字元流:Reader和Writer

位元組流的概念:位元組流是由位元組組成的,位元組流是最基本的,所有的InputStream和OutputStream的子類都是位元組流,主要用在處理二進位制資料,它是按位元組來處理的。

字元流的概念:字元流是由字元組成的,JAVA裡字元由兩個位元組組成,所有的Reader和Writer的子類都是字元流,主要用在處理文字內容或特定字元。

位元組流和字元流的區別:

1.讀寫的時候一個是按位元組讀寫,一個是按字元。

2.需要對內容按行處理,一般會選擇字元流。

3.只是讀寫檔案,和檔案內容無關的(下載、複製等),一般選擇位元組流。

   複製Word 圖片用位元組流複製  txt文字文件,Java檔案可以用字元流複製。

FileInputStream的常用方法:

1.read() 從此輸入流中讀取下一個資料位元組。

2.close() 關閉此輸入流並釋放與此流關聯的所有系統資源。

三.Reader子類:

1.BufferedReader從字元輸入流中讀取文字,緩衝各個字元,從而實現字元、陣列和行的高效讀取。

2.FileReader從InputStreamReader類繼承而來,該類按字元讀取流中資料。

四.執行緒

程序是在執行過程中在記憶體中開闢的空間。

程式不等與程序,但是程式與程序是一一對應的。

執行緒:程式在執行過程中,能夠執行程式程式碼的一個執行單元。(執行任務的最小單元)。

使用多執行緒的兩種方法

1.繼承Thread類,重寫run()方法

2.實現Runnable介面,並實現該介面的run()方法 

附程式碼

檔案的複製

package com.lenovo.www.entity;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;

public class FileDemo7 {
    public static  void main(String[] args) {
        int count = 0;
        FileReader reader = null;
        BufferedReader breader = null;
        BufferedWriter writer = null;
        try {
             reader = new FileReader("D:\\java demo\\JAVA.txt");
             writer = new BufferedWriter(new FileWriter("D:\\java demo\\JAVA2"));
             breader = new BufferedReader(reader);

            String temp = "";
            while((temp= breader.readLine())!=null) {
                writer.write(temp);
                writer.newLine();

            }
            writer.flush();
            System.out.println("共迴圈"+count+"次");
        } catch ( FileNotFoundException e) {
            e.printStackTrace();
        }catch(IOException e) {
            e.printStackTrace();
        }finally {
            try {
                breader.close();
                reader.close();
                writer.close();
            }catch(IOException e) {
                e.printStackTrace();
            }
        }
    }

}

多執行緒

package com.lenovo.entity;

public class Demo {
    public static void main(String[] args) {
        int count = 0;
        new Thread(new MyThread()).start();

        new Thread(new MyThead1()).start();

        while (true) {
            System.out.println(Thread.currentThread().getName() + "--" + count++);
            try {
                Thread.sleep(1000);
            } catch (InterruptedException e) {
                e.printStackTrace();

            }

        }

    }
}
    class MyThread extends Thread {
        @Override
        public void run() {
            super.run();
            int c = 0;
            while (true) {
                System.out.println(Thread.currentThread().getName() + "**" + c++);
                try {
                    Thread.sleep(1000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        }

    }


class MyThead1 implements Runnable {
    @Override
    public void run() {
        int c = 0;
        while (true) {
            System.out.println(Thread.currentThread().getName() + "**" + c++);
            try {
                Thread.sleep(1000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }

        }
    }
}

字元流讀寫

package com.lenovo.www.entity;

import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;

public class FileDemo8 {
    public static void main(String[] args) {
        BufferedWriter writer = null;
     try {
         writer = new BufferedWriter(new FileWriter("D:\\java demo\\JAVA.txt",true));
         writer.newLine();
         writer.write("Hello Pig!");
         writer.newLine();
         writer.write("今天星期三");
         writer.newLine();
         writer.write("有風沒雨天氣晴");

         writer.flush();//沖刷緩衝區

        } catch (IOException e) {
            e.printStackTrace();
        }finally {
            try {
                writer.close();
            } catch (IOException e) {
                e.printStackTrace();
            }

        }
    }

}