字元流與位元組流 多執行緒
(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();
}
}
}
}