2012-06-20 56 views
2

我见过没有问题,具体回复这个参数组合:memcpy +指针+ java

Java + memcpy +指针。

我的C/C++背景可能会偏袒我。 在C++中我可以这样做:

memcpy (Destination, Source, length_data); 

和目的地和来源可以是只有两个内存位置。 有没有办法在Java中使用原始类型的数组来完成它?

所有

Arrays.copyOf 
Arrays.copyOfRange 

的实现都基本上是做了一半工作。从某种意义上说,您可以指定数据量或给定范围,但所有这些数据都会返回一个数组,但它们不会修改现有的数组。

在此先感谢。

+0

我不推荐它,但有一个相当于Unsafe.copyMemory(),它可以用来从地址/对象复制到任意长度的字节的地址/对象。 –

+0

谢谢彼得。我指的是数组的副本。 但是,您的评论对于通用的memcpy操作可能非常有用。 – 2dvisio

+0

数组是对象,您可以调用Unsafe.arrayBaseOffset()来获取第一个值和arrayIndexScale(Class)的偏移量,以查找每个元素的大小。 –

回答

0

Java没有指针是C/C++做的方式。

There's System.arraycopy();看看javadocs。

0

可以修改使用System.arraycopy()

如果src和dest参数指代相同的阵列对象,则 复制如同部件在位置srcPos通过 srcPos执行现有阵列+长度 - 1首先被复制到长度为 的临时阵列,然后将临时阵列的内容复制到目标 阵列的destPos + length-1的位置destPos中。

鉴于Java中缺乏指针,它当然不是一个完美的类比操作。