原因:
由于字节流对中文操作不是特别方便,所以java提供了字符流。
字符流 = 字节流+编码表
为什么字节流有的中文可以识别?
因为汉字存储时候,无论使用哪一种编码,中文第一个字节为负。
utf-8:三个字节
GBK:2个字节
编码和解码
用哪种方法编码,解码也需要相同方法
编码:
byte[] getBytes():默认字符集utf-8
byte[] getBytes(String name):指定 字符集
解码:
String(byte【】 byte):默认字符集utf-8解码
String(byte[] byte,String name):指定字符集解码
package File_Demo;
import java.io.UnsupportedEncodingException;
import java.util.Arrays;
public class File_coding {
public static void main(String[] args) throws UnsupportedEncodingException {
// TODO Auto-generated method stub
//编码
String s = "中国";
//byte[] b = s.getBytes();//[-42, -48, -71, -6]
//byte[] b = s.getBytes("GBK");//[-42, -48, -71, -6]
byte[] b = s.getBytes("utf-8");//[-28, -72, -83, -27, -101, -67]
System.out.println(Arrays.toString(b));
//解码
//String ss = new String(b);//涓浗
String ss = new String(b,"utf-8");
System.out.println(ss);
}
}
字符流编码和解码
InputStreamReader:字节流到字符流桥梁
OutputStreamWriter:字符流到字节流的桥梁
构造方法
InputStreamReader(InputStream in)
InputStreamReader(InputStream in,String charsetName)
OutputStreamWriter(OutputStream out)
OutputStreamWriter(OutputStream out,charsetName)
实现代码:
package File_Demo;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
public class File_coding1 {
public static void main(String[] args) throws IOException {
// TODO Auto-generated method stub
OutputStreamWriter ops = new OutputStreamWriter(new FileOutputStream("D:\\JAVA\\java.txt"),"utf-8");
ops.write("中国");
ops.close();
InputStreamReader isr = new InputStreamReader(new FileInputStream("D:\\JAVA\\java.txt"),"utf-8");
int ch;
while((ch = isr.read())!=-1) {
System.out.print((char)ch);
}
}
}