一、前言:InputStreamReader 、OutputStreamWriter:
- 用来实现将字节流转化成字符流
- 字符集的参数设定:可以处理 不同的字符集(UTF-8、GBK(保存方式-->ANSI编码) ...), by th way, 不设定字符集, 默认以当前工程的字符集相同!
-
附:读入时产生乱码的原因:
-
1、
当前工程字符集与 源头文件内容的 字符集不符合! -
2、
在读取时,假如用read()一个一个字符(char)的读取,char占2个字节(Java采用Unicode) -
3、
注:1.编码与中文:
Unicode/GBK下: 2字节 ,
UTF-8: 3字节 -
4、
在UTF-8下,读取中文字符,意味着读一个中文,只能读它的2/3 !
-
二、应用场景:
-
System.in
是字节流对象,代表键盘的输入。 - 如果我们想要获取用户的输入时, 就必须用到缓冲字符流
BufferedReader
特有的方法readline()
, 但是发现BufferedReader
的构造函数的参数是一个Reader
对象,此时转换流就派上用场了!
import java.io.*;
public class IO_putStream_RW {
public static void main(String[] args) {
/*(1)、创建源:源头就是用户输入的字符吧!*/
/*(2)、选择流:*/
try (BufferedWriter bw =
new BufferedWriter(new OutputStreamWriter(System.out));
BufferedReader br =
new BufferedReader(new InputStreamReader(System.in, "UTF-8"))) {
// 使用字符输入和输出流
String str = br.readLine();
while ("exit".equals(str)){ //字符串内置的equals()比较的是字符串的"内容"
//写到控制台
bw.write(str);
//换行
bw.newLine();
//刷新
bw.flush(); //有关flush()的作用:`http://sfau.lt/b5bu777
//继续读
str = br.readLine();
}
}
catch (IOException e){
e.printStackTrace();
}
}
}
三、总结:IO流的操作都离不开"四大步骤"
-
1、
创建源 -
2、
选择流 -
3、
系列操作 -
4、
关闭流- 附:先打开的后关闭!Java7的带资源的
try (try...with--resource)
已经帮我们省了很多功夫 如果想规范一下自己的代码,推荐手写!)
- 附:先打开的后关闭!Java7的带资源的
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。