JVM-characters
来源:互联网 发布:java多泛型 编辑:程序博客网 时间:2024/06/16 12:24
Which characters does JVM use (JVM使用哪种字符表示)?( B )
A. ASOI characcers B.Unicude charactcrs
C. Cp1252 D. UTF-8
JVM的设计者当初决定JVM中所有字符的表示形式时,是不允许使用各种编码方式的字符并存的。这是因为如果在内存中的Java字符以GB2312、UTF-16、BIG5等各种编码形式存在,那么对开发者来说,连进行最基本的宁符串打印,连接等操作都会寸步难行。
例如, 一个GB2312的字符串后面连接-个UTF-8的字符串,那么连接后的最终结果应该是什幺编码的呢?选哪一个都没有道理。
Java开发者必须牢记:在Java中字符只以一种形式存在,那就是Unicode(不选择任何特定的编码,直接使用它们在字符集中的编号,这是统一的唯一方法)。
但“在Java中”到底是指在哪哩呢?是指在JVM巾、在内存L、在你的代码里
声明的每一个char. String类型的变陵中。例如,你征程序巾这样写:
char han='永'
在内存的相应区域,这个字符就表示为Ox6c38。
这其实也是说,只要你正确地读人了“永”字,那么它在内存中的表示形式一定是Ox6c38,没有任何其他的值能代表这个字。
JVM的这种约定使得一个字符分为两部分:JVM内部和os的文件系统。在JVM 内部,统一使用UnicoLle表示,当这个字符被从JVM内部移到外部(即保存为文件系统中的一个文件的I^J容时),就进行了编码转换,使用了具体的编码方案。因此可以说,所有的编码转换只发生在边界的地方,JVM和OS的交界处,也就是各种输入/输出流(或者Reader,Writcr类)起作用的地方。
所有的I/O基本可以分为两大阵营:
1.面向字符的输入,输出流;
2**.面向字节的输入,输出流**;
面向字符或者说面向字节中的所谓“面向”,是指这些芟在处理输入,输出的时候,在哪个意义上保持一致。
如果面向字节,那么这类工作要保证系统中的文件二进制内容和读入JVM内部的二进制内容一致,不能变换任何0和1的顺序。这种输入,输出方式很适合读人视频文件或者音频文件,或者任何不需要做变换的文件内容。
面向字符的I/o是指希望系统中的文件的字符和读人内存的“字符要一致。例如,我们的中文版WindowsXP系统上有一个GBK的文本文件,其中有一个“永”字,这个字的GBK编码什么不用管,当我们使用面向字符I/O把它读入内存并保存在一个char型变量中时,我希望I/O系统不要直接把“永”字的GBK编码放到这个字符( char)型变量中,我不关心这个char型变量具体的二进制内容到底是多少,我只希望这个字符读进来之后仍然是“永”字。
从这个意义上也可以看出,面向字符的I/O类,也就是Reader和Writer类,实际隐式地做了编码转换,在输出时,将内存中的Unicode字符使用系统默认的编码方式进行了编码,而在输入时,将文件系统中已经编码过的字符使用默认编码方案进行还原。这里要注意:Reader和Writer只会使用这个默认的编码来做转换,而不能为。个Reader或者Writer指定转换时使用的编码。这也意味着,如果使用中文版WindowsXP系统,其中存放了一个UTF-8编码的文件,当采用Reader娄来读人的时候,它还会使用GBK来做转换,转换后的内容当然不对。迭其实是一种傻瓜式的功能提供方式,对大多数初级用户(以及不需要跨平台的高级用户)来说反而是一件好事。
如果用到GBK编码以外的文件,就必须采用编码转换:一个字符与字节之间的转
换。因此,Java的I,o系统中能够指定转换编码的地方,也就在字符与字节转换的地
方,那就是InputStreamReader和OutputSLreamWriter。这两个类是字节流和字符流之问
的适配器类,它们承担编码转换的任务。
- JVM-characters
- characters
- Personal Characters
- ASCII Characters
- Special characters
- Special characters
- unique characters
- Delete characters
- Identifiers Characters
- JVM
- jvm
- JVM
- JVM
- JVM
- JVM
- jvm
- jvm
- jvm
- swift学习之...和..<
- RSA算法原理(二)
- 堆排序
- 关于System V 信号量
- OSG垃圾收集机制(DeleteHandler)
- JVM-characters
- Course Schedule -- leetcode
- Android 存储学习之在内部存储中读写文件
- Best Time to Buy and Sell Stock IV
- IIS6/7/8 WEB服务器不能访问grf报表模板文件的问题
- 解决Android 的模拟器显示乱码问题
- hihoCoder 1067 最近公共祖先·二
- 一个移动互联网自媒体的运营手记
- [深入理解Android卷一全文-第五章]深入理解常见类