Java.io.PressWriter এবং java.io.FufferedWriter এর মধ্যে পার্থক্য?


97

নীচের কোড মাধ্যমে দেখুন:

// A.class
File file = new File("blah.txt");
FileWriter fileWriter = new FileWriter(file);
PrintWriter printWriter = new PrintWriter(fileWriter);

// B.class
File file = new File("blah.txt");
FileWriter fileWriter = new FileWriter(file);
BufferedWriter bWriter = new BufferedWriter(fileWriter);

এই দুটি পদ্ধতির মধ্যে পার্থক্য কী?

বাফারড্রাইটারের উপরে আমাদের কখন প্রিন্ট রাইটার ব্যবহার করা উচিত?

উত্তর:


63

জন্য API রেফারেন্স BufferedWriter এবং PrintWriter বিস্তারিত পার্থক্য।

প্রিন্ট রাইটার ব্যবহারের প্রধান কারণ হ'ল প্রিন্টলএন () এর মতো প্রিন্ট এক্সএক্সএক্সএক্স পদ্ধতিতে অ্যাক্সেস পাওয়া। আপনি কনসোলে লিখতে যেমন System.out ব্যবহার করবেন ঠিক তেমন একটি ফাইল লিখতে আপনি মুদ্রণ লেখকটি ব্যবহার করতে পারেন।

একটি বাফারড্রাইটার একটি ফাইল (বা অন্য যে কোনও কিছু) লেখার একটি দক্ষ উপায়, কারণ এটি জাভা মেমরির অক্ষরগুলি বাফার করার আগে (সম্ভবত বাস্তবায়নের উপর নির্ভর করে) ফাইলটি লেখার জন্য সিতে নামবে।

"মুদ্রণযন্ত্র" এর মতো কোনও ধারণা নেই; নিকটতম আপনি পাবেন সম্ভবত java.util.Scanner


4
@ ট্রাইটনম্যানকে এক পর্যায়ে ওএসের সাথে ইন্টারঅ্যাক্ট করতে হবে, যার অর্থ জাভা থেকে বাইরে পা রাখা।
তোফুবিয়ার

তবে প্রিন্ট রাইটারও ঠিক বাফার হয়েছে? সুতরাং এটির মধ্যে এটির মধ্যে পার্থক্য নয় কারণ আপনার উত্তরের পরামর্শ হতে পারে
লাইন

প্রিন্ট রাইটার বাফার করা হয়, তবে পার্থক্য হ'ল মুদ্রণ লেখকের পদ্ধতিগুলি। আমার মনে হয় না আমি কোনও কিছু
চাপিয়ে দিয়েছি

আপনি বাফারড্রাইটার সম্পর্কে যা লিখেছেন - তা কি প্রিন্ট রাইটারের পক্ষেও সত্য? এখনও এই বিষয়টি আমার পক্ষে পরিষ্কার নয় যেহেতু আমি এই উত্তরটিকে পার্থক্য
লাইন

90

PrintWriterআরও পদ্ধতি দেয় ( println), তবে সচেতন হওয়ার জন্য সবচেয়ে গুরুত্বপূর্ণ (এবং উদ্বেগজনক) পার্থক্যটি এটি ব্যতিক্রমগুলি গ্রাস করে

checkErrorকোনও ত্রুটি হয়েছে কিনা তা দেখার জন্য আপনি পরে কল করতে পারেন, তবে সাধারণত আপনি PrintWriterকনসোলে লেখার মতো জিনিসগুলির জন্য ব্যবহার করতে চান - বা "দ্রুত 'নোংরা" অ্যাপ্লিকেশনগুলিতে যেখানে আপনি ব্যতিক্রম দ্বারা বিরক্ত হতে চান না (এবং কোথায় দীর্ঘমেয়াদী নির্ভরযোগ্যতা কোনও সমস্যা নয়)।

আমি নিশ্চিত নই কেন "অতিরিক্ত বিন্যাসের ক্ষমতা" এবং "ব্যতিক্রমগুলি গিলে ফেলবেন না" দিকগুলি একই শ্রেণিতে বান্ডিল করা হয়েছে - যেখানে আপনি ব্যতিক্রমগুলি গ্রাস করতে চান না সেখানে ফর্ম্যাটিং স্পষ্টতই কার্যকর । BufferedWriterএকসাথে একই ক্ষমতা অর্জন দেখে ভাল লাগবে ...


@ উইন্ডিফিল্ডস: না, PrintStreamএটি একটি OutputStreamPrintWriterএকটি Writer
জন স্কিটি

