আপনি কি স্ট্রিমের ধারণাটি ব্যাখ্যা করতে পারেন?


186

আমি বুঝতে পারি যে একটি স্ট্রিম বাইটের ক্রমের একটি উপস্থাপনা। প্রতিটি স্ট্রিম তার প্রদত্ত ব্যাকিং স্টোরে বাইট পড়ার এবং লেখার জন্য অর্থ সরবরাহ করে। তবে স্রোতের কী লাভ? আমরা কীসের সাথে ইন্টারঅ্যাক্ট করি তা কেন ব্যাকিং স্টোর নিজেই নয়?

যে কোনও কারণেই এই ধারণাটি আমার জন্য ক্লিক করছে না। আমি একগুচ্ছ নিবন্ধ পড়েছি, তবে আমার মনে হয় আমার সাদৃশ্য বা কিছু দরকার।

উত্তর:


234

"স্ট্রিম" শব্দটি বেছে নেওয়া হয়েছে কারণ এটি (বাস্তব জীবনে) প্রতিনিধিত্ব করে আমরা যখন এটি ব্যবহার করি তখন আমরা যা জানাতে চাই তার একটি খুব মিল meaning

আসুন আমরা কিছুক্ষণের জন্য ব্যাকিং স্টোরটি ভুলে যাই এবং জলের স্রোতের সাথে সাদৃশ্যটি নিয়ে ভাবতে শুরু করি। আপনি যেমন নদীর মধ্যে অবিচ্ছিন্নভাবে জল প্রবাহিত করেন ঠিক তেমনই আপনি অবিচ্ছিন্নভাবে ডেটা প্রবাহ পান। কোথা থেকে ডেটা আসছে তা আপনি অগত্যা জানেন না এবং প্রায়শই আপনার প্রয়োজন হয় না; এটি কোনও ফাইল, সকেট বা অন্য যে কোনও উত্স থেকে আসুক না কেন, এটি সত্যই গুরুত্বপূর্ণ (হওয়া উচিত নয়) doesn't এটি জলের স্রোত গ্রহণের সাথে সাদৃশ্য, যার মাধ্যমে এটি কোথায় থেকে আসছে তা আপনার জানা দরকার নেই; এটি হ্রদ, ঝর্ণা বা অন্য যে কোনও উত্স থেকে আসুক না কেন, এটি সত্যই গুরুত্বপূর্ণ (হওয়া উচিত নয়) doesn't

এটি বলেছিল, একবার আপনি যখন ভাবতে শুরু করেন যে আপনার কেবলমাত্র প্রয়োজনীয় ডেটা পাওয়ার বিষয়েই যত্নবান হোন না কেন সেখান থেকে অন্য লোকেরা যে বিমূর্ততা সম্পর্কে কথা বলেছিল তা পরিষ্কার হয়ে যায়। আপনি ভাবতে শুরু করেন যে আপনি স্ট্রিমগুলি মোড়ানো করতে পারেন এবং আপনার পদ্ধতিগুলি এখনও পুরোপুরি কার্যকর হবে। উদাহরণস্বরূপ, আপনি এটি করতে পারেন:

int ReadInt(StreamReader reader) { return Int32.Parse(reader.ReadLine()); }

// in another method:
Stream fileStream = new FileStream("My Data.dat");
Stream zipStream = new ZipDecompressorStream(fileStream);
Stream decryptedStream = new DecryptionStream(zipStream);
StreamReader reader = new StreamReader(decryptedStream);

int x = ReadInt(reader);

আপনি যেমন দেখেন, আপনার প্রক্রিয়াকরণের যুক্তি পরিবর্তন না করে আপনার ইনপুট উত্সটি পরিবর্তন করা খুব সহজ হয়ে যায়। উদাহরণস্বরূপ, কোনও ফাইলের পরিবর্তে কোনও নেটওয়ার্ক সকেট থেকে আপনার ডেটা পড়তে:

Stream stream = new NetworkStream(mySocket);
StreamReader reader = new StreamReader(stream);
int x = ReadInt(reader);

এটি যতটা সহজ হতে পারে। এবং সৌন্দর্য অব্যাহত রয়েছে, আপনি যে কোনও ধরণের ইনপুট উত্স ব্যবহার করতে পারবেন, যতক্ষণ না আপনি এর জন্য একটি স্ট্রিম "র্যাপার" তৈরি করতে পারেন। আপনি এমনকি এটি করতে পারে:

public class RandomNumbersStreamReader : StreamReader {
    private Random random = new Random();

    public String ReadLine() { return random.Next().ToString(); }
}

// and to call it:
int x = ReadInt(new RandomNumbersStreamReader());

