উত্তর:
নোড 10.17 থেকে, স্ট্রিম.ড্রিডেবলের from
কাছে সহজেই কোনও পুনরাবৃত্তিযোগ্য (যা অ্যারে আক্ষরিক অন্তর্ভুক্ত) থেকে স্ট্রিম তৈরি করার একটি পদ্ধতি রয়েছে:
const { Readable } = require("stream")
const readable = Readable.from(["input string"])
readable.on("data", (chunk) => {
console.log(chunk) // will be called once with `"input string"`
})
নোট করুন যে কমপক্ষে 10.17 থেকে 12.3 এর মধ্যে একটি স্ট্রিং নিজেই একটি পুনরাবৃত্তিযোগ্য, সুতরাং Readable.from("input string")
এটি কাজ করবে, তবে প্রতিটি চরিত্রের জন্য একটি ইভেন্ট নির্গত করবে। Readable.from(["input string"])
অ্যারেতে আইটেম প্রতি একটি ইভেন্ট নির্গত করবে (এই ক্ষেত্রে, একটি আইটেম)।
এছাড়াও নোট করুন যে পরবর্তী নোডগুলিতে (সম্ভবত 12.3, যেহেতু ডকুমেন্টেশন বলে যে ফাংশনটি তখন পরিবর্তিত হয়েছিল), আর অ্যারেতে স্ট্রিংটি মোড়ানো প্রয়োজন হয় না।
https://nodejs.org/api/stream.html#stream_stream_readable_from_iterable_options
হিসাবে @substack আমার মধ্যে সংশোধিত #node , নতুন স্ট্রিম এপিআই নোড V10 এই সহজ করে তোলে:
const Readable = require('stream').Readable;
const s = new Readable();
s._read = () => {}; // redundant? see update below
s.push('your text here');
s.push(null);
… যার পরে আপনি এটিকে নিখরচায় পাইপ করতে পারেন বা অন্যথায় এটি আপনার উদ্দেশ্যপ্রাপ্ত গ্রাহকের কাছে দিতে পারেন।
এটি রেজিউমার ওয়ান-লাইনারের মতো পরিষ্কার নয় , তবে এটি অতিরিক্ত নির্ভরতা এড়িয়ে যায়।
( আপডেট: v0.10.26 এ v9.2.1 এর মধ্যে এখনও অবধি, আরইপিএল push
প্রম্পট থেকে সরাসরি কল not implemented
যদি আপনি সেট না করেন তবে ব্যতিক্রম সহ ক্রাশ _read
হবে It এটি কোনও ফাংশন বা স্ক্রিপ্টের ভিতরে ক্রাশ হবে না If যদি অসঙ্গতি আপনাকে তোলে If নার্ভাস, অন্তর্ভুক্ত noop
।)
_read
অন্তর্নিহিত সম্পদ থেকে ডেটা আনতে পদ্ধতি।"
null
স্ট্রিমের বাফারে প্রবেশ করছেন?
null
বলেছেন যে এটি সমস্ত ডেটা পড়া শেষ করে এবং স্ট্রিমটি বন্ধ করে দিয়েছে
readable.push()
পদ্ধতিটি কেবল পঠনযোগ্য ইমপ্লিমেন্টার দ্বারা ডাকা হয় এবং কেবলমাত্র readable._read()
পদ্ধতির মধ্যে থেকে ।"
জো লিস এর পুনঃসূত্র উত্তরটি ব্যবহার করবেন না। এটি বেশিরভাগ ক্ষেত্রে কাজ করবে, তবে আমার ক্ষেত্রে এটি আমাকে ভাল 4 বা 5 ঘন্টা বাগের সন্ধান হারিয়েছে। এটি করার জন্য তৃতীয় পক্ষের মডিউলগুলির প্রয়োজন নেই।
নতুন উত্তর :
var Readable = require('stream').Readable
var s = new Readable()
s.push('beep') // the string you want
s.push(null) // indicates end-of-file basically - the end of the stream
এটি সম্পূর্ণরূপে কমপ্লায়েন্ট পঠনযোগ্য স্ট্রিম হওয়া উচিত। স্ট্রিমগুলি কীভাবে সঠিকভাবে ব্যবহার করতে হয় সে সম্পর্কে আরও তথ্যের জন্য এখানে দেখুন ।
পুরানো উত্তর : কেবল নেটিভ পাসথ্রু স্ট্রিমটি ব্যবহার করুন:
var stream = require("stream")
var a = new stream.PassThrough()
a.write("your string")
a.end()
a.pipe(process.stdout) // piping will work as normal
/*stream.on('data', function(x) {
// using the 'data' event works too
console.log('data '+x)
})*/
/*setTimeout(function() {
// you can even pipe after the scheduler has had time to do other things
a.pipe(process.stdout)
},100)*/
a.on('end', function() {
console.log('ended') // the end event will be called properly
})
নোট করুন যে 'ক্লোজ' ইভেন্টটি নির্গত হয় না (যা স্ট্রিম ইন্টারফেসগুলির দ্বারা প্রয়োজন হয় না)।
stream
মডিউলটির কেবল একটি নতুন উদাহরণ তৈরি করুন এবং এটি আপনার প্রয়োজন অনুসারে কাস্টমাইজ করুন:
var Stream = require('stream');
var stream = new Stream();
stream.pipe = function(dest) {
dest.write('your string');
return dest;
};
stream.pipe(process.stdout); // in this case the terminal, change to ya-csv
অথবা
var Stream = require('stream');
var stream = new Stream();
stream.on('data', function(data) {
process.stdout.write(data); // change process.stdout to ya-csv
});
stream.emit('data', 'this is my string');
pipe()
গন্তব্য প্রবাহটি খুব কমপক্ষে ফিরে আসার কথা।
সম্পাদনা: গারথের উত্তর সম্ভবত আরও ভাল।
আমার পুরানো উত্তর পাঠ্য নীচে সংরক্ষিত আছে।
স্ট্রিমকে স্ট্রিমে রূপান্তর করতে, আপনি স্ট্রিমের মাধ্যমে বিরতি ব্যবহার করতে পারেন :
through().pause().queue('your string').end()
উদাহরণ:
var through = require('through')
// Create a paused stream and buffer some data into it:
var stream = through().pause().queue('your string').end()
// Pass stream around:
callback(null, stream)
// Now that a consumer has attached, remember to resume the stream:
stream.resume()
resumer
বেশ ভালভাবে কাজ করেছি। ধন্যবাদ!
এর জন্য একটি মডিউল রয়েছে: https://www.npmjs.com/package/string-to-stream
var str = require('string-to-stream')
str('hi there').pipe(process.stdout) // => 'hi there'
আর একটি সমাধান পঠনযোগ্য কনস্ট্রাক্টরের পাঠ্য ফাংশনটি পাঠিয়ে দিচ্ছে (সিএফ ডক স্ট্রিমের পাঠযোগ্যযোগ্য বিকল্পগুলি )
var s = new Readable({read(size) {
this.push("your string here")
this.push(null)
}});
আপনি উদাহরণের জন্য s.pipe ব্যবহার করতে পারেন
আমি প্রতি ছয় মাসে এটি পুনরায় শিখতে ক্লান্ত হয়ে পড়েছিলাম, তাই আমি প্রয়োগের বিশদটি বিমূর্ত করার জন্য একটি এনপিএম মডিউল প্রকাশ করেছি:
https://www.npmjs.com/package/streamify-string
এটি মডিউলটির মূল:
const Readable = require('stream').Readable;
const util = require('util');
function Streamify(str, options) {
if (! (this instanceof Streamify)) {
return new Streamify(str, options);
}
Readable.call(this, options);
this.str = str;
}
util.inherits(Streamify, Readable);
Streamify.prototype._read = function (size) {
var chunk = this.str.slice(0, size);
if (chunk) {
this.str = this.str.slice(size);
this.push(chunk);
}
else {
this.push(null);
}
};
module.exports = Streamify;
str
হয় string
যে invokation উপর কন্সট্রাকটর প্রেরণ করা আবশ্যক, এবং তথ্য যেমন প্রবাহ দ্বারা outputted করা হবে না। ডকুমেন্টেশনoptions
অনুযায়ী আদর্শ বিকল্প যা প্রবাহে প্রবাহিত হতে পারে ।
ট্র্যাভিস সিআই এর মতে এটি নোডের বেশিরভাগ সংস্করণের সাথে সামঞ্জস্যপূর্ণ হওয়া উচিত।
টাইপস্ক্রিপ্টে একটি পরিচ্ছন্ন সমাধান:
import { Readable } from 'stream'
class ReadableString extends Readable {
private sent = false
constructor(
private str: string
) {
super();
}
_read() {
if (!this.sent) {
this.push(Buffer.from(this.str));
this.sent = true
}
else {
this.push(null)
}
}
}
const stringStream = new ReadableString('string to be streamed...')
জাভাস্ক্রিপ্ট হাঁস-টাইপযুক্ত, সুতরাং আপনি যদি কেবল একটি পঠনযোগ্য স্ট্রিমের এপিআই অনুলিপি করেন তবে এটি ঠিকঠাক কাজ করবে। প্রকৃতপক্ষে, আপনি সম্ভবত those পদ্ধতিগুলির বেশিরভাগ প্রয়োগ করতে পারবেন না বা কেবল স্টাব হিসাবে রেখে দিতে পারেন না; লাইব্রেরিটি যা ব্যবহার করে তা কার্যকর করার জন্য আপনার প্রয়োজন। আপনি নোড এর প্রাক বিল্ট ব্যবহার করতে পারেন EventEmitter
বর্গ , খুব ঘটনা মোকাবেলা করার যাতে আপনি বাস্তবায়ন করতে হবে না addListener
এবং এই ধরনের নিজেকে।
আপনি কফিস্ক্রিপ্টে এটি কীভাবে প্রয়োগ করতে পারেন তা এখানে:
class StringStream extends require('events').EventEmitter
constructor: (@string) -> super()
readable: true
writable: false
setEncoding: -> throw 'not implemented'
pause: -> # nothing to do
resume: -> # nothing to do
destroy: -> # nothing to do
pipe: -> throw 'not implemented'
send: ->
@emit 'data', @string
@emit 'end'
তাহলে আপনি এটি এর মতো ব্যবহার করতে পারেন:
stream = new StringStream someString
doSomethingWith stream
stream.send()
TypeError: string is not a function at String.CALL_NON_FUNCTION (native)
এটি পেয়েছি : যখন আমি এটির মতো ব্যবহার করিnew StringStream(str).send()
stream.Readable
@ গ্রর্থ কিডের পরামর্শ মতো একটি নতুন উদাহরণ তৈরি করুন ।
stream.Readable
উপস্থিত ছিল না ।