在Java中是否有与memcpy()相当的function?

我有一个字节[],并想复制到另一个字节[]。 也许我在这里展示了我简单的'C'背景,但是在Java的字节数组中有没有相当于memcpy()?

您可以尝试使用System.arraycopy或者使用java.util.Arrays.copyOfArraysjava.util.Arrays.copyOf的数组函数。 两者都应该给你提供本机的performance。

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

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

使用System.arraycopy()

 System.arraycopy(sourceArray, sourceStartIndex, targetArray, targetStartIndex, length); 

例,

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

或者使用Arrays.copyOf()
例,

 target = Arrays.copyOf(source, length); 

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

copyOf()方法使用System.arrayCopy()创build数组的副本,但是比clone()更灵活,因为您可以复制数组的各个部分。

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

 byte[] array = { 0x0A, 0x01 }; byte[] copy = array.clone(); 

对于其他arrays复制操作, Arrays.copyOf按照Tom的build议使用System.arrayCopy / Arrays.copyOf

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

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

Java实际上就像memcpy()一样。 不安全类具有与memcpy()基本相同的copyMemory()方法。 当然,就像memcpy()一样,它不提供内存覆盖,数据销毁等保护。目前还不清楚是memcpy()还是memmove()。 它可用于从实际地址复制到实际地址或从参考文献引用。 请注意,如果使用引用,则必须提供偏移量(否则JVM将尽快死亡)。

Unsafe.copyMemory()工作(在我旧的累了的电脑上每秒高达2 GB)。 使用风险自负。 请注意,所有JVM实现都不存在Unsafe类。

你可以使用System.arraycopy