世代网络网站建设设计,2022中国进入一级战备了吗,广州网上推广平台,网址查询网站本文介绍字符输入流在前面一节中#xff0c;我们向一个文件中写入了一些字符#xff0c;通过图片可以看出总共是6个中文字符和一个换行#xff0c;总共是20个字节#xff0c;可以推算出字符编码是utf-8#xff0c;每个汉子占3三个字节。本文就用字符输入流来读一下。代码部…本文介绍字符输入流在前面一节中我们向一个文件中写入了一些字符通过图片可以看出总共是6个中文字符和一个换行总共是20个字节可以推算出字符编码是utf-8每个汉子占3三个字节。本文就用字符输入流来读一下。代码部分package io.charStream;import java.io.FileInputStream;import java.io.FileReader;/*** Author: micro cloud fly* Description: 字符流学习-FileReader* Date: Created in 10:20 上午 2020/10/20*/public class Demo1 {public static void main(String[] args) throws Exception {//文件内容为Abcdefg当文件中有中文时utf-8编码的每个中文占三个字节那么每个字节读取的时候打印出来就是乱码了FileInputStream inputStream new FileInputStream(/Users/java0904/Pictures/imgs/1.txt);//int count 0;打印//while((countinputStream.read())!-1){// System.out.println((char)count);//}文件内容为:希望你开心hah234打印出来的是一片乱码//inputStream new FileInputStream(/Users/java0904/Pictures/imgs/2.txt);//count 0;打印//while((countinputStream.read())!-1){// System.out.println((char)count);//}//改为用字符流进行读取filereader内部做了编码的确认工作即使有中文也有英文读取也不会乱码是不是很神奇FileReader fileReader new FileReader(/Users/java0904/Pictures/imgs/filewriter.txt);//int count 0;//while ((count fileReader.read()) ! -1) {// System.out.println((char) count);//}//也可以一次读取多个int count 0;char[] cbuf new char[1];while ((count fileReader.read(cbuf)) ! -1) {System.out.println(count: count , new String(cbuf, 0, count));}System.out.println(----);}}输出count:1, 你count:1, 好count:1,count:1,count:1, 我count:1, 是count:1, 小count:1, 微----问题以下这段代码需要格外注意下int count 0;char[] cbuf new char[1];while ((count fileReader.read(cbuf)) ! -1) {System.out.println(count: count , new String(cbuf, 0, count));}我们都知道java中char类型占用2个字节而文件中的中文是占用3个字节那么为什么一个2字节的char数组可以装入3字节的汉字呢这其中一定是java搞的鬼了。原因java 是采用Unicode编码它为每种语言中的每个字符设定了统一并且唯一的二进制编码以满足跨语言、跨平台进行文本转换、处理的要求。通常Unicode占用两字节也就说Unicode用两字节就能表示世界上全部语言。UTF-8(是针对Unicode的一种可变长度字符编码。重点是“可变”UTF-8根据存储的字符类型不一样他所占的字节是不一样的例如英文时只占用1个字节中文时则膨胀为3个字节。编译后生成的class文件会把汉字转化成Unicode的两字节也就说Java内部或者说Jvm内部对字符的编码计算基于Unicode双字节而外部显示存储则是用UTF-8通过这种方式从而实现两字节的Char存储UTF-8编码的字符。