转换流
字节流转换为字符流,处理乱码(编码集、解码集)。
编码:将字符转换为二进制。
解码:将二进制转换为字符。
乱码的两个可能原因:编码与解码的字符集不统一,字节缺少长度丢失。
有关乱码的问题,Demo如下:
public class ConvertDemo01 {
public static void main(String[] args) {
String str = "中国";
byte[] data = str.getBytes();
//字节数不完整,会导致输出不正确
System.out.println(new String(data,0,3));
}
/**
* 编码与解码字符集必须相同
* @throws UnsupportedEncodingException
*/
public static void test01() throws UnsupportedEncodingException {
//解码 byte --> char
String str = "中国";
//编码 char --> byte
byte[] data = str.getBytes();
//编码与解码字符集统一
System.out.println(new String(data));
//设定编码字符集
data = str.getBytes("gbk");
System.out.println(new String(data));
//编码
byte[] data2 = "中国".getBytes("gbk");
//解码
str = new String(data2,"gbk");
System.out.println(str);
}
}
test01中,如果编码字符集和解码字符集设置的不相同,则会输出乱码,main方法中,字节数不完整,会导致输出不正确。
下面为文件拷贝的Demo:
/**
* 转换流:字节转为字符
* 1.输出流:OutputStreanWriter 编码
* 2.输入流:InputStreamReader 解码
*/
public class ConvertDemo02 {
public static void main(String[] args) throws IOException {
//指定解码字符集
BufferedReader br = new BufferedReader(
new InputStreamReader(new FileInputStream(new File("d:/xp/test/Demo03.java")),"utf-8")
);
//写出文件
BufferedWriter bw = new BufferedWriter(
new OutputStreamWriter(new FileOutputStream(new File("d:/xp/test/char.java")),"utf-8")
);
String info = null;
while (null != (info = br.readLine())){
System.out.println(info);
}
bw.flush();
br.close();
}
}
以上为转换流的实例。