You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java中通过System.arraycopy按引用返回byte[]的异常排查

问题解答

1. 能否通过System.arraycopy实现类似“引用返回”的效果?

可以,但得先搞清楚Java的参数传递机制:Java是值传递,数组作为参数传递时,传的是数组引用的副本。不过这个副本和原引用指向同一个数组对象,所以你可以通过System.arraycopy修改这个共享数组的内容,调用方就能拿到修改后的结果——本质是修改数组对象的内容,而非改变引用本身。

2. 为什么会触发ArrayIndexOutOfBoundsException?

直接原因就是传入的outputData数组长度不够1280:

  • 你的代码里upperBytes固定是1280长度,执行System.arraycopy(upperBytes, 0, outputData, 0, upperBytes.length)时,要求outputData的长度必须≥1280,不然从索引0开始复制1280个元素,肯定会超出outputData的边界。
  • 另外如果outputData是null,这里还会抛出空指针异常。

修复建议

  • 最直接的:调用这个方法时,必须传入一个长度≥1280的byte[]对象,比如:
    byte[] output = new byte[1280];
    int result = exampleFunction(input, inputSize, output);
    
  • 或者在方法内部加前置检查,避免静默报错:
    if (outputData == null || outputData.length < upperBytes.length) {
        throw new IllegalArgumentException("outputData必须至少为1280字节长度");
    }
    System.arraycopy(upperBytes, 0, outputData, 0, upperBytes.length);
    

内容的提问来源于stack exchange,提问作者mAyA

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 03:50:22