আমি সম্প্রতি InputStream
কোটলিনের একটি স্ট্রিংয়ে একটি এর সম্পূর্ণ সামগ্রী পড়ার কোড দেখেছি , যেমন:
// input is of type InputStream
val baos = ByteArrayOutputStream()
input.use { it.copyTo(baos) }
val inputAsString = baos.toString()
এবং যদিও:
val reader = BufferedReader(InputStreamReader(input))
try {
val results = StringBuilder()
while (true) {
val line = reader.readLine()
if (line == null) break
results.append(line)
}
val inputAsString = results.toString()
} finally {
reader.close()
}
এমনকি এটি স্বচ্ছ দেখায় যেহেতু এটি স্বয়ংক্রিয়ভাবে বন্ধ হয় InputStream
:
val inputString = BufferedReader(InputStreamReader(input)).useLines { lines ->
val results = StringBuilder()
lines.forEach { results.append(it) }
results.toString()
}
বা এটির মধ্যে সামান্য প্রকরণ:
val results = StringBuilder()
BufferedReader(InputStreamReader(input)).forEachLine { results.append(it) }
val resultsAsString = results.toString()
তারপরে এই কার্যকরী ভাঁজ জিনিস:
val inputString = input.bufferedReader().useLines { lines ->
lines.fold(StringBuilder()) { buff, line -> buff.append(line) }.toString()
}
বা একটি খারাপ প্রকরণ যা বন্ধ করে না InputStream
:
val inputString = BufferedReader(InputStreamReader(input))
.lineSequence()
.fold(StringBuilder()) { buff, line -> buff.append(line) }
.toString()
তবে এগুলি সকলেই ছদ্মবেশী এবং আমি এর নতুন এবং বিভিন্ন সংস্করণগুলি সন্ধান করতে থাকি ... এবং তাদের মধ্যে কেউ কখনও এটিকে বন্ধও করে না InputStream
। পড়ার একটি নন-ক্লঙ্কি (আইডোম্যাটিক) উপায় InputStream
কী?
দ্রষ্টব্য: এই প্রশ্নটি লেখক ইচ্ছাকৃতভাবে লিখেছেন এবং উত্তর দিয়েছেন ( স্ব-উত্তরযুক্ত প্রশ্ন ), যাতে সাধারণভাবে জিজ্ঞাসিত কোটলিন বিষয়গুলির বুদ্ধিমান উত্তরগুলি এসওতে উপস্থিত থাকে।
use
বাuseLines
যা কি "ব্যবহার" হচ্ছে তার উপর একটি ব্লক ফাংশন সঞ্চালন করে। যেমনinputStream.useText { text -> ... }
অন্য দিকে, যখন আমি "readText" পড়ার আমি একটি ফাংশন যে পাঠ্য ফেরৎ আশা:val inputAsString = inputStream.readText()
।