দেখা? যতক্ষণ না আপনার পদ্ধতিটি ইনপুট উত্স কী তা যত্নশীল না করে, আপনি বিভিন্নভাবে আপনার উত্সটি কাস্টমাইজ করতে পারেন। বিমূর্ততা আপনাকে খুব মার্জিত উপায়ে প্রক্রিয়াকরণের যুক্তি থেকে ইনপুট ডিকুয়াল করতে দেয়।

মনে রাখবেন যে আমরা নিজেরাই তৈরি করেছি সেই স্ট্রিমটির কোনও ব্যাকিং স্টোর নেই, তবে এটি এখনও আমাদের উদ্দেশ্যগুলি নিখুঁতভাবে পরিবেশন করে।

সুতরাং, সংক্ষেপে বলতে গেলে একটি স্ট্রিমটি কেবল ইনপুটগুলির উত্স, অন্য উত্সকে গোপন করে (বিমূর্ত করা)। যতক্ষণ না আপনি বিমূর্তিটি ভাঙ্গেন না ততক্ষণ আপনার কোডটি খুব নমনীয় হবে।


6
বিমূর্ত চিন্তাভাবনা (এবং ব্যাখ্যা করা) আপনার রক্তে মনে হচ্ছে;) জলের সাথে আপনার উপমা (এবং এইভাবে রূপক উল্লেখ) আমাকে ওমর খৈয়ামের স্মরণ করিয়ে দিয়েছে।
java.is.for.desktop

@ হোসামআলি আপনার ব্যাখ্যাটি খুব স্পষ্ট তবে কিছু আমাকে নমুনা কোডটিতে কিছুটা বিভ্রান্ত করছে। স্ট্রিং থেকে ইনটে সুস্পষ্ট রূপান্তরটি স্বয়ংক্রিয়ভাবে রিডইন্ট করা হয়ে যায়? আমি বিশ্বাস করি আমিও রিডস্ট্রিং করতে পারি?
রুশিনো

1
@ রুশিনো উপরের কোডটিতে কোনও রূপান্তর নেই। পদ্ধতিটি ReadIntএকেবারে শীর্ষে ব্যবহার করে সংজ্ঞায়িত করা হয়েছে int.Parse, যা স্ট্রিংটি ফিরে পেয়েছে reader.ReadLine()এবং এটি বিশ্লেষণ করে। অবশ্যই আপনি একটি অনুরূপ ReadStringপদ্ধতি তৈরি করতে পারে । এটি কি যথেষ্ট পরিষ্কার?
হোসাম অলি

ভাল করা. আমার কাছে স্ট্রিমগুলি প্রোগ্রামিংয়ের সম্পূর্ণতার মধ্যে সবচেয়ে সাধারণ এবং শক্তিশালী জেনেরিক বিমূর্ততা। । নেট বেসিক থাকা Stream.Copyঅনেক অ্যাপ্লিকেশনগুলিতে জীবনকে এত সহজ করে তোলে।
Felype

38

মুল বক্তব্যটি হ'ল ব্যাকিং স্টোরটি কী তা আপনার জানা উচিত নয় - এটি এটির একটি বিমূর্ততা। আসলে, এমনকি নাও হতে পারে কোনও ব্যাকিং স্টোরও - আপনি কোনও নেটওয়ার্ক থেকে পড়তে পারেন, এবং ডেটা কখনই "সঞ্চয়" হয় না।

আপনি যদি এমন কোনও কোড লিখতে পারেন যা আপনি কোনও ফাইল সিস্টেম, মেমরি, একটি নেটওয়ার্ক বা স্ট্রিম আইডিয়া সমর্থন করে এমন অন্য যে কোনও কিছুর সাথে কথা বলছেন কিনা, আপনার কোডটি অনেক বেশি নমনীয়।

তদ্ব্যতীত, স্ট্রিমগুলি প্রায়শই একসাথে বেঁধে রাখা হয় - আপনার কাছে এমন একটি স্ট্রিম থাকতে পারে যা এতে যা কিছু লেখা থাকে সেগুলি সংক্ষেপ করে, সংক্রামিত ফর্মটি অন্য স্ট্রমে লিখতে পারে, বা এমন একটি যা ডেটা এনক্রিপ্ট করে থাকে ইত্যাদি। অন্য প্রান্তে বিপরীতটি হবে চেইন, ডিক্রিপটিং, ডিকম্প্রেসিং বা যাই হোক না কেন।


