字符编码与解码

1、基本文件读取输出

String file="C:/Users/Administrator/Desktop/a.txt";
		String charset = "UTF-8";
		
		FileOutputStream outputStream = new FileOutputStream(file);
		OutputStreamWriter writer = new OutputStreamWriter(outputStream,charset);
		try {
			writer.write("这是要保存的中文");
		} catch (IOException e) {
			e.printStackTrace();
		} finally {
			writer.close();
		}
		
		FileInputStream inputStream = new FileInputStream(file);
		InputStreamReader reader = new InputStreamReader(inputStream,charset);
		StringBuffer buffer = new StringBuffer();
		char[] buf = new char[64];
		int count = 0;
		try {
			while((count = reader.read(buf))!=-1){
				buffer.append(buf,0,count);
			}
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			reader.close();
		}
		System.out.println(buffer);
2、String自带的字节到字符的转换功能

		String str = "I am 右前";
		byte[] b = str.getBytes("UTF-8");	//将字符串以UTF-8格式进行编码
		String n = new String(b,"UTF-8");	//将字符串以UTF-8格式进行解码
3、Charset提供的字节到字符的转换
		String str1 = "I am 电脑";
		Charset charset1 = Charset.forName("UTF-8");			//通过forName找到Charset类
		ByteBuffer byteBuffer = charset1.encode(str1);			//将字符串以UTF-8格式进行编码
		while(byteBuffer.hasRemaining()){
			System.out.println((char)byteBuffer.get());	
		}
		byteBuffer.flip();	
		CharBuffer charBuffer = charset1.decode(byteBuffer);	//将字符串以UTF-8格式进行解码
		System.out.println(charBuffer.toString());
4、ByteBuffer提供的软转换(字节缓冲区,常用于程序向网络中传送数据)(未完成)

		/*
		 * position是当前读写的位置。
		 * limit是最大能读写的位置。
		 * capacity是缓冲区的容量。
		 */
		ByteBuffer heapByteBuffer = ByteBuffer.allocate(1024);	//创建一个ByteBuffer,初始化状态下,postion为0,limit=capacity=缓冲区大小
		char[] c3 = buffer.toString().toCharArray();
		for(int i = 0;i < c3.length;i++){
			heapByteBuffer.put((byte) c3[i]);	//往缓冲区放一个字节,position就会往后移动一下,但是不会超过limit。如果超过会报错。
		}
		heapByteBuffer.flip();			//flip方法会把limit设为position的值,而position还原为0,为读缓冲区做准备。
		
		byte[] bb = new byte[heapByteBuffer.limit()];
		ByteBuffer b1 = heapByteBuffer.get(bb);	//从缓冲区内读取一个字节,position会往后移动一下,但是不会超过limit,如果超过会报错。
		while(b1.hasRemaining()){
			System.out.println((char)b1.get());
		}
5、JAVA内部实现原理及过程

(1)得到一个CharSet

在JDK源码中提供两种方式得到一个CharSet实例:

CharSet cs = CharSet.forName(“编码方式”);
CharSet cs = CharSet.defaultCharSet();

第一种方法返回一个指定字符格式的CharSet,第二种方法返回当前虚拟机默认的字符编码格式的CharSet。

(2)使用CharSet

得到一个CharSet实例后,我们需要创建一个编码器和一个解码器,使用下面方法进行创建:

CharSetDecoder decoder = cs.newDecoder();
CharSetEncoder encoder = cs.newEncoder();

接着我们把ByteBuffer传递给decoder进行编码,返回一个CharBuffer:

CharBuffer cb = decoder.decode(inputData);

然后我们可以使用encoder进行解码返回一个ByteBuffer:

ByteBuffer outputData = encoder.encode(cb);

接下来可以进行写等其它操作。






  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值