কলমের উত্তরের বিষয়ে আপনি আপনার মন্তব্যে বলেছেন যে আপনি ব্যবহার করতে যাচ্ছেন
CharStreams.toString(new InputStreamReader(supplier.get(), Charsets.UTF_8))
এই কোডটি সমস্যাযুক্ত কারণ ওভারলোডের বিবরণ CharStreams.toString(Readable):
বন্ধ না করে Readable।
এর অর্থ হ'ল আপনার InputStreamReaderএবং এক্সটেনশনের মাধ্যমে InputStreamফিরে supplier.get()আসা এই কোডটি সম্পূর্ণ হওয়ার পরে বন্ধ হবে না।
অন্যদিকে, আপনি যদি ইতিমধ্যে কোনও InputSupplier<InputStream>ওভারলোড ব্যবহার করে দেখে ফেলেছেন যে এই সুবিধাটি গ্রহণ করেন CharStreams.toString(InputSupplier<R extends Readable & Closeable>), toStringপদ্ধতিটি আপনার Readerজন্য তৈরি এবং বন্ধকরণ উভয়ই পরিচালনা করবে ।
এটি হ'ল জোন স্কিটের পরামর্শ, ঠিক তেমন কোনও ওভারলোড নেই যা ব্যতীত ইনপুট হিসাবে CharStreams.newReaderSupplierনেয় InputStream... আপনাকে এটি দিতে হবে InputSupplier:
InputSupplier<? extends InputStream> supplier = ...
InputSupplier<InputStreamReader> readerSupplier =
CharStreams.newReaderSupplier(supplier, Charsets.UTF_8);
// InputStream and Reader are both created and closed in this single call
String text = CharStreams.toString(readerSupplier);
মূল বিষয় InputSupplierহ'ল try-finallyসম্পদগুলি সঠিকভাবে বন্ধ হয়ে গেছে তা নিশ্চিত করার জন্য পেয়ারা সেই অংশগুলিকে পরিচালনা করার অনুমতি দেয় যাতে আপনার কুশল ব্লকের প্রয়োজন হয় handle
সম্পাদনা করুন: ব্যক্তিগতভাবে, আমি নিম্নলিখিতগুলি পেয়েছি (যা আমি এটি আসলে কীভাবে লিখতাম, কেবলমাত্র উপরের কোডের ধাপগুলি ভেঙে দিয়েছিলাম)
String text = CharStreams.toString(
CharStreams.newReaderSupplier(supplier, Charsets.UTF_8));
হতে এ পর্যন্ত এই তুলনায় বাগাড়ম্বরপূর্ণ কম:
String text;
InputStreamReader reader = new InputStreamReader(supplier.get(),
Charsets.UTF_8);
boolean threw = true;
try {
text = CharStreams.toString(reader);
threw = false;
}
finally {
Closeables.close(reader, threw);
}
এটি নিজেকে সঠিকভাবে পরিচালনা করার জন্য আপনাকে কম বেশি কী লিখতে হবে।
সম্পাদনা করুন: ফেব্রুয়ারী 2014
InputSupplierএবং OutputSupplierএবং যে পদ্ধতিগুলি সেগুলি ব্যবহার করে তা পেয়ারা ১.0.০ এ অবমুক্ত করা হয়েছে। তাদের প্রতিস্থাপন হয় ByteSource, CharSource, ByteSinkএবং CharSink। একটি দেওয়া ByteSource, আপনি এখন এর লিখিত সামগ্রী এর মতো পেতে Stringপারেন:
ByteSource source = ...
String text = source.asCharSource(Charsets.UTF_8).read();
Charsets.US_ASCII) আপনি কী বলতে চান তা বোঝার চেয়ে আপনি "উহু, আমার অনুমান যাই হোক না কেন"? যা অনেককেই করতে খুশি মনে হয়। বিশেষত যেহেতু জাভা কোনও ইউটিএফ -8 এর মতো বোধগম্য কোনও ডিফল্ট ব্যবহার করে না।