উপরের @ হোসাম কেবল উদাহরণে ব্যবহৃত বিভিন্ন ধরণের স্ট্রিম রিডারগুলি কি বোঝায় না যে আপনি জানেন যে ব্যাকিং স্টোরটি কী? আমি এটি ফাইল স্ট্রিম, নেটওয়ার্কস্ট্রিম ইত্যাদি নিয়েছি ... সেই ধরণের উত্স থেকে পড়ছি। তদ্ব্যতীত, এমন কোনও ক্ষেত্রে রয়েছে যেখানে আপনি জানেন না যে ব্যাকিং স্টোরটি কী হতে পারে এবং প্রোগ্রামটি চলাকালীন সময়ে এটি গতিশীলভাবে চয়ন করা হবে? আমি কেবল ব্যক্তিগতভাবে এটি পেরেছি না এবং আরও জানতে চাই।
ব্যবহারকারী 137717

এছাড়াও, ডেটা উত্পন্ন হওয়ার সাথে সাথে কি পাইপ ডেটা প্রবাহিত করতে পারে বা প্রক্রিয়াটি শুরু করার পরে আমার যে সম্পূর্ণ ডেটাसेटটি পরিচালনা করতে চান তাতে আমার কি অ্যাক্সেসের প্রয়োজন আছে?
ব্যবহারকারী 137717

@ ব্যবহারকারী 137717: না, আপনি যদি কেবল একটি StreamReader- বা আরও ভালভাবে নেন TextReaderতবে আপনার কোডটি কী প্রবাহটি ডেটা প্রবাহকে অন্তর্নিহিত করে তা জানে না। অথবা বরং এটি ধরণের সন্ধানের জন্য BaseStreamসম্পত্তিটি ব্যবহার করতে পারে - তবে এটি এমন এক ধরণের হতে পারে যা আপনার কোড আগে কখনও দেখেনি। কথাটি হ'ল আপনার যত্ন নেওয়া উচিত নয়। এবং হ্যাঁ, আপনি লেখার কোডটি একেবারে শেষ করতে পারেন যা কখনও কখনও কোনও নেটওয়ার্ক স্ট্রিমের জন্য ব্যবহৃত হবে এবং কখনও কখনও ফাইল স্ট্রিমের জন্য ব্যবহৃত হবে। যেমন কোনও প্রক্রিয়াটির মাধ্যমে স্ট্রিমগুলি পাইপিং ডেটা - ভাল যা প্রক্রিয়াটির অভ্যন্তরে করা হবে না ... এটি স্ট্রিম সরবরাহকারী হবে।
জন স্কিটি

30

স্ট্রিমের মূলটি হ'ল আপনার এবং ব্যাকিং স্টোরের মধ্যে বিমূর্ততার একটি স্তর সরবরাহ করা। এইভাবে একটি স্ট্রিম ব্যবহার করা কোডের একটি প্রদত্ত ব্লককে যদি ব্যাকিং স্টোরটি কোনও ডিস্ক ফাইল, মেমরি ইত্যাদি থাকে তবে সেগুলির যত্ন নেওয়া দরকার না ...


হ্যাঁ, এটি আপনাকে আপনার কোডটি ভঙ্গ না করে প্রবাহের ধরণের আদান-প্রদানের অনুমতি দেয়। উদাহরণস্বরূপ, আপনি একটি কল থেকে একটি ফাইল এবং তার পরেরটিতে একটি মেমরি বাফার থেকে পড়তে পারেন।
ক্রেগ

আমি যুক্ত করব যে আপনি এটি করতে চান তার কারণ হ'ল প্রায়শই ফাইল পড়া বা লেখার সময় আপনার ফাইল সক্ষমতা অনুসন্ধানের প্রয়োজন হয় না এবং এইভাবে আপনি যদি একটি স্ট্রিম ব্যবহার করেন তবে একই কোডটি সহজেই পড়তে বা লিখতে ব্যবহার করা যেতে পারে উদাহরণস্বরূপ একটি নেটওয়ার্ক সকেট।
অলপ্স

11

এটি স্ট্রিম সম্পর্কে নয় - এটি সাঁতার সম্পর্কে। আপনি যদি কোনও স্ট্রিম সাঁতার কাটাতে পারেন তবে আপনি যে কোনও স্ট্রিমের মুখোমুখি হতে পারেন তার চেয়ে বেশি সাঁতার কাটতে পারেন।


7

ইকো চেম্বারে যুক্ত করতে, স্ট্রিমটি একটি বিমূর্ততা যাতে আপনি অন্তর্নিহিত স্টোরটির বিষয়ে চিন্তা করেন না। আপনি স্রোতের সাথে এবং তার বাইরে দৃশ্যপটগুলি বিবেচনা করার সময় এটি সবচেয়ে সার্থক হয়।

ফাইলগুলি বেশিরভাগ অংশের জন্যই উদ্বেগজনক নয় কারণ স্ট্রিমগুলি নন-স্ট্রিম-ভিত্তিক পদ্ধতিগুলির সাথে আমি যেভাবে পরিচিত তার থেকে বেশি এবং এর বাইরে কিছু করে না। আসুন ইন্টারনেট ফাইলগুলি দিয়ে শুরু করি।

