【问题标题】:How does the InputStream read(byte []) method store data as bytes? [closed]InputStream read(byte []) 方法如何将数据存储为字节? [关闭]
【发布时间】:2020-12-07 22:05:50
【问题描述】:

字节码范围从 0 到 256(和 -1 表示 EOF),但 java 字节变量范围从 -128 到 128。该方法如何能够将代码中的字节存储到字节变量中?

【问题讨论】:

    标签: java inputstream


    【解决方案1】:

    我不确定你不清楚什么:

    1. is.read(byte[]) 读取一个 8 位值的数组。这些值是有符号的(-128..127,而不是“128”))这一事实是无关紧要的。
    2. 它不需要像 EOF 那样存储 out of band 值。它只是在 EOF 处停止读取。数组的 .length 是缓冲区大小和/或在 EOF 之前成功读取的 #/bytes。
      PS:通常的做法是在调用 read() 之前查询文件大小并分配字节数组。

    【讨论】:

    • 我不清楚的是这种方法如何能够将数据存储到字节数组中。根据我的阅读,每个 read() 方法都返回一个 int 变量,因为 java 中的 byte 变量太小而无法存储字节码中的实际字节(因为它们的范围从 0 到 256)。然而,有一种方法(read(byte[])) 将字节码存储到字节变量数组中。让我困惑的是这怎么可能?
    • @FlickIt read() 返回一个int,因此它可以返回 unsigned “字节”值 以及 -1 以指示EOF。此外,0-255 范围内的int 可以转换为byte 而不会丢失数据(它现在将在-128-127 范围内)。
    • @FlickIt 例如,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 中,一个字节总是有符号的。问:这有意义吗?你还不清楚什么?
    猜你喜欢
    • 1970-01-01
    • 2015-05-30
    • 1970-01-01
    • 2021-04-30
    • 2011-01-10
    • 2013-02-13
    • 1970-01-01
    • 1970-01-01
    • 2021-12-05
    相关资源
    最近更新 更多