1. 程式人生 > >JAVA高階基礎(32)---字元流

JAVA高階基礎(32)---字元流

字元流

                              字元輸入流:Reader          字元輸出流:Writer   

Writer(abstract)--->OutputStreamWriter--->FileWriter

OutputStreamWriter (將位元組轉換為字元流的一個類)

字元輸出流需要進行flush

字元流編碼

常用的字符集:UTF-8    GBK    GB2312   ISO-8859-1

當我們使用寫的方法將字元寫出到檔案時,會使用預設的或者指定的字符集對字元進行編碼,當我們開啟檔案的時候,其實就是文字編輯器對檔案中的字元進行解碼。在正確使用的時候,必須保證編碼和解碼 所用的字符集是一致的,否則就會出現中文亂碼

位元組流和字元流的區別

1、操作的單位不同:
                               位元組流就是按照位元組進行讀寫的;
                               字元流是按照字元進行讀寫的;
2、操作物件:


                        位元組流可以讀寫任意檔案
                        字元流只能讀取純文字檔案
3、使用不同:
                      位元組流是檔案的最小單元,對檔案的操作是原子級的
                      字元是兩個位元組的組合,需要在組合的時候,按照字符集進行正確的編碼和解碼

package org.lanqiao.writer.demo;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.io.Writer;

public class WriterDemo {
	public static void main(String[] args) throws IOException {
		//建立字元輸出流
		Writer w = new OutputStreamWriter(new FileOutputStream(new File("char.txt")),"UTF-8");
		String str = "太原師範學院";
		char[] charArr = {'太','原','師','範'};
		w.write(charArr);
		w.flush();
	}
}
package org.lanqiao.reader.demo;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.Reader;
import java.io.Writer;

public class ReaderDemo {
	public static void main(String[] args) throws IOException {
		Reader r = new InputStreamReader(new FileInputStream(new File("abc.mp4")));
		Writer w = new OutputStreamWriter(new FileOutputStream(new File("abcde.mp4")));
		/*每次讀取一個字元
		 * int i = 0 ;
		while((i = r.read())!= -1) {
			w.write(i);
			w.flush();
		}*/
//		每次讀取字元陣列長度個字元
		char[] buf = new char[1024];
		int len = 0 ;
		while((len = r.read(buf))!= -1) {
			
			w.write(buf, 0, len);
			w.flush();
		}
		
	}
}