আমি যদি ইন্টারনেট থেকে কোনও ফাইল ডাউনলোড করতে চাই তবে আমাকে কোনও টিসিপি সকেট খুলতে হবে, একটি সংযোগ তৈরি করতে হবে এবং আরও বাইট না পাওয়া পর্যন্ত বাইট গ্রহণ করতে হবে। আমাকে একটি বাফার পরিচালনা করতে হবে, প্রত্যাশিত ফাইলের আকার জানতে হবে এবং সংযোগটি কখন নামানো হবে তা সনাক্ত করতে কোড লিখতে হবে এবং এটিকে যথাযথভাবে পরিচালনা করতে হবে।

ধরা যাক আমার কাছে কিছুটা TcpDataStream অবজেক্ট রয়েছে। আমি এটি যথাযথ সংযোগের তথ্য দিয়ে তৈরি করি, তারপরে স্ট্রিম থেকে বাইটগুলি পড়ুন যতক্ষণ না বলা হয় যে আরও কোনও বাইট নেই। স্ট্রিমটি বাফার পরিচালনা, ডেটা-এর শেষের শর্তাদি এবং সংযোগ পরিচালনা পরিচালনা করে।

এইভাবে, স্ট্রিমগুলি I / O আরও সহজ করে তোলে। আপনি অবশ্যই একটি টিসিপিফাইডডাউনলোডার ক্লাস লিখতে পারেন যা স্ট্রিমটি যা করে তা করে, তবে তারপরে আপনার কাছে একটি ক্লাস রয়েছে যা টিসিপি-র সাথে নির্দিষ্ট। বেশিরভাগ স্ট্রিম ইন্টারফেসগুলি কেবল একটি পঠন () এবং লিখন () পদ্ধতি সরবরাহ করে এবং আরও জটিল কোনও ধারণা অভ্যন্তরীণ বাস্তবায়ন দ্বারা পরিচালিত হয়। এ কারণে আপনি মেমরি, ডিস্ক ফাইল, সকেট এবং অন্যান্য অনেকগুলি স্টোর স্টোর পড়তে বা লিখতে একই বেসিক কোডটি ব্যবহার করতে পারেন।


5

আমি যে ভিজ্যুয়ালাইজেশনটি ব্যবহার করি তা কনভেয়র বেল্টগুলি, বাস্তব কারখানায় নয় কারণ আমি সে সম্পর্কে কিছুই জানি না, তবে কার্টুন কারখানায় যেখানে আইটেমগুলি লাইন ধরে এগিয়ে যায় এবং স্ট্যাম্পড হয়ে যায় এবং বাক্সবস্তু হয়ে যায় এবং বোনা ডিভাইসের ক্রম অনুসারে পরীক্ষা করা হয়।

আপনার একটি সাধারণ উপাদান রয়েছে যা একটি কাজ করে, উদাহরণস্বরূপ একটি কেকের উপর চেরি লাগানোর জন্য একটি ডিভাইস। এই ডিভাইসে চেরিলেস কেকগুলির একটি ইনপুট স্ট্রিম এবং চেরি সহ কেকের আউটপুট স্ট্রিম রয়েছে। এইভাবে আপনার প্রক্রিয়াকরণকে কাঠামোগত করার জন্য উল্লেখযোগ্য তিনটি সুবিধা রয়েছে।

প্রথমত এটি উপাদানগুলি নিজেরাই সহজ করে দেয়: আপনি যদি একটি কেকের উপরে চকোলেট আইসিং রাখতে চান তবে আপনার কোনও জটিল ডিভাইসের প্রয়োজন নেই যা কেক সম্পর্কে সমস্ত কিছু জানেন, আপনি একটি বোবা ডিভাইস তৈরি করতে পারেন যা এতে যা খাওয়ানো হয় তার উপর চকোলেট আইসিং আটকে থাকে (মধ্যে কার্টুনগুলি, এটি যতদূর না জেনে রয়েছে যে পরবর্তী আইটেমটি কেক নয়, এটি উইল ই। কোয়েট)।

দ্বিতীয়ত, আপনি ডিভাইসগুলিকে বিভিন্ন সিকোয়েন্সে রেখে বিভিন্ন পণ্য তৈরি করতে পারেন: সম্ভবত আপনি চাইছেন যে আপনার কেকগুলি আইসিংয়ের উপরে চেরির পরিবর্তে চেরির উপরে আইসিং রাখতে পারে এবং আপনি কেবল লাইনের চারপাশে ডিভাইসগুলিকে অদলবদল করে এটি করতে পারেন ।

