目标:字符输入转换流InputStreamReader的使用
结构:
字节流 | 字符流 | ||
字节输入流 | 字节输出流 | 字符输入流 | 字符输出流 |
InputStream | OutputStream | Reader | Writer(抽象类) |
FileInputStream | FileOutputStream | FileReader | FileWriter(实现类,低级流,原始流) |
BufferedInputStream | BufferedOutStream | BufferedReader | BufferedWriter(实现类,缓冲流) |
InputStreamReaderr | OutputStreamWriter |
字符输入转换流InputStreamReader:
– 作用:可以把原始的字节流按照当前默认的代码编码转换成字符输入流。
可以把原始的字节流按照指定编码转换成字符输入流
– 构造器:
public InputStreamReader(InputStream is):可以使用当前代码默认编码转换成字符流,几乎不用!
public InputStreamReader(InputStream is,String charset):可以指定编码把字节流转换成字符流
小结:
字符输入转换流可以指定编码把字节流转换成字符输入流从而
解决了:不同编码读取乱码的问题。
只要保证了读字符没有乱码,那么以后就永远不会乱码!!
public class InputStreamReaderDemo01 {
public static void main(String[] args) throws Exception {
// 我爱你:oo oo oo
InputStream is = new FileInputStream("D:\\itcast\\网络编程公开课\\Netty.txt");
// 把原始的字节流按照当前默认的代码编码转换成字符输入流:UTF-8
// Reader fr = new InputStreamReader(is);
// 可以把原始的字节流按照指定编码转换成字符输入流
Reader fr = new InputStreamReader(is,"GBK");
// 把字符输入流包装成缓冲字符输入流
BufferedReader br = new BufferedReader(fr);
// 定义一个字符串变量存储行数据
String line ;
while((line = br.readLine())!=null){
System.out.println(line);
}
}
}
字符输出转换流:OutputStreamWriter
– 作用:可以指定编码把字节输出流转换成字符输出流。
– 构造器:
public OutputStreamWriter(OutputStream os):用当前默认编码UTF-8把字节输出流转换成字符输出流
public OutputStreamWriter(OutputStream os,String charset):指定编码把字节输出流转换成字符输出流
小结:
OutputStreamWriter字符输出转换流可以指定编码把字节输出流转换成字符输出流
从而可以实现:指定编码写内容出去。
public class OutputStreamWriterDemo02 {
public static void main(String[] args) throws Exception {
// 写数据
OutputStream os = new FileOutputStream("src/dlei06.txt");
// 用当前默认编码UTF-8把字节输出流转换成字符输出流
// Writer fw = new OutputStreamWriter(os);
// 指定编码把字节输出流转换成字符输出流
Writer fw = new OutputStreamWriter(os,"GBK");
fw.write("我在黑马快乐的黑老师!");
fw.close();
}
}