IO中的编码解码问题
Java中采用两种构造方法实现字节编码解码
编码:
byte[] getBytes():使用平台的默认字符集将该String编码为一 系列字节, 将结果存储到新的字节数组中
byte[] getBytes(String charsetName):使用指定的字符集将该String编码为一 系列字节,将结果存储到新的字节数组中
解码:
String(byte[] bytes)
通过使用平台的默认字符集解码指定的字节数组来构造新的 String 。
String(byte[] bytes, Charset charset)
构造一个新的String由指定用指定的字节的数组解码charset 。
例:
import java.io.UnsupportedEncodingException;
import java.util.Arrays;
public class EncodeAndDecode {
public static void main(String[] args) throws UnsupportedEncodingException {
String s="中国";
byte[] bytes = s.getBytes();//[-28, -72, -83, -27, -101, -67]采用系统默认的编码3个字节表示一个汉字
// byte[] bytes = s.getBytes("GBK");//[-42, -48, -71, -6]采用GBK的的编码格式每个汉字用2个字节表示
// byte[] bytes = s.getBytes("UTF-8");//[-28, -72, -83, -27, -101, -67]采用UTF-8的编码格式
//解码
String Str=new String(bytes);//采用默认的编码格式
String str=new String(bytes,"UTF-8");//创建字符串对象传入编码对象
// System.out.println(Arrays.toString(bytes));
System.out.println(str);
System.out.println(Str);
}
}
字符流编码解码
InputStreamReader(InputStream in)
创建一个使用默认字符集的InputStreamReader。
InputStreamReader(InputStream in, Charset cs)
创建一个使用给定字符集的InputStreamReader。
OutputStreamWriter(OutputStream out)
创建一个使用默认字符编码的OutputStreamWriter。
OutputStreamWriter(OutputStream out, Charset cs)
创建一个使用给定字符集的OutputStreamWriter。
字符流编码解码中的第一个参数(InputStream,OutputStream)都是传递一个输入输出对象一般为FileInputStream或者FileOutputStream