Java io字符流读入英文_Java IO 系列教程(四)-字符输入流(2)

本文介绍字符输入流

在前面一节中,我们向一个文件中写入了一些字符,通过图片可以看出总共是6个中文字符和一个换行,总共是20个字节,可以推算出字符编码是utf-8,每个汉子占3三个字节。本文就用字符输入流来读一下。

e88b117cbb46cd75799d5d413c69e926.png

代码部分

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((count=inputStream.read())!=-1){

// System.out.println((char)count);

//}

文件内容为:希望你开心hah234,打印出来的是一片乱码

//inputStream = new FileInputStream("/Users/java0904/Pictures/imgs/2.txt");

//count = 0;

打印

//while((count=inputStream.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编码的字符。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/343944.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

AWS上的应用程序自动扩展–选项及其对性能的影响

扩展软件应用程序是至关重要的,以避免由于网站的客户群或需要处理大量数据集的应用程序等增加而导致工作负载增加的性能瓶颈。云服务提供商通常是访问其他应用程序的最佳方法随需应变的资源,可根据应用程序的负载变化来扩大或缩小。 1.什么是可伸缩性&a…

模拟光端机和数字光端机的优缺点介绍

视频光端机在中国的发展是伴随着监控发展开始的,常用的视频监控光端机在技术实现上分为模拟调制的光端机和数字非压缩编码光端机两大类。由于在对外接口上都是标准的基带视频接口,单从外观上是很难区分模拟光端机和数字光端机。那么,模拟光端…

什么是DVI光端机?dvi光端机的优势有哪些?

DVI光端机是由DVI发送器(DVI-T)和DVI接收器(DVI-R)组成,通过一芯单模光纤传输DVI、VGA、Audip、RS232信号。接下来我们就来为大家详细介绍下什么是DVI光端机?感兴趣的朋友就一起来详细了解下吧!…

mysql技术大会2020_2020年数据库技术大会助力技术提升

下半年的技术大会比较多,作为数据库技术从业人员,自然比较关注数据库技术大会,有幸参加过几次数据技术嘉年华,每次参会能遇到很多数据库领域的知名专家,认真聆听技术大咖的主题分享总能获得很多数据库发展动态和技术知…

什么是PCM综合语音复用设备?

PCM语音复用设备,中文称脉码调制,由A.里弗斯于1937年提出的,这一概念为数字通信奠定了基础,60年代它开始应用于市内电话网以扩充容量,使已有音频电缆的大部分芯线的传输容量扩大24~48倍。各国相继把脉码调制…

什么是pdh光端机?pdh光端机产品优点介绍!

在数字传输系统中,有两种数字传输系列,一种叫“准同步数字系列”,简称PDH,也叫PDH光端机,PDH光端机是小容量光端机,PDH光端机一般是成对应用,也叫点到点应用,PDH光端机容量一般为4E1…

使用OpenJDK 11运行JAXB xjc编译器

如文章“ 要从Java 11中删除的API ”所述,JDK 11不再包含 JAXB实现。 在本文中,我将结合使用JAXB ( 用于XML绑定的Java体系结构 ) 参考实现提供的xjc编译器和OpenJDK 11,将XML模式文件编译为Java类。 在Java SE 6之前…

光纤收发器模块如何选购,光纤收发器模块选购原则

光纤收发器的光模块模块选购一直是许多人心中的难题,为了使大家能挑到好的产品,今日飞畅科技的小编就来为大家好好说说光纤收发器的光模块如何选购,感兴趣的朋友就跟随小编一起来看看吧! 一、光纤收发器光模块如何选购&#xff1…

光纤收发器哪个发射,那个接收?

当我们远距离传输时,通常会使用光纤来传输。因为光纤的传输距离很远,一般来说单模光纤的传输距离在10千米以上,而多模光纤的传输距离最高也能达到2千米。而在光纤网络中,我们常常会使用到光纤收发器。那么,在使用光纤收…

python打包exe原理_pyinstaller打包python文件成exe(原理.安装.问题)

py文件打包成exe文件的方式一共有三种:py2exe、PyInstaller和cx_Freeze本文分四个步骤来详讲如何用PyInstaller将py文件打包成exe文件1.PyInstaller 简介2.PyInstaller 安装3.将py文件打包成exe文件4.PyInstaller打包常见问题一. PyInstaller简介1.python相关文件介…

光纤收发器有什么用?光纤收发器的作用是什么?

光纤收发器是光通信系统所必须的一款产品设备,它的主要作用是将短距离的双绞线电信号和长距离的光信号进行互换的以太网传输媒体转换单元。那么,光纤收发器有什么用?光纤收发器的作用是什么呢?接下来我们就跟随飞畅科技的小编来一…

如何利用光衰减器测试光纤收发器的灵敏度?

光纤收发器的灵敏度可以说是光纤收发器的一个重要指标,了解如何测试光纤接收器的灵敏度是一项很重要的技能。当光输入功率在一定范围内时,光纤接收器的性能最佳。但是如何来判断光纤收发器是否会在最低光输入功率时,提供最佳性能呢&#xff1…

关于交换机和路由器的区别介绍

交换机(又名交换式集线器),是一种用于电(光)信号转发的网络设备,它可以为接入交换机的任意两个网络节点提供独享的电信号通路。交换机的作用可以理解为将一些机器连接起来组成一个局域网。而路由器与交换机…

什么是节点光端机?总线型光端机有哪些优势?

节点式光端机又称总线型光端机,其准确的定义是采用单/双纤链路式组网形式的图像传输系统,也被称为链路式光端机。那么,节点式光端机具体是什么呢?总线型光端机又有哪些优势呢?接下来我们就跟随飞畅科技的小编一起来详细…

mysql 备份html数据_MySQL自动化生成HTML页面(导出数据)极限SQL编程-sql文件怎么打开...

今日客户要求表内的数据依据某种分组生成HTML页面进行展示,一般处理这种需求直接上编程工具就好了,从数据库里读取数据,根据规则生成字符串,最后将字符串写出到文件。由于需求比较急,作为数据库编程系列文章&#xff0…

什么是数据光端机?数据光端机的作用有哪些?

数据光端机,电信非压缩光端机,就是将多个E1(一种中继线路的数据传输标准,通常速率为2.048Mbps,此标准为中国和欧洲采用)信号变成光信号并传输的设备。那么,什么是数据光端机?数据光端…

spring创建web项目_使用Spring WS创建合同优先的Web服务

spring创建web项目1引言 本文介绍了如何使用来实现和测试SOAP Web服务 Spring Web Services项目 。 本示例将JAXB2用于(取消)编组。 为了开发服务,我将使用合同优先的方法,该方法首先定义服务合同,然后基于此合同实施…

什么是网络光端机?网络光端机工作原理及功能介绍!

网络光端机,就是光信号传输的终端设备。由于目前技术的提高,光纤价格的降低使它在各个领域得到很好的应用。在远程光纤传输中,光缆对信号的传输影响很小,光纤传输系统的传输质量主要取决于光端机的质量,因为光端机负责…

以太网交换机的用途有哪些?

交换机的主要功能包括物理编址、网络拓扑结构、错误校验、帧序列以及流控。交换机还具备了一些新的功能,如对VLAN(虚拟局域网)的支持、对链路汇聚的支持,甚至有的还具有防火墙的功能。接下来就由飞畅科技的小编带大家详细了解下交…

交换机主要分为哪几类?

交换机(Switch)意为“开关”是一种用于电(光)信号转发的网络设备。它可以为接入交换机的任意两个网络节点提供独享的电信号通路。最常见的交换机是以太网交换机。其他常见的还有电话语音交换机、光纤交换机等。 从广义上来看&…