java memcpy

Python013

java memcpy,第1张

java memcpy是什么,让我们一起了解一下?

memcpy是由src内存区域复制count个字节到dest所指内存区域。memcpy也是C和C++使用的内存拷贝函数,和在Java中使用一样,由src指向地址为起始地址的连续n个字节的数据复制到以destin指向地址为起始地址的空间内。

而在JAVA中memcpy一般用二字节表示一个字母。在做通讯交易的情况下,总会传很多报文,而报文总会时不时的包含一些结束符如'0x00',但是用常规的方式截取如 new String(buf, pos + 2, length)来获得字符串,往往会出错(因为其遇到一些特殊的字符如结束符,会在计算字符串的操作出错)。但是用 new String(buf, pos + 2, length,"ASCII"),可以解决。

注意两点:

1、source和destin所指内存区域不能重叠,函数返回指向destin的指针。

2、与strcpy相比,memcpy并不是遇到’\0’就结束,而是一定会拷贝完n个字节。

memcpy在java的简单实现,代码如下: public static void memcpy(Integer src, ByteBuffer buffer, Integer size){ if(size > 4){ size  = 4 } for(int i = 0 i >(3-i))*8) & 0xff) buffer.put(temp) } }

从楼主对回答的追问上发现,楼主的连JAVA基本的语法都很差啊。=号是赋值运算符,不是比较。

double[] vectorValue

vectorValue = vectorValue.clone()

这个段代码执行肯定报错了。但他还的意思还是很明确的。

首先:double[] vectorValue  这个是定义了一个double类型的数组变量vectorValue。

其次:vectorValue = vectorValue.clone() //这个是将vectorValue 克隆一份,赋值给自己。也就是说vectorValue变量指向了新的一块内存区域。

举个例子可能更能说明问题。

public class TestMain implements Cloneable {

private int i 

public TestMain(int i){

this.i = i 

}

@Override

protected Object clone() {

// TODO Auto-generated method stub

return new TestMain(this.getI()+1)

}

public int getI() {

return i

}

/**

 * @param args

 */

public static void main(String[] args) {

// TODO Auto-generated method stub

TestMain tm1 = new TestMain(1)

TestMain tm2  = tm1

tm1 = (TestMain)tm1.clone()

System.out.println(tm1.getI()) //tm1指向的是通过clone()方法创建的新的对象的地址,i的值已经是2了。

System.out.println(tm2.getI()) //tm2指向的还是tm1创建时的地址,i的值为1

}

}

(C中)可以直接调用memcpy()函数来完成。

自己写也很方便。

算法:

1先判断目标内存空间是否足够容纳源空间大小,防止溢出。

2分别定义两个unsigned char * 的指针从源读取写入目的地址,并记住源和目的内存空间的上限,防止越界。

3返回目的地址的首地址。

如有疏漏,请自行补充。