不是Java中的字符大小2字节?

编程入门 行业动态 更新时间:2024-10-12 22:26:30
本文介绍了不是Java中的字符大小2字节?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧! 问题描述

我使用 RandomAccessFile 从文本文件读取字节。

I used RandomAccessFile to read a byte from a text file.

public static void readFile(RandomAccessFile fr) { byte[] cbuff = new byte[1]; fr.read(cbuff,0,1); System.out.println(new String(cbuff)); }

为什么我看到一个完整字符被读取?

Why am I seeing one full character being read by this?

推荐答案

A char 表示Java (*)。它是2个字节大(至少这是有效值范围建议的)。

A char represents a character in Java (*). It is 2 bytes large (at least that's what the valid value range suggests).

这不一定意味着每个字符的表示是2字节长。事实上,许多编码只为每个字符保留1个字节(或者为最常见的字符使用1个字节)。

That doesn't necessarily mean that every representation of a character is 2 bytes long. In fact many encodings only reserve 1 byte for every character (or use 1 byte for the most common characters).

当调用 String你需要Java将 byte [] 转换为 String 使用平台默认编码。由于平台默认编码通常是1字节编码,如ISO-8859-1或可变长度编码,如UTF-8,它可以轻松地将该1字节转换为单个字符。

When you call the String(byte[]) constructor you ask Java to convert the byte[] to a String using the platform default encoding. Since the platform default encoding is usually a 1-byte encoding such as ISO-8859-1 or a variable-length encoding such as UTF-8, it can easily convert that 1 byte to a single character.

如果您在使用UTF-16(或UTF-32或UCS-2或UCS-4或...)作为平台默认编码的平台上运行该代码,那么您将不会得到一个有效的结果(你会得到一个 String 包含Unicode替换字符)。

If you run that code on a platform that uses UTF-16 (or UTF-32 or UCS-2 or UCS-4 or ...) as the platform default encoding, then you will not get a valid result (you'll get a String containing the Unicode Replacement Character instead).

为什么不应该依赖于平台默认编码:当在 byte [] 和 char [] / String 或 InputStream 和 Reader 之间或 OutputStream 和 Writer ,您应该始终指定要使用的编码。

That's one of the reasons why you should not depend on the platform default encoding: when converting between byte[] and char[]/String or between InputStream and Reader or between OutputStream and Writer, you should always specify which encoding you want to use. If you don't, then your code will be platform-dependent.

code> char 表示UTF-16代码点。一个或两个 UTF-16代码点表示Unicode码点。 Unicode代码点通常表示一个字符,但有时多个Unicode代码点用于构成一个单个字符。但是上面的近似值足以讨论手头的主题。

(*) that's not entirely true: a char represents a UTF-16 codepoint. Either one or two UTF-16 codepoints represent a Unicode codepoint. A Unicode codepoint usually represents a character, but sometimes multiple Unicode codepoints are used to make up a single character. But the approximation above is close enough to discuss the topic at hand.

更多推荐

不是Java中的字符大小2字节?

本文发布于:2023-11-25 10:34:18,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1629410.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:字节   字符   大小   Java

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!