JAVA高階基礎(32)---字元流
阿新 • • 發佈:2018-12-07
字元流
字元輸入流: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();
}
}
}