它們是字符流非常常用的一對(duì)實(shí)現(xiàn)類(lèi)同時(shí)也是一對(duì)高級(jí)流,實(shí)際開(kāi)發(fā)中我們不直接操作它們,但是它們?cè)诹鬟B接中是非常重要的一環(huán).
作用:
1:銜接字節(jié)流與其他字符流
2:將字符與字節(jié)相互轉(zhuǎn)換
- 示例1 轉(zhuǎn)換輸出流向文件中寫(xiě)入文本數(shù)據(jù)
import java.io.*;
import java.nio.charset.StandardCharsets;
public class OSWDemo {
public static void main(String[] args) throws IOException {
/*
使用這一對(duì)流演示轉(zhuǎn)換流的讀寫(xiě)字符方法
java.io.Writer所有字符輸出流的超類(lèi)上,定義了寫(xiě)出字符的相關(guān)方法
void write(int d)寫(xiě)出一個(gè)字符,實(shí)際傳入的應(yīng)當(dāng)是一個(gè)char。
void write(char[] data)
void write(char[] data,int offset,int len)
void write(String str) 直接寫(xiě)出一個(gè)字符串
*/
FileOutputStream fos = new FileOutputStream("osw.txt");
OutputStreamWriter osw = new OutputStreamWriter(fos,StandardCharsets.UTF_8);
String line = "如果你突然打了個(gè)噴嚏,那一定就是我在想你。";
osw.write(line);//轉(zhuǎn)換流的write(String str)會(huì)將寫(xiě)出的字符串轉(zhuǎn)換為字節(jié)然后寫(xiě)出
osw.write("如果半夜被手機(jī)吵醒,那一定就是我關(guān)心。");
System.out.println("寫(xiě)出完畢!");
osw.close();
}
}
- 示例2 轉(zhuǎn)換輸入流讀取文本文件
import java.io.*;
/**
* 轉(zhuǎn)換字符輸入流
* 可以將讀取的字節(jié)按照指定的字符集轉(zhuǎn)換為字符
*/
public class ISRDemo {
public static void main(String[] args) throws IOException {
//將osw.txt文件中的所有文字讀取回來(lái).
FileInputStream fis = new FileInputStream("osw.txt");
InputStreamReader isr = new InputStreamReader(fis,"UTF-8");
/*
字符流讀一個(gè)字符的read方法定義:
int read()
讀取一個(gè)字符,返回的int值實(shí)際上表示的是一個(gè)char(低16位有效).如果返回的
int值表示的是-1則說(shuō)明EOF
*/
//測(cè)試讀取文件中第一個(gè)字
// int d = isr.read();
// char c = (char)d;
// System.out.println(c);
//循環(huán)將文件所有字符讀取回來(lái)
int d;
while((d = isr.read()) != -1){
System.out.print((char)d);
}
isr.close();
}
}
- 轉(zhuǎn)換流的意義
實(shí)際開(kāi)發(fā)中我們還有功能更好用的字符高級(jí)流.但是其他的字符高級(jí)流都有一個(gè)共通點(diǎn):不能直接連接在字節(jié)流上.而實(shí)際操作設(shè)備的流都是低級(jí)流同時(shí)也都是字節(jié)流.因此不能直接在流連接中串聯(lián)起來(lái).轉(zhuǎn)換流是一對(duì)可以連接在字節(jié)流上的字符流,其他的高級(jí)字符流可以連接在轉(zhuǎn)換流上.在流連接中起到"轉(zhuǎn)換器"的作用(負(fù)責(zé)字符與字節(jié)的實(shí)際轉(zhuǎn)換)