当前位置: 首页 > 知识库问答 >
问题:

InputStream“int read(byte[]b)”方法参数是引用吗?

燕昊东
2023-03-14

我最近想知道像InputStream int read(byte[]b)方法这样的函数是如何工作的。我知道Java总是通过值传递方法参数,而不是通过引用。

知道了这一点,我不理解在将空字节数组传递给read方法(假设InputStream中有要读取的字节)后,它如何包含值。据我所知,只有传递给read方法的值会在内部被触摸,唯一的输出应该是read字节数(整数返回值)。但字节数组仍然以某种方式填充。

这实际上是如何做到的?

共有2个答案

亢嘉茂
2023-03-14

像数组这样的对象是通过引用传递的。您可以将其视为作为指针的对象变量和通过值传递的指针,这相当于相同的事情。只有像int和float这样的灵长类才是真正通过值传递的。

毛德曜
2023-03-14

对byte[]的引用作为value传递。通过引用传递意味着传递了持有字节[]引用的变量的地址。

 类似资料:
  • 我的目标是对客户端通过WebSocket连接发送到服务器的消息进行解码。帧数据具有长度,更多基于基本帧协议[RFC6455]。 我最近发现输出整个帧。 例如,当客户端向服务器发送消息时 但是,第一个字节应该是,第二个字节应该是。读取帧的唯一方法是通过循环并使用而不是,因为方法输出int而不是byte?

  • 问题内容: 我的数据库表中有一个blob列,必须在Java程序中将其用作映射,并使用此数据将其转换为或。但是我不知道这样做的时候内部会发生什么。有人能简要解释一下我进行此转换时发生了什么吗? 问题答案: 您可以按以下方式创建和使用字节数组I / O流: 假设你正在使用JDBC驱动程序实现了标准的JDBC Blob接口 (不是所有的事),你可以 同时 连接或使用到BLOB 和方法1,您也可以获取和设

  • 问题内容: 在Java 8中,具有以下类 可以通过方法引用来调用setBornTrue方法: 但是我将如何使用forEach方法并通过 方法引用 使用setBorn ?试: 导致错误“无法解析方法setBorn”。 另外,我该如何传递True的值? 问题答案: 使用lambda: 没有发现仅使用Java 8 API的其他方法。 使用此自定义功能: 你可以做: 如果Java API或库中提供了这种实

  • 描述 (Description) java.util.zip.Inflater.setInput(byte[] b)方法设置解压缩的输入数据。 应该在needsInput()返回true时调用,表示需要更多输入数据。 声明 (Declaration) 以下是java.util.zip.Inflater.setInput(byte[] b)方法的声明。 public void setInput(by

  • 描述 (Description) java.util.zip.Inflater.setDictionary(byte[] b)方法将预设字典设置为给定的字节数组。 应该在inflate()返回0时调用,needsDictionary()返回true,表示需要预设字典。 getAdler()方法可用于获取所需字典的Adler-32值。 声明 (Declaration) 以下是java.util.zi

  • 描述 (Description) java.util.zip.Inflater.inflate(byte[] b)方法将字节解压缩到指定的缓冲区。 返回未压缩的实际字节数。 返回值0表示应调用needsInput()或needsDictionary()以确定是否需要更多输入数据或预设字典。 在后一种情况下,getAdler()可用于获取所需字典的Adler-32值。 声明 (Declaration