তৃতীয়ত, ডিভাইসগুলির জন্য জায়, বক্সিং বা আনবক্সিং পরিচালনা করার দরকার নেই। জিনিসগুলিকে একত্রিত করার এবং প্যাকেজিংয়ের সর্বাধিক দক্ষ উপায় পরিবর্তনযোগ্য: সম্ভবত আজ আপনি 48 টি বাক্সে আপনার কেক রাখছেন এবং এটিকে ট্রাকের চাপের মাধ্যমে পাঠিয়ে দিচ্ছেন, কিন্তু আগামীকাল আপনি কাস্টম আদেশের প্রতিক্রিয়া হিসাবে ছয়টি বাক্স পাঠাতে চান। উত্পাদন লাইনের শুরু এবং শেষে মেশিনগুলি প্রতিস্থাপন বা পুনরায় কনফিগার করে এই ধরণের পরিবর্তনকে সমন্বিত করা যেতে পারে; লাইনের মাঝখানে চেরি মেশিনটি একবারে বিভিন্ন সংখ্যক আইটেম প্রসেস করার জন্য পরিবর্তন করতে হবে না, এটি সর্বদা একটি সময়ে একটি আইটেমের সাথে কাজ করে এবং এটির ইনপুট বা আউটপুট কীভাবে তা জানতে হবে না doesn't দলবদ্ধ করা হচ্ছে।


উপমা হিসাবে ব্যাখ্যা হিসাবে দুর্দান্ত উদাহরণ।
রিচি থমাস

5

আমি যখন প্রথমবার স্ট্রিমিংয়ের কথা শুনেছিলাম তখন এটি একটি ওয়েবক্যামের সাথে সরাসরি স্ট্রিমিংয়ের প্রসঙ্গে ছিল । সুতরাং, একটি হোস্ট ভিডিও সামগ্রী সম্প্রচার করছে এবং অন্য হোস্টটি ভিডিও সামগ্রীটি গ্রহণ করছে। তাহলে কি এই স্ট্রিমিং হচ্ছে? আচ্ছা ... হ্যাঁ ... তবে একটি লাইভ স্ট্রিম একটি কংক্রিট ধারণা এবং আমি মনে করি যে প্রশ্নটি স্ট্রিমিংয়ের বিমূর্ত ধারণাটিকে বোঝায়। Https://en.wikedia.org/wiki/Live_streaming দেখুন

সুতরাং চলুন এগিয়ে আসা যাক।


ভিডিও হ'ল একমাত্র সংস্থান যা প্রবাহিত হতে পারে। অডিও স্ট্রিমও করা যায়। সুতরাং আমরা এখন স্ট্রিমিং মিডিয়া সম্পর্কে কথা বলছি। Https://en.wikedia.org/wiki/Streaming_media দেখুন । অডিওকে বিভিন্ন উপায়ে লক্ষ্য থেকে উত্স থেকে সরবরাহ করা যেতে পারে। সুতরাং আসুন একে অপরের সাথে কিছু ডেটা বিতরণ পদ্ধতি তুলনা করি।

ক্লাসিক ফাইল ডাউনলোড ক্লাসিক ফাইল ডাউনলোডিং রিয়েল-টাইম হয় না। ফাইলটি ব্যবহারের আগে নেওয়ার আগে আপনাকে ডাউনলোডটি শেষ না হওয়া পর্যন্ত অপেক্ষা করতে হবে।

প্রগতিশীল ডাউনলোড প্রগতিশীল ডাউনলোডগুলি স্ট্রিমযুক্ত মিডিয়া ফাইল থেকে অস্থায়ী বাফারে ডেটা ডাউনলোড করে দেয়। সেই বাফারের ডেটা কার্যক্ষম: বাফারে অডিও-ভিডিও ডেটা প্লেযোগ্য। যে কারণে ব্যবহারকারীরা ডাউনলোডের সময় প্রবাহিত মিডিয়া ফাইলটি দেখতে বা শুনতে পারবেন। দ্রুত-ফরওয়ার্ডিং এবং রিওয়াইন্ডিং সম্ভব, বাফারের সাথে মিলিত হওয়া। যাইহোক, প্রগতিশীল ডাউনলোড লাইভ স্ট্রিমিং নয়।

স্ট্রিমিং রিয়েল-টাইম এবং ডেটা খণ্ডিত হয়। স্ট্রিমিং সরাসরি সম্প্রচারে প্রয়োগ করা হয়। সম্প্রচারটি শোনার ক্লায়েন্টরা দ্রুত-ফরওয়ার্ডিং বা রিওয়াইন্ড করতে পারে না। ভিডিও স্ট্রিমগুলিতে, ডেটা প্লেব্যাকের পরে ফেলে দেওয়া হয়।

