落后焦炭的Java 11紧凑型字符串魔法[]为byte []

chiperortiz:

我一直在阅读有关在过去两天我得到很好的Unicode编码的Java 9紧凑的字符串。但有一点,我不明白。

关于字节的数据类型

1)。是一个8位存储范围从-128到127

问题

1)。为什么Java的没有实现它像字符无符号的16位?我的意思是它会在一个范围内的0.256,因为从0到127只能我抱着ASCII值,但如果我设置的值200 ASCII扩展将溢出至-56会发生什么。

2)。是否负值意味着什么我的意思是我已经尝试使用Java的11个简单的例子

final char value = (char)200;//in byte would overflow
final String stringValue = new String(new char[]{value});
System.out.println(stringValue);//THE SAME VALUE OF JAVA 8

我已经检查了String.value变量和我看到的字节数组

System.out.println(value[0]);//-56

像之前出现同样的问题确实在-56意味着什么我的意思是在其他语言(负值)检测到这种溢出返回值200?Java的怎么能知道-56值是相同字符200。

我已经尝试像码点128048最难实施例和i的String.value可变看到这样的字节数组。

0 = 61 
1 = -40
2 = 48
3 = -36

我知道这码点需要4个字节,但我得到它是如何转变的char []为byte [] 但我不知道字符串如何处理此字节[]数据。

如果这个问题是对不起简单,对不起任何打字英语不是我的自然语言非常感谢。

霍尔格:

为什么Java的没有实现它像字符无符号的16位?我的意思是它会在一个范围内的0.256,因为从0到127只能我抱着ASCII值,但如果我设置的值200 ASCII扩展将溢出至-56会发生什么。

Java的基本数据类型都与Java 1.0的四分之一世纪前解决。紧凑的字符串在Java中9进行了介绍,不到两年前。这一新功能,它仅仅是一个实现细节,没有理由在Java的类型系统根本的变化。

除此之外,你正在寻找一个解释存储在一个字节数据。对于代表ISO-LATIN-1单元的缘故,这是完全不相关的解释是否相同数据作为Java内置的签署byte将导致正数或负数。

同样Java的I / O API允许读入文件到一个byte[]数组,并写入byte[]阵列备份文件和这两个操作已经足以无损复制文件,无论其解释内容时,这将是其相关的文件格式。

如此以来,Java 1.1中了以下工作:

byte[] bytes = "È".getBytes("iso-8859-1");
System.out.println(bytes[0]);
System.out.println(bytes[0] & 0xff);
-56
200

这两个号码,-56并且200是位模式的只是不同的解释11001000,而一的异Latin-1的解释byte含有的位模式11001000是字符È

char值也只是两个字节的数量的解释,即作为UTF-16代码单元。同样地,char[]阵列是在计算机的存储器与标准解释的字节序列。

我们还可以解释其他字节序列这种方式。

StringBuilder sb = new StringBuilder().appendCodePoint(128048);
byte[] array = new byte[4];
StandardCharsets.UTF_16LE.newEncoder()
    .encode(CharBuffer.wrap(sb), ByteBuffer.wrap(array), true);
System.out.println(Arrays.toString(array));

将打印你所看到的价值,[61, -40, 48, -36]

使用的优点byte[]阵列内的String类是,现在,解释可以选择,使用ISO-LATIN-1时的所有字符都是可表示与该编码或UTF-16除外。

可能的数值解释是风马牛不相及的字符串。但是,当你问“怎么能Java的知道,-56值是一样的200”,你应该问问自己,它是如何知道的位模式11001000byte-56摆在首位?

System.out.println(value[0]);

承载实际昂贵的操作,相对于普通的计算机算法,的转换byte(或int)向String这种转换操作往往被忽视,因为它已被定义为打印的默认方式byte,但不高于转换到更自然的String解释值作为一个无符号的数量。如要进一步了解,我建议两补

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章