在Java中是否有与memcpy()相当的function?
我有一个字节[],并想复制到另一个字节[]。 也许我在这里展示了我简单的'C'背景,但是在Java的字节数组中有没有相当于memcpy()?
您可以尝试使用System.arraycopy
或者使用java.util.Arrays.copyOf
等Arrays
类java.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