字節流和字符流是流的一種划分,按照處理流的數據單位進行的划分,兩類都分為輸入和輸出操作,字節流輸出數據OutputStream,輸入InputStream
字符流輸出Writer,輸入Reader完成。四個都是抽象類。
字符流處理的單元為兩個字符的Unicode字符,操作字符、字符數組或字符串。字節流處理單元為1個字節,操作字節和字節數組,字節流是最基本的,所有inputstream和outputstream的子類都是字節流,主要用在處理二進制數據,按照字節來處理的,實際中很多的數據是文本,於是又產生了字符流,它是按照虛擬機的編碼來處理,也就是要進行字符集的轉化,這兩個之間通過inputStreamReader和outputStreamWriter(轉換流)來關聯,實際上是通過byte[]和string來關聯的。
節點流和處理流的區別;
字節流和處理流是流的另外一種划分,按照功能不同進行的划分,節點流可以從或者向一個特定的節點讀寫數據,處理流是對一個數據已存在的流的連接和封裝,通過所瘋轉的流的功能調用實現數據讀寫,如BufferedReader.處理流的構造方法總是要帶一個其他的流對象做參數,一個流對象經過其他的流的多次包裝稱為流的鏈接。
注意,word文檔不是純文本文檔,除了文字還包含很多格式信息,不能用字符流處理,可以用字節流處理。
附:將word內容寫進txt后,用Java類讀到后台的Java代碼:
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.Reader;
import java.io.StringReader;
import java.io.UnsupportedEncodingException;
public class TestRead {
public static void main(String[] args) {
testReader();
}
static void testReader(){
File f = new File("d:/a.txt");
FileInputStream fis = null;
try {
fis = new FileInputStream(f);
InputStreamReader isr = new InputStreamReader(fis,"utf-8");
int temp = 0;
while((temp=isr.read())!=-1){
char c = (char) temp;
System.out.print(c);
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}finally{
try {
if (fis!=null) {
fis.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
}