【发布时间】:2020-12-07 22:05:50
【问题描述】:
字节码范围从 0 到 256(和 -1 表示 EOF),但 java 字节变量范围从 -128 到 128。该方法如何能够将代码中的字节存储到字节变量中?
【问题讨论】:
标签: java inputstream
字节码范围从 0 到 256(和 -1 表示 EOF),但 java 字节变量范围从 -128 到 128。该方法如何能够将代码中的字节存储到字节变量中?
【问题讨论】:
标签: java inputstream
我不确定你不清楚什么:
is.read(byte[]) 读取一个 8 位值的数组。这些值是有符号的(-128..127,而不是“128”))这一事实是无关紧要的。.length 是缓冲区大小和/或在 EOF 之前成功读取的 #/bytes。【讨论】:
read() 返回一个int,因此它可以返回 unsigned “字节”值 以及 -1 以指示EOF。此外,0-255 范围内的int 可以转换为byte 而不会丢失数据(它现在将在-128-127 范围内)。
int i = 255; byte b = (byte) i 会给你b == -1。
inputStream.read() 的Javadoc:docs.oracle.com/javase/8/docs/api/java/io/InputStream.html:1) 它返回为这个特定的“read()”读取的#/bytes。它不是数据值之一,而是读取的 #/values。该数字将始终小于或等于字节数组的长度(或“-1”,用于流结束)。 2)字节数组本身包含......一个字节数组:)“字节”只是“8位”。在 C 中,一个字节是一个可以有符号或无符号的整数。在 Java 中,一个字节总是有符号的。问:这有意义吗?你还不清楚什么?