在C
中,我可以定义许多结构和结构结构。
从buffer
开始,我可以在这个结构的开头设置指针,说这个缓冲区代表了这个结构。
当然,我不想复制任何东西,只是映射,否则我放松了速度的好处。
NodeJs有可能吗?我能怎么做 ?我怎样才能确定它是映射而不是creating a new object and copy information inside
?
示例:
struct House = {
uint8 door,
uint16BE kitchen,
etc...
}
var mybuff = Buffer.allocate(10, 0)
var MyHouse = new House(mybuff) // same as `House* MyHouse = (House*) mybuff`
console.log(MyHouse.door) // will display the value of door
console.log(MyHouse.kitchen) // will display the value of kitchen with BE function.
这是错误的,但很好地解释了我在寻找什么。 这没有复制任何东西。
如果我MyHouse.door=56
,mybuff
包含了解56.我认为mybuff
是指针。
答案 0 :(得分:1)
在下面的问题更新后编辑
与C / C ++相反,javascript默认使用pionters,因此您无需执行任何操作。实际上是另一种方式:如果你想要当前对象的副本,你必须付出一些努力。
在C中,struct只不过是对struct中不同数据部分的编译时引用。所以:
struct X {
int foo;
int bar;
}
只不过是说:如果你想从类型为X的变量中选择bar,只需将foo的长度(int的长度)添加到基指针即可。
在Javascript中,我们甚至没有这样的类型。我们可以说:
var x = {
foo: 1,
bar: 2
}
bar的查找将自动成为指针(我们称之为javascript中的引用)查找。因为javascript没有类型,所以可以将对象视为具有指向混合类型的指针的地图/字典。
如果您出于任何原因想要创建数据结构的副本,则必须遍历整个数据结构(递归地)并手动创建数据结构的副本。基本类型不是基于指针的。这些包括数字(Javascript自动区分int和float),字符串和布尔值。
虽然我不是这方面的专家,但我认为不可能。问题是,底层数据表示(如数据如何表示为内存中的字节)是不同的,因为javascript没有关于数据结构的编译时信息。正如我之前所说,javascript没有类/结构,只有具有字段的对象,它们基本上表现为(并且可以实现为)地图/字典。
然而,有一些第三方图书馆可以解决这些问题。有两种通用方法:
作为旁注,如果您需要处理的数据量不是那么多,我建议您只需解压缩数据。它使您不必担心必须使用库作为数据的接口。现在,计算机足够快,可以在内存中复制/处理一些数据。此外,这些第三方库只是一些例子。我建议你为图书馆做一些研究,以决定哪一个适合你的需求。