【问题标题】:Initialise and return a byte array in java在java中初始化并返回一个字节数组
【发布时间】:2012-09-11 19:34:25
【问题描述】:

在我的代码中,我必须将一个再见数组 (byte[] temp = null;) 传递给 分配并填充内部数据的函数。后 从函数返回它仍然为空。我怎样才能找到一个 解决这个问题。???请帮帮我。

  byte[] temp = null;
  ret = foo(temp);

  boolean foo(byte[] temp)
  {
      temp = new byte[];
      //fill array
  }

【问题讨论】:

  • 向我们展示您拥有的代码。如果您没有返回创建的类型,那么它当然将为空。一旦你返回 main,对象就会被销毁。
  • 你能提供你的函数的代码吗?
  • 如果那是您的代码,那么您可以看到为什么它为空,请将您的代码作为编辑发布在您的问题中。
  • 我知道它将为空,我需要 main 方法中的临时数组中的数据。有什么办法吗?
  • Java 仅按值传递引用,因此您无法按照建议的方式更改参数。

标签: java bytearray return


【解决方案1】:

你不是很清楚你的代码,但如果我理解你的话,你有类似以下的内容:

byte[] temp = null;
methodThatAllocatesByteArray(temp);
// temp is still null.

如果这是对您所说内容的正确理解,那么问题在于 temp 是对任何内容的引用。将该引用发送给另一个方法会生成该引用的副本(而不是使用相同的引用),因此,更改该引用(分配给参数变量)只会更改本地方法的引用。你需要做的是从这样的方法中返回一个新的byte[]

public byte[] methodThatAllocatesByteArray() {
    // create and populate array.
    return array;
}

并这样称呼它:byte[] temp = methodThatAllocatesByteArray()。或者您可以先初始化数组,然后将对该数组的引用传递给其他方法,如下所示:

byte[] temp = new byte[size];
methodThatAllocatesByteArray(temp);

由于在这种情况下methodThatAllocatesByteArray 中的参数将指向与temp 相同的数组,因此对其进行的任何更改(除了将其重新分配给不同的数组或空值)都可以通过temp 访问。

【讨论】:

  • 请看我的 cmets @ankur
  • @UnnikrishnanPV 恐怕我必须支持 Peter Lawrey;为什么不能返回byte[]?在某些时候你必须知道数组的大小,应该有一种方法来确定你从哪里调用它。除非您想更改为其他语言(例如 C),否则您想要执行此操作的方式根本是不可能的。如果您希望我们解决这些限制因素,您必须告诉我们您的限制因素是什么。你的 API 被冻结了吗?如果是这样,您可能必须使用您知道至少足够大的值来初始化数组,然后将第一个 null 值视为结束。
【解决方案2】:

你需要使用这个:

 byte[] temp = new byte[some_const];
  ret = foo(temp);

  boolean foo(byte[] temp)
  {
      //fill array
  }

 byte[] temp = null;
  temp  = foo(temp);

  byte[] foo(byte[] temp)
  {    temp = new byte[some_const];
      //fill array
      return temp;
  }

【讨论】:

  • 我无法返回 temp.:-) 而且我的 temp 大小仅在 foo 内部知道
  • 为什么不能返回byte[]?让 foo 知道它应该是理想的大小,我认为它没有问题。
猜你喜欢
  • 1970-01-01
  • 2012-06-27
  • 2014-02-04
  • 1970-01-01
  • 1970-01-01
  • 2011-07-30
  • 2010-12-28
相关资源
最近更新 更多