2013-08-09 9 views
8

को मैं साथ PHP मेंConvert बफर सरणी

$memcached->set("item" , ["1" => "hello"]); 

कुछ भी काम करते हैं,

memcached सेटिंग रहा memcached प्लगइन के साथ NodeJS में, मैं परिणाम

<Buffer 61 3a 25 61 34 3a> 

में सरणी के बजाय एक बफर मिल मैं ऐसे बफर को सरणी में

नोडज में परिवर्तित नहीं कर सकता:

memcached.get("item" , function(err, data) { 
    console.log(data); 
} 

क्या आपके पास कोई तरीका है?

+0

का उपयोग भी कर सकते हैं क्या आपके पास कोड नमूना है? – SheetJS

+0

@nirik: संपादित करें, एक नज़र डालें – Ata

+0

क्या होता है यदि आप केवल '$ memcached-> set ("item", "हैलो") कहते हैं,' php में? – SheetJS

उत्तर

-1

interent में, वहाँ उस के बारे में कोई जानकारी नहीं थी, लेकिन मैं परिवर्तित रास्ता

NodeJS में पाया है, मैं उपयोग करने के लिए है:

var arrayobject = phpjs.unserialize(data.toString()); 

लेकिन, यह सरणी प्राप्त करने के लिए बहुत बेवकूफ तरीका है , ऐसा लगता है कि memcache सेट करते समय php serilzie डेटा।

+0

आप सरणी को JSON के रूप में स्टोर करने का प्रयास कर सकते हैं। '$ memcached-> सेट (" आइटम ", json_encode ([" 1 "=>" हैलो "]));'। फिर JSON को node.js. में डीकोड करें। –

+0

हां, यह वैसे है, लेकिन लगता है कि हम प्रति सेकंड एन्कोड डीकोड पर उच्च दर प्राप्त करते हैं, इस तरह, यह प्रभावशाली तरीका नहीं है – Ata

1

मैंने memcached का उपयोग नहीं किया है, इसलिए मुझे यकीन नहीं है कि यह बफर क्या दर्शाता है या आप इसके बजाय क्या चाहते हैं। माफ़ कीजिये। यहां एक बफर को बाइट्स की सरणी में विभाजित करने के लिए एक फ़ंक्शन है। node.js Buffer docs पर अधिक, उम्मीद है कि यह मदद करता है!

var hex = new Buffer("613a2561343a", "hex"); 
var l = hex.length; // in bytes 
var output = []; 
for(var i = 0; i < l; i++){ 
    var char = hex.toString('hex',i,i+1); // i is byte index of hex 
    output.push(char); 
}; 
console.log(output); 
// output: [ '61', '3a', '25', '61', '34', '3a' ] 
+1

यह सिर्फ बफर डेटा को विभाजित करता है, यह प्रत्येक आइटम को प्रयुक्त चरित्र – Ata

+0

गोटो में परिवर्तित नहीं करता है। शायद PHP को गैर-एन्कोडेड स्ट्रिंग को memcached में सहेजने का कोई तरीका है? मैं या तो बहुत अच्छी तरह से नहीं जानता, श्रीमान - शुभकामनाएँ! – Plato

5

ये रहा:

var buffer = new Buffer([1,2,3]) 
var arr = Array.prototype.slice.call(buffer, 0) 
console.log(arr) 
+4

क्या आप अपने उत्तर में थोड़ा और विवरण जोड़ सकते हैं? धन्यवाद! – maxshuty

13

arr = [...buffer]

ES6, अन्य सुविधाओं के एक बहुत शुरू की बफ़र्स के अलावा।

तुम भी आसानी से इस तरह जोड़ सकते हैं:

arr.push(...buffer)

... ऑपरेटर ऐसे सरणियों और बफर के रूप में enumerables जब सरणी में इस्तेमाल फैलता है। यह उन्हें अलग-अलग फ़ंक्शन तर्कों में भी फैलाता है।


हाँ, यह भी तेजी से है:

...: x100000: प्रोटोटाइप से 835.850ms

स्लाइस कॉल: x100000: 2118।513ms

var array, 
    buffer = new Buffer([1, 4, 4, 5, 6, 7, 5, 3, 5, 67, 7, 4, 3, 5, 76, 234, 24, 235, 24, 4, 234, 234, 234, 325, 32, 6246, 8, 89, 689, 7687, 56, 54, 643, 32, 213, 2134, 235, 346, 45756, 857, 987, 0790, 89, 57, 5, 32, 423, 54, 6, 765, 65, 745, 4, 34, 543, 43, 3, 3, 3, 34, 3, 63, 63, 35, 7, 537, 35, 75, 754, 7, 23, 234, 43, 6, 247, 35, 54, 745, 767, 5, 3, 2, 2, 6, 7, 32, 3, 56, 346, 4, 32, 32, 3, 4, 45, 5, 34, 45, 43, 43]), 
    iter = 100000; 

array = buffer; 

console.time("... : x" + iter); 
for (var i = iter; i--;) array = [...buffer] 
console.timeEnd("... : x" + iter); 

console.time("Apply/call/etc : x" + iter); 
for (var i = iter; i--;) array = Array.prototype.slice.call(buffer, 0) 
console.timeEnd("Apply/call/etc : x" + iter); 
-1

मैं, एक समाधान है, हालांकि मैं वर्तमान में खोजने की कोशिश कर रहा हूँ एक अच्छा वाला:

function bufToArray(buffer) { 
    let array = new Array(); 
    for (data of buffer.values()) array.push(data); 
    return array; 
} 

संपादित करें:

var buffer = Buffer.from('NodeJS rocks!') 
var array = new Function(`return [${Array.prototype.slice.call(buffer, 0)}]`) 
:
मैं एक सरल रास्ता मिल गया

लेकिन, जैसा कि पहले से कहा गया है, [...buffer] तेज है (और अधिक कोड कुशल)।

आप new Uint8Array(buffer [, byteOffset [, length]]);