2012-11-05 21 views
30

में एक बफर को एक पठनीय स्ट्रीम में कनवर्ट करना मैं बफर और रीडबलस्ट्रीम के लिए बिल्कुल नया हूं, इसलिए शायद यह एक बेवकूफ सवाल है। मेरे पास एक लाइब्रेरी है जो एक पठनीय स्ट्रीम के रूप में इनपुट लेती है, लेकिन मेरा इनपुट सिर्फ बेस 64 प्रारूप छवि है। मैं बहुत की तरह एक बफर में डेटा मैं परिवर्तित कर सकते हैं:नोडजेस

var img = new Buffer(img_string, 'base64'); 

लेकिन मैं पता नहीं कैसे एक ReadableStream करने के लिए इसे बदल सकते हैं या बफर मैं एक ReadableStream को प्राप्त कन्वर्ट करना होगा।

क्या ऐसा करने का कोई तरीका है या क्या मैं असंभव हासिल करने की कोशिश कर रहा हूं?

धन्यवाद।

उत्तर

20

तुम इतनी तरह एक ReadableStream Node Stream Buffers का उपयोग कर बना सकते हैं:

// Initialize stream 
var myReadableStreamBuffer = new streamBuffers.ReadableStreamBuffer({ 
    frequency: 10,  // in milliseconds. 
    chunkSize: 2048  // in bytes. 
}); 

// With a buffer 
myReadableStreamBuffer.put(aBuffer); 

// Or with a string 
myReadableStreamBuffer.put("A String", "utf8"); 

आवृत्ति नहीं किया जा सकता 0 तो यह एक निश्चित देरी का परिचय देंगे।

+0

धन्यवाद, हालांकि कुछ देर हो चुकी है। मुझे याद नहीं है कि मैंने समस्या का समाधान कैसे किया, लेकिन यह एक अच्छा समाधान दिखता है। अगर कोई इसकी पुष्टि करता है तो यह बहुत अच्छा होगा। मुझे इस रूपांतरण के बारे में शून्य खोजने में याद है। – Masiar

+0

यह पुष्टि करते हुए कि यह काम करता है - यह देखने के बाद कि फाइलबफर को स्ट्रीम में कैसे चालू किया जाए, यह पाया जाता है। –

+0

यदि आपके पास फाइलें हैं जो आप फ़ाइलों से निपटती हैं तो आपको इसके बजाय फ़ाइल रीड स्ट्रीम खोलना चाहिए: http://nodejs.org/api/fs.html#fs_fs_createreadstream_path_options – vanthome

32

Node Stream Buffer स्पष्ट रूप से परीक्षण में उपयोग के लिए डिज़ाइन किया गया है; देरी से बचने में असमर्थता इसे उत्पादन के उपयोग के लिए खराब विकल्प बनाती है।

Gabriel Llamas इस जवाब में streamifier पता चलता है: How to wrap a buffer as a stream2 Readable stream?

+0

बस टिप्पणी करना चाहते हैं कि यह सबसे अच्छा समाधान है, यह कुछ मामलों में मेरे अपलोड को लगभग 10 गुना बढ़ा देता है। धन्यवाद!! – Abadaba

+0

उत्तर के रूप में स्वीकार किए गए इस समाधान पर विचार करें। –

6

कुछ इस तरह ...

import { Readable } from 'stream' 

const buffer = new Buffer(img_string, 'base64') 
const readable = new Readable() 
readable._read =() => {} // _read is required but you can noop it 
readable.push(buffer) 
readable.push(null) 

readable.pipe(consumer) // consume the stream 

सामान्य पाठ्यक्रम में, एक पठनीय स्ट्रीम का _read समारोह डेटा अंतर्निहित स्रोत से और push यह संवर्द्धित एकत्र करना चाहिए यह सुनिश्चित करने से पहले कि आप स्मृति में एक विशाल स्रोत को फसल न करें।

इस मामले में हालांकि आपके पास पहले से ही स्मृति में स्रोत है, इसलिए _read आवश्यक नहीं है।

पूरे बफर को धक्का देना इसे पठनीय स्ट्रीम एपीआई में लपेटता है।

0

streamifier मॉड्यूल का उपयोग करके यहां एक सरल समाधान है।

const streamifier = require('streamifier'); streamifier.createReadStream(new Buffer ([97, 98, 99])).pipe(process.stdout);

आप अपने तर्कों के रूप में स्ट्रिंग्स, बफर और वस्तु का उपयोग कर सकते हैं।

संबंधित मुद्दे