আউটপুট প্রবাহে স্ট্রিং লিখুন


139

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

এখন, আমি স্ট্রিং পেয়েছি। এখানে স্ট্রিমগুলিতে লেখার সর্বোত্তম উপায় কী?

আমি কি কেবল Writer.writ (message.getBytes ()) ব্যবহার করব? আমি এটিকে বাইট দিতে পারি, তবে গন্তব্য প্রবাহটি যদি একটি চরিত্রের ধারা হয় তবে তা স্বয়ংক্রিয়ভাবে রূপান্তরিত হবে?

এর পরিবর্তে আমার কি এখানে কিছু ব্রিজ স্ট্রিম ব্যবহার করা দরকার?


2
আমি নিশ্চিত নই তবে আপনি এখানে চাকাটি পুনঃস্থাপনের চেষ্টা করছেন বলে মনে হচ্ছে, আপনি জাভা বেস এপিআই, পাশাপাশি কমন্স আইও এপিআইয়ের মাধ্যমে সন্ধান করেছেন?
পোস্টদেফ

উত্তর:


149

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

কোনও স্ট্রিমে চরিত্রের ডেটা লেখার স্বাভাবিক উপায়টি যদিও স্ট্রিমটিকে একটি Writer, (প্রায়শই ক PrintWriter) এ মোড়ানো হয় যা আপনি যখন তার write(String)(বা print(String)) পদ্ধতিতে কল করেন তখন এটি আপনার জন্য রূপান্তর করে । ইনপুট স্ট্রিমগুলির জন্য সংশ্লিষ্ট মোড়ক একটি পাঠক is

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

আউটপুট স্ট্রিম সহ মুদ্রণ লেখকের উদাহরণ:

try (PrintWriter p = new PrintWriter(new FileOutputStream("output-text.txt", true))) {
    p.println("Hello");
} catch (FileNotFoundException e1) {
    e1.printStackTrace();
}

3
সুতরাং ব্যবহার PrintWriterকরা ঠিক যেমন ব্যবহারের মতো String.getBytes()। এটি जेভিএমের ডিফল্ট হতে পারে যা কিছু এলোমেলো করে এনকোডিং ব্যবহার করে। সুতরাং এটি কেবল তখনই কার্যকর হয় যদি আপনি ভাগ্যবান হন।
ক্রিস্টোফার হামার্সট্রিম

106

আউটপুট স্ট্রিম বাইট লিখেছেন, স্ট্রিং চরগুলি সরবরাহ করে। বাইট করার জন্য স্ট্রিং এনকোড করতে আপনার চরসেটটি সংজ্ঞায়িত করতে হবে []:

outputStream.write(string.getBytes(Charset.forName("UTF-8")));

UTF-8আপনার পছন্দের অক্ষরে পরিবর্তন করুন ।


3
নিম্নলিখিত লাইনের সাথে যুক্ত করুন। ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
সাহিল প্যাটেল

32

আপনি আপনার আউটপুট স্ট্রিমের চারপাশে মুদ্রণযন্ত্র তৈরি করতে পারেন এবং তারপরে একে মুদ্রণ (স্ট্রিং) বলতে পারেন:

final OutputStream os = new FileOutputStream("/tmp/out");
final PrintStream printStream = new PrintStream(os);
printStream.print("String");
printStream.close();

2
বাইটে রূপান্তর করতে মুদ্রণযন্ত্রটি কোন অক্ষর সেট করে?
ডিন হিলার 31'15


12

একটির সাথে আপনার OutputStream মোড়ানো PrintWriter এবং যে বর্গ সাইটে মুদ্রণ পদ্ধতি ব্যবহার করুন। তারা একটি স্ট্রিং নেয় এবং আপনার জন্য কাজটি করে।


9

আপনি অ্যাপাচি কমন্স আইও ব্যবহার করতে পারেন :

try (OutputStream outputStream = ...) {
    IOUtils.write("data", outputStream, "UTF-8");
}

IOUtils.write(String data, OutputStream output, Charset encoding)হিসাবে প্রয়োগ করা হয়েছে output.write(data.getBytes(Charsets.toCharset(encoding))), সুতরাং এটি যদি কোনও এনকোডযুক্ত স্ট্রিং বাইট অ্যারে
Šarūnas এ
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.