Flask接口签名sign原理与实例代码浅析
399
2022-12-27
java字节字符转换流操作详解
本文实例讲述了java字节字符转换流操作。分享给大家供大家参考,具体如下:
一 基本概念
1、认识文本和文本文件
java的文本(char)是16位无符号,是字符的unicode编码(双字节编码)
文件是byte byte byte kLACsMy的数据序列
文本文件是文本(char)序列按照某种编码方案(utf-8,utf-16be,gbk)序列化为byte的存储结果。
2、字符流(Reader Writer)---操作的都是文本文件
字符的处理:一次处理一个字符
字符的底层任然是基本的字节序列
3、字符流的基本实现
InputStreamReader完成byte流解析未char流,按照编码解析
OutputStreamWriter 提供完成char流到byte流,按照编码处理
4、UE编码查看方法
UltraEdit-32的状态栏可以显示文件的编码类型,详细情况如下:
5、Myeclipse编码查看方法
Project->Property->Resource
二 实例
package com.imooc.io;
import java.io.FileInputStream;
import java.io.FileOutputStream;
impkLACsMyort java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
public class IsrAndOswDemo {
public static void main(String[] args)http://throws IOException {
FileInputStream in = new FileInputStream("e:\\javaio\\test2.txt");
InputStreamReader isr = new InputStreamReader(in,"utf-8");//默认项目的编码,操作的时候,要写文件本身的编码格式
FileOutputStream out = new FileOutputStream("e:\\javaio\\test1.txt");
OutputStreamWriter osw = new OutputStreamWriter(out,"utf-8");
/*int c ;
while((c = isr.read())!=-1){
System.out.print((char)c);
}*/
char[] buffer = new char[8*1024];
int c;
/*批量读取,放入buffer这个字符数组,从第0个位置开始放置,最多放buffer.length个
返回的是读到的字符的个数
*/
while(( c = isr.read(buffer,0,buffer.length))!=-1){
String s = new String(buffer,0,c);
System.out.print(s);
osw.write(buffer,0,c);
osw.flush();
}
isr.close();
osw.close();
}
}
三 运行结果
中国1jd
四 说明
用UE创建的utf-8和用myeclipse创建的utf-8,文件大小不一样,该程序是用myeclipse创建的utf-8进行测试的。
五 utf-8无bom和utf-8什么区别
utf-8+bom比utf-8多了三个字节前缀:0xEF0xBB0xBF,有这三个字节前缀的文本或字符串,程序可以自动判断它为utf-8格式,并按照utf-8格式来解析文本或字符串,否则,一个文本或者字符串在未知编码的情况下,需要按照字符编码规范去一个个验证
六 utf-8编码说明
https://baike.baidu.com/item/UTF-8/481798?fr=aladdin
七 编码实例
打开”记事本“程序Notepad.exe,新建一个文本文件,内容就是一个”严“字,依次采用ANSI,Unicode,Unicode big endian 和 UTF-8编码方式保存。
然后,用文本编辑软件UltraEdit中的”编辑-十六进制函数“,观察该文件的内部编码方式。
1)ANSI:文件的编码就是两个字节“D1 CF”,这正是“严”的GB2312编码,这也暗示GB2312是采用大头方式存储的。
2)Unicode:编码是四个字节“FF FE 25 4E”,其中“FF FE”表明是小头方式存储,真正的编码是4E25。
3)Unicode big endian:编码是四个字节“FE FF 4E 25”,其中“FE FF”表明是大头方式存储。
4)UTF-8:编码是六个字节“EF BB BF E4 B8 A5”,前三个字节“EF BB BF”表示这是UTF-8编码,后三个“E4B8A5”就是“严”的具体编码,它的存储顺序与编码顺序是一致的。
更多关于java相关内容感兴趣的读者可查看本站专题:《Java字符与字符串操作技巧总结》、《Java数组操作技巧总结》、《Java数学运算技巧总结》、《Java数据结构与算法教程》及《Java操作DOM节点技巧总结》
希望本文所述对大家java程序设计有所帮助。
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~