Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/352.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
理解Java InputStream读取方法的问题_Java_Inputstream - Fatal编程技术网

理解Java InputStream读取方法的问题

理解Java InputStream读取方法的问题,java,inputstream,Java,Inputstream,假设我有一个输入流。如果我错了,请更正,但InputStream中的所有数据都保存为字节,例如以下文本: “为什么不和我一起去呢♥?" 现在我想知道,这个文本是如何转换成字节数组的,因为我不知道(例如)如何转换成字节数组♥ 他得救了。 如果我打电话 InputStream myInputStream = os.getInputStream(); byte[] b = new byte[1]; while ((in.read(b)) != -1) { System.out.

假设我有一个输入流。如果我错了,请更正,但InputStream中的所有数据都保存为字节,例如以下文本: “为什么不和我一起去呢♥?" 现在我想知道,这个文本是如何转换成字节数组的,因为我不知道(例如)如何转换成字节数组♥ 他得救了。 如果我打电话

InputStream myInputStream = os.getInputStream();
byte[] b = new byte[1];
while ((in.read(b)) != -1) {
            System.out.write(b, 0, 1);
}
然后,我的字节数组(长度为1)将在每个循环中填充下一个字节

int.read(b)
返回一个整数值,稍后将其转换为字符。 因此,如果我看一下Java文档,您会发现如下内容:

从输入流读取数据的下一个字节。值字节为 以0到255范围内的整数返回

我的想法是:可能只有255个不同的字符?推理中一定有错误,因为我的源代码中使用了哪些字符并不重要


那么-有人能帮我解决这个脑筋急转弯吗?Thx很多。

一个需要2个字节的字符包含一个标志(在第一个字节中),通知任何想知道它需要另一个字节的人(包括文本编辑器)


在您的例子中,您读取第一个字节作为一个整体,包括标志,然后它读取第二个字节。附加它们的是文本编辑器或控制台。

将字符转换为字节(反之亦然)的过程称为“字符编码”“。这可以通过许多不同的方式实现。这些转换的规则包含在Java所称的。Java支持其中的许多:ASCII、UTF_8、UTF_16、ISO_8859_1等。可以在中找到这些标准

一些字符集认为字节和字符之间的映射是一一对应的。ISO_8859_1(又名拉丁语-1)就是其中之一。但当然也有一个缺点:使用这种字符集(ISO_8859_1的西方拉丁字符)只能将256个字符编码为字节

其他一些,如UTF_8,根据字符的不同,每个字符使用一个、两个或更多字节。ASCII字符(a-b、a-b、数字等)在单个字节上编码,而其他字符(重音字母、中文、西里尔字母和其他字母)使用两个或更多字节。缺点是编码和解码比较困难,但优点是巨大的:这种编码支持所有可能的Unicode字符

请记住,字节和字符是两个完全不同的东西,它们之间没有一对一的映射。使用InputStreamReader读取字符,使用OutputStreamWriter写入字符。始终指定字符集:不这样做将使用系统的默认编码(可能与系统不同)。

“可能有255个不同的字符?”如果将2字节字符(仅为示例)拆分为两个单字节字符,则选择“是”。