引入:
从第一节可知,流分为两类:字节流和字符流,转换流就是在两者之间进行转换。
字节流转换为字符流; 字符流转换为字节流。
字符集
字符集:定义了可用字符及其对应的数字编码的集合。常见的字符集有UTF-8、GBK、Unicode等等;不同的字符集对同一个字符的编码可能不一样。
如: 汉字 “一” 在GB2312字符集中用两个字节进行编码(11010010 10111011);
在UTF-8字符集使用三个字节进行编码(11100100 10111000 10000000)。
String str = "一";
byte[] bytes = str.getBytes("GB2312");
System.out.println(bytes.length); //3
byte[] bytes1 = str.getBytes("UTF-8");
System.out.println(bytes1.length); // 2
所以在进行流转换的过程中,应该保证使用的字符集一致,否则会出现乱码问题!
字节流转换为字符流
String str = "好好学习,天天向上";
//使用指定的字符集编码
byte[] bytes = str.getBytes("UTF-8");
InputStream inputStream = new ByteArrayInputStream(bytes);
int i;
//使用字节流读取 每次读取一个字节
// while ((i = inputStream.read()) != -1) {
// System.out.print(i + "\t");
// }
//
// inputStream.reset();
// System.out.println();
//将字节流转换成字符流 每次读取一个字符
InputStreamReader inputStreamReader = new InputStreamReader(inputStream, "UTF-8");
while ((i = inputStreamReader.read()) != -1) {
System.out.print((char) i);
}
```![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/d552cd668bb8446fa5f9bfecbe8c864d.png)
```java
String str = "好好学习,天天向上";
//字节输出流
OutputStream outputStream = new FileOutputStream("C:\\Users\\XXXX\\Desktop\\aa\\aa.txt");
//字符输出流转换为字节输出流
OutputStreamWriter osw = new OutputStreamWriter(outputStream, "UTF-8");
osw.write(str);
outputStream.flush();
osw.close();