簡體   English   中英

Node.js中的緩沖區問題

[英]Buffer issue in Node.js

在Node.js中使用緩沖區時遇到一個小問題

我已經定義了這樣的常量緩沖區。

var commands = {
    BufferOne : new Buffer([0XCA, 0X11, 0X00, 0X00, 0X60, 0X01, 
              0X00, 0X01, 0X08, 0X07, 0X6D, 0X00, 0X00, 0X00,
              0X00, 0X00, 0X4F, 0X41, 0X30, 0X30, 0X00])
}

現在稍后,當我在程序中收到任何特定事件時,我想從中更新14、15。

假設在其中一個函數中,我將創建局部變量

var bufferCopy = commands.BufferOne;
bufferCopy[14] = "0X02";
bufferCopy[15] = "0X00";

然后,我想使用該bufferCopy發送到串行端口,但是我的功能不起作用。

現在,如果我喜歡這樣,也可以從上面

var bufferCopy = new Buffer([0XCA, 0X11, 0X00, 0X00, 0X60, 0X01, 0X00,
   0X01, 0X08, 0X07, 0X6D, 0X00, 0X00, 0X00, 0X00, 0X00, 0X4F, 0X41,
   0X30, 0X30, 0X00]);
bufferCopy[14] = "0X02";
bufferCopy[15] = "0X00";

然后工作正常。 我可以在串行端口上得到結果。

所以我不明白為什么我不能從上面聲明的常量創建任何局部變量。

我想使用常量的原因是因為我想將所有常量都移動到某個服務器,以便可以從服務器發送那些命令,而不必保留在Node Program本身中。

當您這樣分配一個Buffer( var bufferCopy = commands.BufferOne; )時,它正在創建對原始Buffer的引用(就像JavaScript中的所有對象分配一樣),因此您實際上是在修改commands.BufferOne而不是commands.BufferOne的副本commands.BufferOne

如果要復制,則必須顯式創建一個副本,例如:

var bufferCopy = new Buffer(commands.BufferOne);
bufferCopy[14] = "0X02";
bufferCopy[15] = "0X00";

那么只有bufferCopy將被修改,而不是也commands.BufferOne

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM