IO流从入门到精通(四)

目录

一.编码表

二.字符串编码

使用案例

三.字符流编码

常见对象

使用案例


一.编码表

编码表:把计算机底层的二进制数据转换成我们能看到的字符

ASCII --- 英文占1个字节的空间,中文占2个字节

GB2312   ---    GBK 中文占2个字符,英文占1个

Unicode  所有的字符都占2个字节

UTF-8       长度可变的码表,少数中文占3个字符,多数占4个,数字、英文各占一个字符

ANSI 本地编码表   gbk

注意:Java中的字符串默认使用的ANSI(gbk)

乱码:编码保持前后一致即可解决

		String msg ="性命生命使命a";
		//编码: 字节数组
		byte[] datas = msg.getBytes();  //默认使用工程的字符集 utf-8
		System.out.println(datas.length);//19
		
		//编码: 其他字符集
		datas = msg.getBytes("UTF-16LE");//小端表示,每个字符占两个字节
		System.out.println(datas.length);//14
		
		datas = msg.getBytes("GBK");
		System.out.println(datas.length);//13	

二.字符串编码

构造方法(字节数组转字符串):

  • String():初始化一个新创建的 String 对象,使其表示一个空字符序列
  • String(byte[] bytes) 使用平台的默认字符集解码指定的 byte 数组,构造一个新的 String
  • String(byte[] bytes, Charset charset) 通过使用指定的 charset 解码指定的 byte 数组,构造一个新的 String

成员方法(字符串转字节数组)

  • getBytes() 使用平台的默认字符集将此 String 编码为 byte 序列,并将结果存储到一个新的 byte 数组中
  • getBytes(Charset charset) 使用给定的 charset 将此 String 编码到 byte 序列,并将结果存储到新的 byte 数组

使用案例

public class EncoderDemo {
	public static void main(String[] args) throws IOException   {
		
		FileInputStream fis = new FileInputStream("a.txt");
		byte[] bys = new byte[1024];
		int len = fis.read(bys);
		//System.out.println(new String(bys,0,len));
		System.out.println(new String(bys,0,len,"UTF-8"));
	}

	private static void method() throws UnsupportedEncodingException, FileNotFoundException, IOException {
		String s = "高薪就业";
		//byte[] bys = s.getBytes();//通过默认编码转换成数组
		byte[] bys = s.getBytes("UTF-8");
		
		FileOutputStream fos = new FileOutputStream("a.txt");
		fos.write(bys);
		fos.close();
	}

}

三.字符流编码

常见对象

  • InputStreamReader(InputStream in, CharsetDecoder dec) 创建使用给定字符集解码器的 InputStreamReader
  • OutputStreamWriter(OutputStream out, CharsetEncoder enc) 创建使用给定字符集编码器的 OutputStreamWriter

使用案例

/*
 * 字符流中的编码
 * 
 * 字符流 = 字节流 + 编码
 * 
 */
public class EncoderDemo2 {
	public static void main(String[] args) throws IOException {
		OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream("b.txt"),"UTF-8");
		//OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream("b.txt"));
		String s = "迎娶白富美";
		osw.write(s);	
		osw.close();
		
	}

	private static void method() throws IOException, UnsupportedEncodingException {
		FileWriter fw = new FileWriter("b.txt");
		
		String s = "月薪过万";
		byte[] bys = s.getBytes("UTF-8");
		
		fw.write(new String(bys));
		fw.close();
	}

}

猜你喜欢

转载自blog.csdn.net/qq_30162219/article/details/73104993