我们知道在文件读取的时候,会遇到字符和字节的读取问题。字节和字符是一个容易混淆的概念:下面以一个例子来说明一下:
public class Test {
public static void main(String[] args) {
String str = "my test"; byte[] bt = str.getBytes();
System.out.println(bt.length);
}
}
这个结果还是什么呢?估计会有很多对于字符和字节有了解的人,说结果是14,可是呢,结果确实7。这是为什么呢?
不是一个字符两个字节么,这在课本上写的很清楚啊!,其实是没理解清楚在这里并不是这么回事的。我们来分析一下,这段代码了有这一句话,byte[] bt = str.getBytes();,这里bt是一个字节数组,把字符存在了字节数组里,这里有个方法:getBytes(),帮助文档是这么解释的:
Encodes this String into a sequence of bytes using the platform's default charset, storing the result into a new byte array.
它是将每个字符转化为一个字节存储在字节数组里了,所以,我们就不能简单的理解为,一个字符两个字节了。看完下面这个例子估计,你就明白了:
public class Test {
public static void main(String[] args) {
String str = "my test"; char ca[] = str.toCharArray();
System.out.println(ca.length);
}
}
这里输出的就是我们想要的结果14.。
总结一下子:
char c = '中' 这里就有两个字节
char c1 = 'a' 这里也是两个字节
第二个字节是空字节一个中文字符占两个字节
一个中文标点符号(或全角英文标点)
两个字节一个英文字符占一个字节
一个半角英文标点符号占一个字节
一个半角空格占一个字节
一个全角空格占两个字节
例子如下:
String str = "我是 中国人" 空格是半角的 输出是 11
String str = "我是,中国人" 标点是半角的 输出是 11
String str = "我是,中国人" 标点是全角的 输出是 12
相关推荐
Java中的OutputStreamWriter和InputStreamReader可以用于字符到字节和字节到字符的转换。通过指定合适的编码格式,我们可以保证字符串的正确传输。 `'com.tonystark.android:socket:+'`库为Socket通信提供了一些...
在Java的I/O包中,根据处理的数据类型不同,可以将流分为两大类:字节流和字符流。 - **字节流**:处理的是8位的数据单元,即字节,主要适用于处理二进制文件如图片、音频等。Java中字节流的顶级抽象类是`...
单字节字符通常指的是ASCII字符,而双字节字符则涉及到Unicode字符集,如汉字和其他非英文字符。下面将详细探讨如何计算字符串中的单双字节字符个数,以及它们在实际应用中的作用。 首先,让我们理解什么是单字节...
该错误的出现意味着在查询结果中存在一些多字节字符(通常是汉字或其他非英文字符)未能正确读取或解析,导致数据不完整或者格式异常。 #### 错误原因分析 在深入探讨解决方案之前,我们首先需要了解ORA-29275错误...
在C#编程中,数据传输和...此外,`Convert`类提供了通用的转换方法,如`Convert.ToInt32`、`Convert.ToChar`等,但在处理字节与字符之间的转换时,使用`Encoding`类的方法更为合适,因为它能更好地处理多字节字符编码。
在IT领域,数据的处理和传输常常涉及到二进制字节和字符串之间的转换。这是因为不同的系统和编程语言可能以不同的方式处理数据,有时需要将原始的二进制数据转化为易于处理和显示的字符串形式,反之亦然。在这个过程...
Java中字符流的主要类有`Reader`和`Writer`,它们分别用于读取和写入字符数据。 #### 常见的字符流类: - **FileReader** 和 **FileWriter**:用于从文件中读取和向文件中写入字符。 - **StringReader** 和 **...
在VB6.0编程环境中,字节数组和字符串之间的转换是常见的操作,尤其是在处理二进制数据和文本数据之间转换的场景。本教程将详细解释如何在VB6.0中进行这两种数据类型的转换,并通过实际示例进行演示。 1. 字符串转...
例如,FileInputStream和FileOutputStream分别用于读取和写入文件的字节数据。 字符流则包括Reader和Writer两个基类,用于处理文本数据。由于文本数据通常基于特定的字符编码,如ASCII、UTF-8或GBK,字符流在传输时...
例如,当你需要从一个字节流读取文本数据时,可以先创建一个InputStreamReader,指定所需的字符集,然后用它来创建一个BufferedReader,这样就可以按字符读取文本了。 在实际开发中,我们通常会结合使用各种流类,...
Java中的字节流和字符流是IO操作中的两种基本类型,它们主要用于数据的输入和输出。字节流处理的数据单位是字节,而字符流处理的是Unicode字符。 字节流: 字节流主要由两个核心类构成:`InputStream`和`...
在Java中,可以使用循环来逐字节或逐字符读取和写入,或者使用`BufferedInputStream`和`BufferedOutputStream`(或`BufferedReader`和`BufferedWriter`)来提高性能,因为它们提供了缓冲功能。 4. **多文件复制**:...
字符流是基于Unicode编码的,它包括Reader和Writer两大类,分别用于读取和写入字符。Reader是所有字符输入流的基类,如 FileReader,它可以从文件读取字符;而Writer是所有字符输出流的基类,如 FileWriter,用于向...
FileInputStream和FileOutputStream是字节流的实现类,分别用于读取和写入文件。FileInputStream有多种构造器实例化对象,可以根据需要选择合适的构造器。 7. 字节流文件读取的应用场景 字节流文件读取的应用场景...
通过这种方式,我们可以更灵活地控制字符串的截取,尤其是在处理多字节字符时,确保了截取的准确性和完整性。 ### 总结 在ASP.NET C#开发中,为`String`类添加按字节截取字符串的扩展方法,能够有效地解决在处理多...
在这个例子中,我们首先创建一个`FileInputStream`对象来读取文件,然后通过`InputStreamReader`将字节流转换为字符流,并指定字符编码(这里默认为UTF-8,因为大部分现代系统都使用这个编码)。接着,我们用`...
这包括双字节字符集和其他更复杂的字符编码方案,例如一些特殊的东亚字符集可能需要超过两个字节来表示单个字符。 **2. 宽字符集** 宽字符集(Wide Character Set)是一种使用固定宽度的字符编码方式,最常见的是...
1. 读取文件内容,将其转化为字符串。 2. 检查字符串长度是否为5字节的偶数倍,如果不是,需要进行处理,如截断或填充。 3. 使用循环按5字节切割字符串,得到子串列表。 4. 对子串列表进行两两位置互换,可以使用两...
本文将深入探讨易语言字节集文件的十六进制和文本的读取操作,帮助开发者理解如何有效地处理这类文件。 首先,字节集文件是二进制数据的容器,它可能包含任何非文本格式的信息,如图片、音频、程序代码等。在易语言...
字节截取是指从一个字符串中截取指定长度的字节,以便于数据传输、存储和处理。 在Java语言中,我们可以使用多种方法来按照字节截取字符串。其中一种常用方法是使用StringBuffer类和charAt()方法来实现字节截取。 ...