本人小白一枚,欢迎大家一起讨论学习,如有错误,还望大家指教。
转换流
简述:转换流的出现方便了字符流与字节流之间的操作,是字符流与字节流之间的桥梁,并且可以对读取到的字节/字符指定特定的编码。
InputStreamReader
:字节到字符的桥梁。
String getEncoding()
:获取此流使用的字符编码的名称。
boolean ready()
:判断此流是否已经准备好用于读取。如果其输入缓冲区不为空,或者可从底层字节流读 取字节,则已做好被读取准备。
OutputStreamWriter
:字符到字节的桥梁。
String getEncoding()
:获取此流使用的字符编码的名称。
这两个流对象是字符体系中的成员,他们有转换的作用,本身又是字符流,所以在构造的时候需要传入字节流对象进来。
案例一
键盘输入打印到控制台,小写字母转化成大写字母,遇到over退出。
public static void main(String[] args) throws IOException {
// 获取键盘录入对象。
// InputStream in = System.in;
// 将字节流对象转成字符流对象,使用转换流。InputStreamReader
// InputStreamReader isr = new InputStreamReader(in);
// 为了提高效率,将字符串进行缓冲区技术高效操作。使用BufferedReader
// BufferedReader bufr = new BufferedReader(isr);
// 键盘的最常见写法。
BufferedReader bufr = new BufferedReader(new InputStreamReader(System.in));
// OutputStream out = System.out;
// OutputStreamWriter osw = new OutputStreamWriter(out);
// BufferedWriter bufw = new BufferedWriter(osw);
BufferedWriter bufw = new BufferedWriter(new OutputStreamWriter(System.out));
String line = null;
while((line=bufr.readLine()) != null) {
if("over".equals(line)) {
break;
}
bufw.write(line.toUpperCase());
bufw.newLine();
bufw.flush();
}
bufr.close();
}
案例二
采用指定的编码读取文本文件或输出文本文件,在IO流中,如果想要指定编码读写数据,只能使用转换流。
// 采用指定编码从文本读取内容
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(new FileInputStream("test.txt"), "UTF-8"));
// 采用指定编码写入内容
BufferedWriter bufferedWriter = new BufferedWriter(new OutputStreamWriter(new FileOutputStream("test.txt"), "UTF-8"));