জাভা প্রবাহগুলিতে ফ্লাশ () এর উদ্দেশ্য কী?


121

জাভাতে, flush()স্ট্রিমগুলিতে পদ্ধতি ব্যবহৃত হয়। তবে আমি বুঝতে পারি না এই পদ্ধতিটি ব্যবহারের সমস্ত উদ্দেশ্য কী?

fin.flush();

আমাকে কিছু পরামর্শ বলুন।

উত্তর:


101

থেকে ডক্স এর flushপদ্ধতি:

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

বাফারিং মূলত I / O এর কার্যকারিতা উন্নত করার জন্য করা হয়। এ সম্পর্কে আরও এই নিবন্ধটি থেকে পড়া যেতে পারে: জাভা আই / ও পারফরম্যান্স টিউন করা


1
টিউনিং জাভা ইনপুট / আউটপুট পারফরমেন্স করতে টাটকা লিংক oracle.com/technetwork/articles/javase/perftuning-137844.html
Oleksandr

+1 আপনাকে ধন্যবাদ। আমার বাইটগুলি কেন পাঠানো হয়নি তা আমি বুঝতে পারি না এবং এটি কারণ যে আমাকে আমার বাফারগুলি ফ্লাশ করতে হয়েছিল।
রায়রেং

3
ফ্লাশ পদ্ধতিটি কি কেবল বাফার স্ট্রিমগুলির সাথে ব্যবহৃত হয়? অন্যান্য স্ট্রিম (যেমন আউটপুটস্ট্রিম) এর সাথে এটি ব্যবহার করার কোনও সুবিধা আছে কি?
তিন্নিশদা

শব্দ 'ফ্লাশ' এর সংজ্ঞা হতে পারে না। নতুন জিনিস বোঝার জন্য পুনরাবৃত্ত সংজ্ঞাগুলি একটি খারাপ ধারণা। আমি সচেতন যে আপনি সংজ্ঞাটি লেখেন নি।
জোনাথন কোমার

27

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


1
শুধু ক্ষেত্রে BufferedOutputStream, BufferedWriter, ObjectOutputStream,এবং PrintXXXক্লাস। flush()অন্য কোন স্ট্রীমের পদ্ধতি বা Writerকিছুই করে না।
লার্নের মারকুইস

@EJP আপনার বিবৃতি ব্যাকআপ কোন রেফারেন্স? এটি আমাদের জন্য
নববধূদের

1
@ mr5 এটা পোস্টার যিনি তাঁর বিবৃতি ব্যাক আপ করতে, সে আমাকে নয় প্রয়োজন, কিন্তু সবকিছু আমি বললাম থাকেন Javadoc এ বিষয়টি স্পষ্টভাবে বলা হয়
Lorne এর মার্কুইস

আপনি লেখক যতক্ষণ flush()না স্পষ্টভাবে আমন্ত্রণ জানানোর প্রয়োজন হয় না । নিজেই ফ্লাশ চালায়। BufferedWriterclose()close()
ইওসিয়েরিয়ান 42

নোট close()কল flush(), সুতরাং FileWriterবাফার ছাড়া ব্যবহার করার সময় উভয়কে কল করা বাড়াবাড়ি।
ইওসিয়েরিয়ান 42

26

আপনি যখন কোনও স্ট্রিমে ডেটা লেখেন, তা অবিলম্বে লেখা হয় না এবং এটি বাফার হয়। সুতরাং ব্যবহারflush() আপনার যখন বাফার থেকে সমস্ত ডেটা লিখিত আছে তা নিশ্চিত হওয়া দরকার তখন ।

আমাদের নিশ্চিত হওয়া দরকার যে আমরা স্ট্রিমটি বন্ধ করার আগে সমস্ত লেখক সম্পূর্ণ হয়ে গেছে, এবং সে কারণেই flush() ফাইল / বাফার লেখককে ডাকা হয়close()

তবে আপনার যদি কোনও প্রয়োজনীয়তা থাকে যে আপনি স্ট্রিমটি বন্ধ করার আগে আপনার সমস্ত লেখাগুলি যে কোনও সময় সংরক্ষণ করা যায়, ব্যবহার করুন flush()


8
কাছাকাছি আসার ঠিক আগে ফ্লাশ কল করা বাড়াবাড়ি, তাই না? এটি কেবল কাছে কল করার মতোই।
জন হেন্কেল

2
@ বিমান্ট্রিপ্যাথি আমি এটি 100% আশ্বাস দিয়ে বলতে পারি। এটি জাভাডোক FilterOutputStreamএবং এর গ্যারান্টিযুক্ত FilterWriter
লার্নের মারকুইস

7

যদি বাফারটি পূর্ণ হয়, এটিতে বাফার করা সমস্ত স্ট্রিংগুলি সেগুলি ডিস্কে সংরক্ষণ করা হবে। বড় চুক্তি থেকে বাঁচতে বাফার ব্যবহার করা হয়! এবং ওভারহেড

জাভা লিবিজে রাখা বাফারডাইটার শ্রেণিতে, এখানে একটি লাইন রয়েছে:

private static int defaultCharBufferSize = 8192;

আপনি যদি বাফারটি পূর্ণ হওয়ার আগে ডেটা প্রেরণ করতে চান তবে আপনার নিয়ন্ত্রণ থাকবে। জাস্ট ফ্লাশ ইট। Writer.flush () কে কল করুন, "বাফারে যা আছে তা এখনই প্রেরণ করুন!

রেফারেন্স বই: https://www.amazon.com/Head-First-Java-Kathy-Sierra/dp/0596009208

পৃষ্ঠাসমূহ: 453


4

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


5
এটা কল্পনা। স্ট্রিমগুলি কোনও যাদুকরী থ্রেড দ্বারা অ্যাক্সেস করা যায় না; কেবলমাত্র অ্যাপ্লিকেশন দ্বারা নির্মিত
লার্নের মারকুইস

3

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


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