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

Python中对应Java Arrays.copyOf()(字节数组类型)的等效实现方案咨询

刚好之前在把Java工具类转Python的时候也碰到过这个需求!Python标准库里确实没有直接对应Arrays.copyOf(byte[], int)的内置函数,但用自带的bytes/bytearray操作就能轻松实现,完全不需要第三方库。

最简单的实现(针对bytes对象)

直接利用切片截断,再用ljust()补零就搞定了:

def copy_of(original_bytes: bytes, new_length: int) -> bytes:
    # 先截断到指定长度,再用\x00补全不足的部分
    return original_bytes[:new_length].ljust(new_length, b'\x00')

举个例子测试下:

  • 原数组长度大于新长度:copy_of(b'hello', 3) 返回 b'hel'(截断)
  • 原数组长度小于新长度:copy_of(b'hello', 7) 返回 b'hello\x00\x00'(补零)
  • 长度相等的话直接返回原数组的切片,和原数据一致。

针对可变的bytearray

如果你的数据是bytearray类型,也可以用类似逻辑,或者直接转成bytes处理再转回去:

def copy_of_bytearray(original_ba: bytearray, new_length: int) -> bytearray:
    copied = original_ba[:new_length].copy()
    if len(copied) < new_length:
        # 补够缺少的零字节
        copied.extend(b'\x00' * (new_length - len(copied)))
    return copied

或者更偷懒的写法:bytearray(copy_of(original_ba, new_length))

用numpy实现(适合大数据场景)

如果你的项目本来就在用numpy处理字节数据,也可以用numpy的数组操作来实现,但其实有点小题大做了:

import numpy as np

def copy_of_numpy(original_bytes: bytes, new_length: int) -> bytes:
    # 把字节转成numpy的uint8数组
    arr = np.frombuffer(original_bytes, dtype=np.uint8)
    # 创建指定长度的零数组
    new_arr = np.zeros(new_length, dtype=np.uint8)
    # 把原数组的内容复制到新数组(自动截断或留空补零)
    new_arr[:min(len(arr), new_length)] = arr[:new_length]
    # 转回bytes
    return new_arr.tobytes()

总之,最推荐的还是第一个简单的函数,完全用Python内置功能,代码简洁又高效,不需要额外依赖。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.01 02:39:08