java中的默认数字系统和字符集

时间:2014-04-04 15:50:12

标签: java utf-8 binary

这是关于java如何工作的基本要求,所以我没有任何代码来支持它。

我是Java开发的新手,想知道不同的数字系统,如UTF 8和unicode这样的字符集如何在Java中结合在一起。

假设用户创建了一个具有相同值的新字符串和int。

int i=100;
String S="100";

计算机的硬件理解零和一。所以它必须转换为二进制?(如果我错了,请纠正我)。这个转换应该由JVM完成(如果我错了,请纠正我)?并将不同语言的字符表示为可以键入键盘的字符(英语)UTF-8并使用此类转换(需要更正)?

现在,整个流程如何适应运行java Web应用程序的大局?

如何将字符串/ int转换为二进制文件以便机器的硬件理解? 它是如何转换为UTF-8以便浏览器理解的? 什么是java中的默认数字格式和charecterset?如果我正在读取文件的内容?他们会被读成二进制或utf-8吗?

2 个答案:

答案 0 :(得分:0)

所有计算机都以二进制文件运行。转换由JVM和您拥有的计算机完成。您不必担心将代码转换为协调1和0。浏览器有自己的转换硬代码来更改通用1和0(由所有程序和计算机软件使用),但它决定显示给定的信息。所有语言都只是用户与计算机“对话”的翻译指南。反之亦然。希望这有帮助,虽然我不认为我真的回答了什么。

答案 1 :(得分:0)

java如何在内存中表示任何数据类型是实际JVM的选择。在实践中,JVM将选择处理器本机的格式(例如,在int / big endian之间选择int),因为它在该平台上提供了最佳性能。

基本上,JLS提供了某些保证(比如一个字节有8位,值范围从-128到127) - VM只是将它映射到它认为合适的平台(指定JLS以匹配常见计算)技术密切,因此通常不需要猜测原始类型如何映射到平台。

你永远不应该关心VM如何在内存中表示数据,java不提供任何合法的方式来访问数据,以你需要知道的方式(绕过大多数VM&#39) ;使用sun.misc.Unsafe的逻辑不被视为 legal )。 如果您关心教育目的,请了解底层平台(例如x86)使用的二进制表示形式,并查看VM。它与Java无关,它与所有VM和平台特定。

对于java.lang.String,它定义了如何在内部存储String的类的实现 - 它对主要java版本进行了相当多的修改 - 但是String暴露的内容是非常狭窄的定义(参见JDK javadoc for String.length(),String.charAt())。

至于如何将用户输入转换为java标准类型,这实际上是特定于平台的。 JVM选择默认编码(例如,String.toBytes()可以为同一个字符串返回完全不同的结果,具体取决于平台 - 这就是为什么建议明确指定所需的编码)。许多其他事情也是如此(时区,数字格式等)。

CharSets和Formats是程序连接的构建块,用于将来自外部世界的数据(文件,http或用户输入)转换为数据的javas表示(反之亦然)。例如,Web应用程序将使用HTTP标头中的编码来确定在解释内容时要使用的CharSet(HTTP标头编码被规范定义为US-ASCII)。

相关问题