জাভাতে কি নাল আউটপুট স্ট্রিম আছে?


112

আমি যে OutputStreamএপিআই ব্যবহার করছি তার জন্য আমাকে একটি নির্দিষ্ট করতে হবে তবে আউটপুটটির আসলে আমার প্রয়োজন নেই। জাভা এর OutputStreamসমান > /dev/null?

উত্তর:


19

জাভা ১১-এর পর থেকে, একটি স্থিতিশীল ইউটিলিটি রয়েছে যা আপনার প্রয়োজন মতো করে, একটি স্ট্যাটিক কারখানার পদ্ধতি OutputStream.nullOutputStream():

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


দুর্দান্ত, এটি নির্দেশ করার জন্য ধন্যবাদ! তবে "জাভা 11 এর পরে"? আমি মনে করি জাভা 11 শুধুমাত্র এক সপ্তাহের জন্য বাইরে গেছে।
ব্র্যান্ডন ইয়ারব্রু

116
/**Writes to nowhere*/
public class NullOutputStream extends OutputStream {
  @Override
  public void write(int b) throws IOException {
  }
}

15
এটির মতো এমন কিছু ব্যবহার করে আপনার যেখানেই প্রয়োজন হয় সহজেই এটি প্রয়োগ করা যেতে পারে: OutputStream nullOutputStream = new OutputStream() { @Override public void write(int b) { } };
হ্যাঙ্ক শুল্টজ


42

এটি এখনও উল্লেখ করা, তাই আমিও যোগ করব পেয়ারা এর ByteStreamsনালআউটপুট স্ট্রিম () , কারণ কেউ কেউ অ্যাপাচি কমন্স আইও এর চেয়ে পেয়ারা পছন্দ করতে পারেন বা ইতিমধ্যে এটি তাদের প্রকল্পে থাকতে পারে।

দ্রষ্টব্য: আপনি যদি পেয়ারা পুরানো সংস্করণ ব্যবহার করেন (1.0 থেকে 13.0 পর্যন্ত), আপনি com.google.io.NullOutputStream ব্যবহার করতে চান ।


15

ইতিমধ্যে সরবরাহ করা উত্তরগুলি পুনঃভাগ করা -

জাভা এর কোন NullOutputStreamক্লাস নেই। তবে আপনি নিজের নিজস্ব রোল করতে পারেন OutputStreamযা এতে লিখিত কোনও ডেটা উপেক্ষা করে - অন্য কথায় write(int b), write(byte[] b)এবং write(byte[] b, int off, int len)খালি পদ্ধতির বডি থাকবে। কমন আইও NullOutputStreamক্লাস এটি করে।



3

স্ট্যান্ডার্ড লাইব্রেরি এএফাইক নয়, তবে আউটপুট স্ট্রিমে রাইটিং ওভাররাইড করে একটি তৈরি করা কঠিন হওয়া উচিত নয়


কেন এটিকে নিম্নচাপ দেওয়া হলো? এই সমাধানটি বাস্তবায়িত করা সত্যই তুচ্ছ, যেমনটি ম্যাকডোভেল উপরে দেখিয়েছিলেন।
পিডিএক্স্লেইফ

3

না, তবে এটি কার্যকর করা বেশ সহজ।

এই প্রশ্নটি দেখুন "কোডবেস থেকে System.out.println সরানোর উপায়"

এবং তারপরে আপনাকে কেবল এটি করতে হবে:

System.setOut( DevNull.out );

বা এরকম কিছু :)

System.setOut (PrintStream)


আমি ত্রুটিটি পেয়েছি: "চূড়ান্ত ভেরিয়েবলের মান নির্ধারণ করতে পারে না"
ডেভিড গ্রেসন


1

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

String fileContent = "Welcome to StackOverflow readers !! Here goes the question link...";
Writer writer = Writer.nullWriter();
writer.write(fileContent);
writer.close();

আশা করি এটি কারও সাহায্য করতে পারে!


0

আমি বিশ্বাস করি যে এটিই আপনি খুঁজছেন, আমি একই জিনিসটি সন্ধান করছিলাম: এটি স্ট্যান্ডার্ড ত্রুটি থেকে প্রসেসবিল্ডার অবজেক্টগুলিতে স্ট্যান্ডার্ড আউটপুট থেকে আউটপুট স্ট্রিমগুলি পুনর্নির্দেশের জন্য।

ব্লককোট

pb.redirectError( ProcessBuilder.Redirect.appendTo( new File( "NUL:" ) ) );
  • ডোম

এটি উইন্ডোজ নির্দিষ্ট।
পিটারহ

-4

ByteArrayOutputStreamআপনি যা চান তা হ'ল (ধরে নিবেন যে এপিআই আউটপুট পাঠ্য আসবে)। শুধু একটি নতুন ইনস্ট্যান্ট করুন।


2
এটি একটি খারাপ ধারণা কারণ আপনি এটিকে ফেলে দেওয়ার পরিবর্তে মেমরিতে ডেটা সংগ্রহ করবেন। লেখক যদি আপনার BAOS এ 15 গিগাবাইট জাঙ্ক লেখেন? এটা হতে পারে.
25'15
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.