2016-05-25 36 views
13

Bir işlev çağrısı, bir arabellek toString döndüren bir kitaplık kullanıyorum.Düğüm arabelleğe dönüştür Düğüm

tam kod

return Buffer.concat(stdOut).toString('utf-8'); 

olduğu Ama bundan dize versiyonunu istemiyoruz.

Sadece Yani tampon geri dize dönüştürmek için nasıl bir tamponu da

istiyorum.

var bufStr = Buffer.concat(stdOut).toString('utf-8'); 
//convert bufStr back to only Buffer.concat(stdOut). 

Nasıl bunu eğer gibi

şey?

Ben
var buf = Buffer.from(bufStr, 'utf-8'); 

yapıyor çalıştı Ama utf-8 bir işlev değil atar. Ben

var buf = Buffer.from(bufStr); 

yaptığınızda O TypeError atar: Bu yazdığınız dizi değil.

Teşekkür

cevap

27

Sen yapabilirsiniz:

var buf = Buffer.from(bufStr, 'utf8'); 

Ama bu yüzden başka bir öneri kendinize erişime izin vermek denilen fonksiyonun dışına kod az miktarda kopyalamak olacaktır biraz saçma orijinal arabellek. Bu kütüphanenin ayrıntılarına bağlı olarak oldukça kolay veya oldukça zor olabilir.

+1

Buffer.from'u yapmaya çalıştım (bufStr, 'utf- 8 '); 'ama utf-8'in bir işlev olmadığını söylüyor. Eğer ikinci argümanı utf-8 çıkarırsam TypeError atar: Bu yazılan bir dizi değildir. – Aniket

+5

@Aniket: Muhtemelen Düğüm sürümünüz daha eski. Yükseltmeden önce sadece 'Buffer (bufStr)' yi deneyin. –

+0

Aslında 'utf8' olmalı ve 'utf-8' olmalıdır. Cevabı düzenledim. –

2

Dizgiden arabelleğe dönüştürmek için Buffer.from() kullanabilirsiniz. Bu konuda daha fazla bilgi örneğin

var buf = Buffer.from('some string', 'encoding'); 

here bulunabilir

var buf = Buffer.from(bStr, 'utf-8'); 
2

Not: cevap olarak Sadece yineden John Zwinck 'in yorumları.

Bir sorun, Düğümün eski bir sürümünü kullanıyor olmanız olabilir (şimdilik, yükseltme yapılamıyor, v4.3.1 ile kodlanmış kod tabanı). Burada basit bir çözüm kaldırılmış şekilde kullanarak, geçerli:

Bu benim için çalışıyor
new Buffer(bufferStr) 
0

, şöyle kodunuzu değişebilir bu

var responseData=x.toString(); 

var responseData=x.toString("binary"); 

ve son olarak

response.write(new Buffer(toTransmit, "binary"));