একটি স্ট্রিমিং সার্ভার তার ক্লায়েন্টের সাথে একটি দ্বি-মুখী সংযোগ রাখে, অন্যদিকে কোনও ওয়েব সার্ভার সার্ভারের প্রতিক্রিয়ার পরে সংযোগ বন্ধ করে দেয়।


অডিও এবং ভিডিও কেবলমাত্র স্ট্রিম করা যায় না। আসুন পিএইচপি ম্যানুয়ালটিতে স্ট্রিমগুলির ধারণাটি দেখে নেওয়া যাক।

একটি স্ট্রিম এমন একটি রিসোর্স অবজেক্ট যা স্ট্রিমেবল আচরণ প্রদর্শন করে। এটি, এটি লিনিয়ার ফ্যাশনে থেকে পড়া বা লেখা যেতে পারে এবং প্রবাহের মধ্যে একটি স্বেচ্ছাসেবী স্থানে () সন্ধান করতে সক্ষম হতে পারে। লিঙ্ক: https://www.php.net/manual/en/intro.stream.php

পিএইচপি-তে, কোনও উত্স একটি ফাইল, ডাটাবেস সংযোগের মতো বাহ্যিক উত্সের একটি রেফারেন্স। সুতরাং অন্য কথায়, একটি স্ট্রিম এমন একটি উত্স যা পড়তে বা এতে লেখা যায়। সুতরাং, আপনি যদি কাজ করে থাকেন fopen()তবে আপনি ইতিমধ্যে স্ট্রিমগুলির সাথে কাজ করেছেন।

একটি পাঠ্য-ফাইলের একটি উদাহরণ যা স্ট্রিমিংয়ের সাপেক্ষে:

// Let's say that cheese.txt is a file that contains this content: 
// I like cheese, a lot! My favorite cheese brand is Leerdammer.
$fp = fopen('cheese.txt', 'r');

$str8 = fread($fp, 8); // read first 8 characters from stream. 

fseek($fp, 21); // set position indicator from stream at the 21th position (0 = first position)
$str30 = fread($fp, 30); // read 30 characters from stream

echo $str8; // Output: I like c 
echo $str30; // Output: My favorite cheese brand is L

জিপ ফাইলগুলিও স্ট্রিম করা যায়। সর্বোপরি, স্ট্রিমিং কেবলমাত্র ফাইলে সীমাবদ্ধ নয়। এইচটিটিপি, এফটিপি, এসএসএইচ সংযোগ এবং ইনপুট / আউটপুট পাশাপাশি প্রবাহিত হতে পারে।


স্ট্রিমিংয়ের ধারণা সম্পর্কে উইকিপিডিয়া কী বলে?

কম্পিউটার বিজ্ঞানে, একটি স্ট্রিম ডেটা উপাদানগুলির ক্রম হয় যা সময়ের সাথে সাথে উপলব্ধ। একটি স্ট্রিম হিসাবে ভাবা যেতে পারে কনভেয়র বেল্টের আইটেমগুলি বড় ব্যাচের পরিবর্তে একবারে প্রক্রিয়াজাত করা হচ্ছে।

দেখুন: https://en.wikedia.org/wiki/Stream_%28 কমপ্লেটিং ৯৯৯

উইকিপিডিয়া এতে লিঙ্ক করেছে: https://srfi.schemers.org/srfi-41/srfi-41.html এবং লেখকরা এই স্ট্রিম সম্পর্কে বলতে পারেন:

স্ট্রিমগুলি, কখনও কখনও অলস তালিকাগুলি বলা হয়, কেবলমাত্র চাহিদা অনুযায়ী গণনা করা উপাদানগুলি সহ একটি ক্রমযুক্ত ডেটা কাঠামো। একটি স্ট্রিম হয় নাল বা তার সিডির স্ট্রিমের সাথে একটি জুড়ি। যেহেতু কোনও স্ট্রিমের উপাদানগুলি কেবল অ্যাক্সেসের সময় গণনা করা হয় তাই প্রবাহগুলি অসীম হতে পারে।

সুতরাং একটি স্ট্রিম আসলে একটি ডেটা স্ট্রাকচার।


আমার উপসংহার: একটি স্ট্রিম এমন একটি উত্স যা এমন ডেটা থাকতে পারে যা থেকে পাঠানো যায় বা অনুক্রমিক উপায়ে লেখা যেতে পারে। একটি স্ট্রিম উত্সটিতে যা আছে তা একবারে পড়ে না, এটি ক্রমানুসারে পড়ে / লেখে।


