java基础-IO(6)转换流InputStreamReader、OutputStreamWriter
引入:
从第一节可知,流分为两类:字节流和字符流,转换流就是在两者之间进行转换。
字节流转换为字符流; 字符流转换为字节流。
字符集
字符集:定义了可用字符及其对应的数字编码的集合。常见的字符集有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);}``````javaString 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();