码出高效:Java开发手册-第1章(2)

简介: 本书源于影响了全球250万名开发工程师的《阿里巴巴Java开发手册》,作者静心沉淀,对Java规约的来龙去脉进行了全面而彻底的内容梳理。本书以实战为中心,以新颖的角度全面阐述面向对象理论,逐步深入地探索怎样成为一位优秀开发工程师。比如:如何驾轻就熟地使用各类集合框架;如何得心应手地处理高并发多线程问题;如何顺其自然地写出可读性强、可维护性好的优雅代码。 本书旁征博引、文风轻松,秉持“图胜于表,表胜于言”的理念,深入浅出地将计算机基础、面向对象思想、JVM探源、数据结构与集合、并发与多线程、单元测试等知识客观、立体地呈现出来。紧扣学以致用......

1.3 字符集与乱码

      理解0 和1 的物理信号来源及数值表示方式后,如何将0 和1 表示成我们看到的文字呢?从26 个英文字母说起,大小写共52 个,加上10 个数字达到62 个,考虑到还有特殊字符(如:! @ # $ % ^ & * { } | 等)和不可见的控制字符,必然超过64 个,这又该如何表示呢?注意这里特别提到了“64”,因为它的特殊性,即2 的6 次方。使用刚才的0 与1 组合,至少是7 组连续的信号量。计算机在诞生之初对于存储和传输介质实在没有什么信心,所以预留了一个bit(位)用于奇偶校验,这就是1 个Byte(字节)由8 个bit 组成的来历,也就是ASCII 码。

      在ASCII 码中,有两个特殊的控制字符10 和13,前者是LF 即“\n”,后者是CR 即“\r”,在编码过程中,代码的换行虽然是默认不可见的,但在不同的操作系统中,表示方式是不一样的。在UNIX 系统中,换行使用换行符“\n”;在Windows 系统中,换行使用“\r\n”;在旧版macOS 中,换行使用回车符“\r”,在新版macOS 中使用与UNIX 系统相同的换行方式。如图1-7 所示,当前编码环境使用换行方式是LF,这也是推荐的换行方式,避免出现源码在不同操作系统中换行显示不同的情况。

1.jpg

图1-7 不同操作系统的换行方式

      再说汉字的字符集表示,首先汉字的个数远远超过英文字符的个数。毕竟ASCII码先入为主,必须在它基础上继续编码,也必须想办法和它兼容。一个字节只能表示128 个字符,所以采用双字节进行编码。早期使用的标准GB2312 收录了6763 个常用汉字。而GBK(K 是拼音kuò 的首字母,是扩展的意思)支持繁体,兼容GB2312。而后来的GB18030 是国家标准,在技术上是GBK 的超集并与之兼容。1994 年正式公布的Unicode,为每种语言中的每个字符都设定了唯一编码,以满足跨语言的交流,分为编码方式和实现方式。实现Unicode 的编码格式有三种:UTF-8、UTF-16、UTF-32,UTF(Unicode Transformation Format)即Unicode 字符集转换格式,可以理解为对Unicode 的压缩方式。根据二八原则,常用文字只占文字总数的20% 左右。其中,UTF-8 是一种以字节为单位,针对Unicode 的可变长度字符编码,用1 ~ 6 个字节对Unicode 字符进行编码压缩,目的是用较少的字节表示最常用的字符。此规则能有效地降低数据存储和传输成本。

      在日常开发中,字符集如果不兼容则会造成乱码。淘宝以前的系统都是GBK编码,而国际站使用的是UTF-8,在互相查看源码时,使用UTF-8 的IDE 环境打开GBK 源码,中文注释基本上都是不可读的乱码。乱码的出现场景并不止于编码环境中,还有网页展示、文本转换、文件读取等。数据流从底层数据库到应用层,到Web 服务器,再到客户端显示,每位开发工程师都会碰到字符乱码的问题,排查起来是一个比较长的链路。数据库是存储字符之源,在不同层次上都能够设置独立的字符集,如服务器级别、schema 级别、表级别甚至列级别。为了减少麻烦,所有情况下的字符集设置最好是一致的。



相关文章
|
19天前
|
监控 JavaScript 前端开发
《理解 WebSocket:Java Web 开发的实时通信技术》
【4月更文挑战第4天】WebSocket是Java Web实时通信的关键技术,提供双向持久连接,实现低延迟、高效率的实时交互。适用于聊天应用、在线游戏、数据监控和即时通知。开发涉及服务器端实现、客户端连接及数据协议定义,注意安全、错误处理、性能和兼容性。随着实时应用需求增加,WebSocket在Java Web开发中的地位将更加重要。
|
1月前
JavaWeb 开发之 ServletContext 的和使用
JavaWeb 开发之 ServletContext 的和使用
22 1
|
4天前
|
IDE Java 数据库连接
使用 Java 进行桌面应用开发
【4月更文挑战第19天】Java 是一款广泛应用于企业级、网络和桌面应用开发的编程语言。其跨平台特性使Java程序能在不同操作系统上运行,而JDK提供了开发所需工具和库。使用Swing等GUI库构建用户界面,结合JDBC进行数据库操作,Socket实现网络通信。虽然面临性能和用户体验的挑战,但通过优化和选用合适的IDE,Java仍能开发出高效稳定的桌面应用。
|
5天前
|
前端开发 Java Go
开发语言详解(python、java、Go(Golong)。。。。)
开发语言详解(python、java、Go(Golong)。。。。)
|
5天前
|
人工智能 前端开发 Java
Java语言开发的AI智慧导诊系统源码springboot+redis 3D互联网智导诊系统源码
智慧导诊解决盲目就诊问题,减轻分诊工作压力。降低挂错号比例,优化就诊流程,有效提高线上线下医疗机构接诊效率。可通过人体画像选择症状部位,了解对应病症信息和推荐就医科室。
38 10
|
5天前
|
Java 关系型数据库 MySQL
一套java+ spring boot与vue+ mysql技术开发的UWB高精度工厂人员定位全套系统源码有应用案例
UWB (ULTRA WIDE BAND, UWB) 技术是一种无线载波通讯技术,它不采用正弦载波,而是利用纳秒级的非正弦波窄脉冲传输数据,因此其所占的频谱范围很宽。一套UWB精确定位系统,最高定位精度可达10cm,具有高精度,高动态,高容量,低功耗的应用。
一套java+ spring boot与vue+ mysql技术开发的UWB高精度工厂人员定位全套系统源码有应用案例
|
12天前
|
运维 NoSQL 算法
Java开发-深入理解Redis Cluster的工作原理
综上所述,Redis Cluster通过数据分片、节点发现、主从复制、数据迁移、故障检测和客户端路由等机制,实现了一个分布式的、高可用的Redis解决方案。它允许数据分布在多个节点上,提供了自动故障转移和读写分离的功能,适用于需要大规模、高性能、高可用性的应用场景。
16 0
|
14天前
|
人工智能 小程序 Java
JAVA开发智慧学校系统源码+人脸电子班牌布局
智慧校园是通过利用物联网,大数据技术来改变师生和校园资源相互交互的方式,以便提高交互的明确性、灵活性和响应速度,从而实现智慧化服务和管理的校园模式。
|
17天前
|
安全 前端开发 Java
Java Web开发知识点学习总结
Java Web开发涉及Java基础、Servlet、JSP、数据库操作(SQL+JDBC)、MVC设计模式、Spring框架、Hibernate ORM、Web服务(SOAP&RESTful)、安全认证(HTTP Basic/Digest/OAuth)及性能优化(缓存、异步、负载均衡)。
17 3
|
20天前
|
XML JSON JavaScript
使用JSON和XML:数据交换格式在Java Web开发中的应用
【4月更文挑战第3天】本文比较了JSON和XML在Java Web开发中的应用。JSON是一种轻量级、易读的数据交换格式,适合快速解析和节省空间,常用于API和Web服务。XML则提供更强的灵活性和数据描述能力,适合复杂数据结构。Java有Jackson和Gson等库处理JSON,JAXB和DOM/SAX处理XML。选择格式需根据应用场景和需求。