ব্যবহারযোগ্য লিঙ্কগুলি:

  1. http://www.slideshare.net/auroraeosrose/writing-and-using-php-streams-and-sockets-zendcon-2011 একটি খুব পরিষ্কার উপস্থাপনা সরবরাহ করে
  2. https://www.sk89q.com/2010/04/introduction-to-php-streams/
  3. http://www.netlingo.com/word/stream-or-streaming.php
  4. http://www.brainbell.com/tutorials/php/Using_PHP_Streams.htm
  5. http://www.sitepoint.com/php-streaming-output-buffering-explained/
  6. http://php.net/manual/en/wrappers.php
  7. http://www.digidata-lb.com/streaming/Streaming_Proposal.pdf
  8. http://www.webopedia.com/TERM/S/streaming.html
  9. https://en.wikipedia.org/wiki/Stream_%28computing%29
  10. https://srfi.schemers.org/srfi-41/srfi-41.html

4

এটি কেবল একটি ধারণা, বিমূর্ততার আরও একটি স্তর যা আপনার জীবনকে সহজ করে তোলে। এবং তাদের সবার কমন ইন্টারফেস রয়েছে যার অর্থ আপনি সেগুলিকে পাইপের মতো সংযুক্ত করতে পারেন। উদাহরণস্বরূপ, বেস 64 এ এনকোড করুন, তারপরে জিপ করুন এবং তারপরে এটিকে ডিস্কে এবং সমস্ত এক লাইনে লিখুন!


এটি অবশ্যই কার্যকর, তবে আমি এটি "সম্পূর্ণ বিষয়" বলতে চাই না। এমনকি শৃঙ্খলা ছাড়াই এটি একটি সাধারণ বিমূর্ততা রাখা দরকারী।
জন স্কিটি 16

হ্যাঁ তুমি সঠিক. আমি এই পরিষ্কার করতে শব্দ পরিবর্তন করেছি।
ভভা

হ্যাঁ, এটি আরও ভাল। আশা করি আপনি ভেবে দেখেন না আমি খুব পিক হয়ে যাচ্ছি!
জন স্কিটি

3

আমি দেখেছি স্ট্রিমগুলির সর্বোত্তম ব্যাখ্যা হ'ল এস আই সি পি-র অধ্যায় 3 । (এটি বোঝার জন্য আপনাকে প্রথম ২ টি অধ্যায় পড়তে হতে পারে তবে যাইহোক আপনার উচিত: :-)

তারা মোটেও বাইটের জন্য স্ট্র্যাম ব্যবহার করে না, বরং পূর্ণসংখ্যা। আমি যে বড় পয়েন্টগুলি পেয়েছি তা হ'ল:

  • স্ট্রিমগুলি বিলম্বিত তালিকাগুলি
  • গণনামূলক ওভারহেড [কিছুটা সময় আগে অধীর আগ্রহে সমস্ত কিছু গণনা করা] আপত্তিজনক
  • সীমাহীন দীর্ঘ যে ক্রমগুলি উপস্থাপন করতে আমরা স্ট্রিমগুলি ব্যবহার করতে পারি

আমি বর্তমানে এসআইসপির প্রথম অধ্যায়টিতে আছি। ধন্যবাদ!
রব সোবার্স

2
একজন অন্যের কাছ থেকে এসআইসিপি স্ট্রিমটি বলতে চাই । একটি গুরুত্বপূর্ণ বৈশিষ্ট্য SICP প্রবাহ হয় আলস্য যখন জেনেরিক, প্রবাহ ধারণা উপর জোর দেয় বিমূর্ততা উপর তথ্য সিকোয়েন্স
嘉 道

2

আরেকটি বিষয় (ফাইল পরিস্থিতি পড়ার জন্য):

  1. streamআপনাকে এর আগে অন্য কিছু করার অনুমতি দিতে পারে finished reading all content of the file
  2. আপনি স্মৃতি সংরক্ষণ করতে পারেন, কারণ সমস্ত ফাইল সামগ্রী একবারে লোড করার দরকার নেই।

1

ডেটার বিমূর্ত উত্স (বাইটস, অক্ষর ইত্যাদি) হিসাবে স্ট্রিমগুলি ভাবেন। তারা কংক্রিট ডেটা উত্স থেকে পড়া এবং লেখার প্রকৃত যান্ত্রিকতাকে বিমূর্ত করে দেয়, এটি কোনও নেটওয়ার্ক সকেট, কোনও ডিস্কে ফাইল বা ওয়েব সার্ভারের প্রতিক্রিয়া।


1

আমি মনে করি আপনাকে বিবেচনা করা দরকার যে ব্যাকিং স্টোর নিজেই প্রায়শই কেবল অন্য বিমূর্ততা। মেমরি স্ট্রিমটি বোঝা বেশ সহজ, তবে আপনি কোন ফাইল সিস্টেমটি ব্যবহার করছেন তার উপর নির্ভর করে একটি ফাইল একেবারে পৃথক, আপনি কোন হার্ড ড্রাইভটি ব্যবহার করছেন তা মনে করবেন না। সমস্ত স্ট্রিম আসলে কোনও ব্যাকিং স্টোরের উপরে বসে থাকে না: নেটওয়ার্ক স্ট্রিমগুলি বেশ স্রোত are