ধন্যবাদ "এটি ব্যতিক্রমগুলি গ্রাস করে।" আপনার অর্থ কী মুদ্রণ-লেখক চেক করা ব্যতিক্রমগুলি বাড়ায় না? চেক না করা ব্যতিক্রম সম্পর্কে কীভাবে?

4
@Ben: আমি বিশেষভাবে সম্পর্কে কথা ছিল IOExceptionএ, প্রত্যেক অন্যান্য আই বিমূর্ততা (যে Reader, Writerইত্যাদি) ঘোষণা করে তার পদ্ধতি নিক্ষেপ করে IOExceptionযদি কিছু গোলমাল - PrintWriterনেই।
জন স্কিটি

8

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

PrintWriter writer = new PrintWriter(
                         new BufferedWriter (
                             new FileWriter("somFile.txt")));

4
@ জোনস মনে করে মন্তব্য করুন যে মুদ্রণ লেখক ব্যতিক্রমগুলি গ্রাস করবে। চেকআরার কল করা উচিত।
ম্যাডমুরফ

4
কমপক্ষে বর্তমান ওপেনজেডকে 8 বাস্তবায়নে (এবং সম্ভবত পুরানো সংস্করণগুলি) PrinterWriterইতিমধ্যে একটি তৈরি করেছে BufferedWriter
নিমরোডম

7

প্রিন্ট রাইটার কেবলমাত্র অক্ষর মোডে যে কোনও লেখকের মুদ্রণ পদ্ধতিগুলি প্রকাশ করে।

বাফারড্রাইটার এর বাফার পদ্ধতি অনুসারে আরও দক্ষ। এবং এটি আপনার সিস্টেম প্ল্যাটফর্মের উপর নির্ভর করে একটি নতুন লাইনের () পদ্ধতি নিয়ে আসে, যাতে পাঠ্য ফাইলগুলি সঠিকভাবে পরিচালনা করতে পারে।

বাফার্ডআরডার অক্ষরে রূপান্তরিত বাইট সহ ফাইল থেকে একটি পাঠ্য পড়ার অনুমতি দেয়। এটি লাইনে লাইন পড়তে দেয়।

কোনও প্রিন্টআরডার নেই, আপনার ইনপুটটির ফর্ম্যাট অনুযায়ী আপনাকে অন্য একটি পাঠক প্রয়োগ বেছে নিতে হবে।


3

একটি ফাইলে ক্যারেক্টার ডেটা লেখার জন্য প্রিন্ট রাইটার হ'ল সর্বাধিক বর্ধিত লেখক।

ফাইল রাইটার এবং বাফার্ড রাইটারের ওপরে মুদ্রণ লেখকের প্রধান সুবিধা হ'ল:

  1. প্রিন্ট রাইটার ফাইলের সাথে সরাসরি যোগাযোগ করতে পারে এবং কিছু রাইটার বস্তুর মাধ্যমেও যোগাযোগ করতে পারে।

PrintWriter printwriter = new PrintWriter("blah.txt");

(বা)

FileWriter filewriter = new FileWriter("blah.txt");
PrintWriter printwiter = new PrintWriter(filewriter);
  1. আমরা সরাসরি ফাইলটিতে যেকোন প্রকারের প্রাইমেটিভ ডেটা লিখতে পারি (কারণ আমাদের কাছে প্রিন্ট রাইটার পদ্ধতিগুলির অতিরিক্ত ওভারলোডেড সংস্করণ রয়েছে যেমন, মুদ্রণ () এবং প্রিন্টলন ())।

    printwriter.print(65); //65
    bufferedwriter.write(65); //A
    printwriter.println(true); //true


2

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

দ্রষ্টব্য: কোড ব্লকের পাঠ্য সামগ্রী স্বয়ংক্রিয়ভাবে শব্দ-মোড়ানো

PrintWriter out = new PrintWriter(new BufferedWriter(new FileWriter("foo.out")));

ফাইলটিতে মুদ্রণযন্ত্রের আউটপুট বাফার করবে। বাফারিং ছাড়াই, মুদ্রণের () পদ্ধতির প্রতিটি অনুরোধ অক্ষরগুলিকে বাইটে রূপান্তরিত করতে পারে যা তত্ক্ষণাত্ ফাইলটিতে লিখিত হবে, যা খুব অদক্ষ হতে পারে।


0

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


-1

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

File file=new File(“newfile.txt”);
PrintWriter pw=new PrintWriter(file);
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.