Java中有memcpy()吗?

sim*_*mon 76 java bytearray

我有一个byte []并希望将其复制到另一个byte [].也许我在这里展示我的简单'C'背景,但在Java中的字节数组上是否有等效的memcpy()?

Zak*_*aki 95

使用System.arraycopy()

System.arraycopy(sourceArray, 
                 sourceStartIndex,
                 targetArray,
                 targetStartIndex,
                 length);
Run Code Online (Sandbox Code Playgroud)

例,

String[] source = { "alpha", "beta", "gamma" };
String[] target = new String[source.length];
System.arraycopy(source, 0, target, 0, source.length);
Run Code Online (Sandbox Code Playgroud)


或者使用Arrays.copyOf()
示例,

target = Arrays.copyOf(source, length);
Run Code Online (Sandbox Code Playgroud)

java.util.Arrays.copyOf(byte[] source, int length)在JDK 1.6中添加了.

copyOf()方法用于System.arrayCopy()制作数组的副本,但比clone()您可以复制数组的部分更灵活.

  • Arrays.copyOf()也分配内存.在你的例子中,如果你改变String [] target = new String [4]; 然后target = Arrays.copyOf()它创建一个新的目标,它是一个String [3].不是记忆行为. (4认同)

Tom*_*Tom 83

您可以尝试System.arraycopy或使用阵列功能,在Arrays像类java.util.Arrays.copyOf.两者都应该为您提供原生表现.

Arrays.copyOf可能有利于可读性,但仅在java 1.6中引入.

 byte[] src = {1, 2, 3, 4};
 byte[] dst = Arrays.copyOf(src, src.length);
 System.out.println(Arrays.toString(dst));
Run Code Online (Sandbox Code Playgroud)

  • 这不是正确的答案.memcpy()不分配数据,只复制到现有缓冲区.而Arrays.copyOf()清楚地分配了新的内存. (22认同)

McD*_*ell 8

如果您只想要一维数组的精确副本,请使用clone().

byte[] array = { 0x0A, 0x01 };
byte[] copy = array.clone();
Run Code Online (Sandbox Code Playgroud)

对于其他阵列复制操作,请使用System.arrayCopy/ Arrays.copyOf作为Tom建议.

一般来说,clone应该避免,但这是规则的例外.


mdm*_*dma 5

您可以使用System.arrayCopy.它将元素从源数组复制到目标数组.Sun实现使用手动优化的汇编程序,因此速度很快.