একটি স্রোতের মূল বিষয় হ'ল আমরা আমাদের মনোযোগকে কী গুরুত্বপূর্ণ তা সীমাবদ্ধ করে। একটি স্ট্যান্ডার্ড বিমূর্ততা রেখে, আমরা সাধারণ ক্রিয়াকলাপ করতে পারি। এমনকি যদি আপনি না চান, উদাহরণস্বরূপ, আজ একটি URL বা URL এর জন্য একটি এইচটিটিপি প্রতিক্রিয়া অনুসন্ধান করুন, এর অর্থ এই নয় যে আপনি আগামীকাল করতে চান না।

স্টোরেজের তুলনায় স্মৃতি যখন ছোট ছিল তখন মূলত স্ট্রিমগুলি ধারণা করা হয়েছিল। কেবল একটি সি ফাইল পড়া একটি উল্লেখযোগ্য বোঝা হতে পারে। মেমরির পদচিহ্ন হ্রাস করা অত্যন্ত গুরুত্বপূর্ণ ছিল। সুতরাং, একটি বিমূর্ততা যাতে খুব সামান্য লোড করা প্রয়োজন খুব দরকারী ছিল। আজ, নেটওয়ার্ক যোগাযোগ সম্পাদন করার সময় এটি সমানভাবে কার্যকর এবং এটি ফাইলের সাথে সংঘটিত হওয়ার ক্ষেত্রে খুব কমই সীমাবদ্ধ। সাধারণ ফ্যাশনে বাফারিংয়ের মতো জিনিসগুলি স্বচ্ছভাবে যুক্ত করার ক্ষমতা এটিকে আরও দরকারী করে তোলে।


0

একটি স্ট্রিম বাইটের ক্রমের একটি বিমূর্ততা। ধারণাটি হ'ল আপনার বাইটগুলি কোথা থেকে এসেছে তা কেবল আপনার প্রয়োজন হবে না, কেবলমাত্র আপনি সেগুলি মানক পদ্ধতিতে পড়তে পারেন।

উদাহরণস্বরূপ, আপনি যদি কোনও স্ট্রিমের মাধ্যমে ডেটা প্রক্রিয়া করেন তবে আপনার কোডের কোনও বিষয় নেই যদি ডেটা কোনও ফাইল, একটি নেটওয়ার্ক সংযোগ, একটি স্ট্রিং, কোনও ডাটাবেসে ব্লব ইত্যাদি ইত্যাদি থেকে আসে it

ব্যাকিং স্টোরের সাথে আলাপচারিতায় প্রতি-ভুলের কিছুই নেই, এটি ব্যাক স্টোর বাস্তবায়নের সাথে আপনাকে জড়িয়ে রাখে।


0

একটি স্ট্রিম একটি বিমূর্ততা যা ডেটার সাথে যোগাযোগের জন্য পদ্ধতি এবং বৈশিষ্ট্যের একটি মানক সেট সরবরাহ করে। আসল স্টোরেজ মিডিয়াম থেকে দূরে রেখে, আপনার কোডটি সেই মাধ্যমটি কী তা এমনকি সেই মাধ্যমের বাস্তবায়ন সম্পর্কে সম্পূর্ণ নির্ভরতা ছাড়াই লেখা যেতে পারে।

একটি ভাল উপমা হতে পারে একটি ব্যাগ বিবেচনা করা। ব্যাগটি কীভাবে তৈরি করা হয় বা কীভাবে এটি আপনার জিনিসপত্র রাখার সময় তা বিবেচনা করে না, যতক্ষণ না ব্যাগ ব্যাগ হওয়ার কাজটি করে এবং আপনি নিজের জিনিসপত্র ফিরে পেতে পারেন। একটি স্ট্রিম স্টোরেজ মিডিয়ার জন্য সংজ্ঞা দেয় যে ব্যাগের ধারণা ব্যাগের বিভিন্ন পরিস্থিতিতে (যেমন ট্র্যাশ ব্যাগ, হ্যান্ডব্যাগ, রাকস্যাক ইত্যাদি) জন্য সংজ্ঞা দেয় - মিথস্ক্রিয়তার নিয়ম।


0

আমি এটি সংক্ষেপে রাখব, আমি এখানে শব্দটি অনুপস্থিত ছিলাম:

প্রবাহের হয় সারিগুলি সাধারণত ডেটা কোন ধরনের ধারণকারী বাফারে সংরক্ষণ করা হয়।

(এখন, যেহেতু আমরা সকলেই জানি যে সারি কী, তাই এর আর কোনও ব্যাখ্যা করার দরকার নেই))

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.