পাঠক এবং ইনপুট স্ট্রিমের মধ্যে পার্থক্য কী? আর কখন ব্যবহার করবেন? আমি যদি অক্ষরগুলি পড়ার জন্য পাঠককে ব্যবহার করতে পারি তবে কেন আমি ইনপুটস্ট্রিমটি ব্যবহার করব, আমি অনুমান করি অবজেক্টগুলি পড়তে পারি?
পাঠক এবং ইনপুট স্ট্রিমের মধ্যে পার্থক্য কী? আর কখন ব্যবহার করবেন? আমি যদি অক্ষরগুলি পড়ার জন্য পাঠককে ব্যবহার করতে পারি তবে কেন আমি ইনপুটস্ট্রিমটি ব্যবহার করব, আমি অনুমান করি অবজেক্টগুলি পড়তে পারি?
উত্তর:
একটি ইনপুটস্ট্রিম হ'ল সংস্থান থেকে তথ্য পাওয়ার কাঁচা পদ্ধতি। এটি কোনও ধরণের অনুবাদ না করেই বাইট বাই ডেটা বাইট করে। আপনি যদি চিত্রের ডেটা বা কোনও বাইনারি ফাইল পড়ছেন তবে এটি ব্যবহারের স্ট্রিম।
একটি পাঠক চরিত্রের স্ট্রিমের জন্য ডিজাইন করা হয়েছে। আপনি যে তথ্যটি পড়ছেন সেগুলি যদি সমস্ত পাঠ্য হয় তবে পাঠক আপনার জন্য অক্ষর ডিকোডিংয়ের যত্ন নেবেন এবং কাঁচা ইনপুট স্ট্রিম থেকে আপনাকে ইউনিকোড অক্ষর দেবেন। আপনি যদি কোনও ধরণের পাঠ্য পড়েন তবে এটি ব্যবহারের স্ট্রিম।
আপনি ইনপুট স্ট্রিমটি মোড়ানো করতে পারেন এবং ইনপুট স্ট্রিম রিডার ক্লাসটি ব্যবহার করে এটি একটি পাঠক হিসাবে পরিণত করতে পারেন।
Reader reader = new InputStreamReader(inputStream, StandardCharsets.UTF_8);
ইনপুট স্ট্রিমগুলি একটি স্ট্রিমের বাইটগুলি পড়তে ব্যবহৃত হয়। সুতরাং এগুলি চিত্র, ভিডিও এবং সিরিয়ালযুক্ত বস্তুর মতো বাইনারি ডেটাগুলির জন্য দরকারী।
অন্যদিকে পাঠকরা চরিত্রের স্রোত তাই তারা অক্ষর ডেটা পড়তে সর্বোত্তম ব্যবহার হয়।
read()
বাইট বাই কখন ব্যবহার করবেন এবং কখন read(byte[])
বাইটের অ্যারে ব্যবহার করবেন । আমি যেমন মনে করি অ্যারে পড়া সবসময় আরও ভাল। তারপরে আপনি আমাকে উদাহরণ দিতে পারেন যেখানে read()
বাইট বা বাইটের read(byte[])
অ্যারে বাইট ব্যবহার করবেন। বা BufferedInputStream
?
আমি অনুমান করি যে বিভ্রান্তির উত্স হ'ল এটি InputStream.read()
একটি প্রদান করে int
এবং Reader.read()
একটিও প্রদান করে int
।
পার্থক্যটি হ'ল InputStream.read()
বাইট স্ট্রিমের কাঁচামাল অনুসারে 0 এবং 255 এর মধ্যে বাইট মানগুলি Reader.read()
ফেরত দিন এবং 0 এবং 65357 এর মধ্যে থাকা অক্ষরটির মানটি ফেরান (কারণ এখানে 65358 বিভিন্ন ইউনিকোড কোডপয়েন্ট রয়েছে)
একটি InputStream
আপনি পড়তে বিষয়বস্তু, -এর প্রত্যেক বাইট উদাহরণস্বরূপ বিষয়বস্তু দেয় "একটি ‡ একটি" 5 বাইট (প্রতিটি এক একটি হিসাবে প্রতিনিধিত্ব একটি প্রবাহ যেমন পড়া হয় int
0 এবং 255 মধ্যে) ফলে মধ্যে 97
, 226
, 128
, 161
এবং 97
যেখানে
a -> U+0061 -> 0x61 (hex) -> 97 (dec)
‡ -> U+2021 -> 0xE280A1 (utf-8 encoding of 0x2021) -> 226 128 161 (1 int per byte)
a -> U+0061 -> 0x61 (hex) -> 97 (dec)
একটি Reader
আপনি চরিত্র তাই বিষয়বস্তু "একটি ‡ একটি" 3 টি অক্ষর যেমন পড়া হয় দ্বারা বিষয়বস্তু অক্ষর পড়তে দেয় 97
, 8225
এবং 97
যেখানে
a -> U+0061 -> 0x61 -> 97
‡ -> U+2021 -> 0x2021 -> 8225 (single int, not 3)
a -> U+0061 -> 0x61 -> 97
অক্ষরটি ইউনিকোডে U + 2021 হিসাবে উল্লেখ করা হয়
ইনপুট স্ট্রিম এবং পাঠকের পটভূমি:
জাভা শুরুর দিনগুলিতে, কনসোল ইনপুট সম্পাদনের একমাত্র উপায় ছিল বাইট স্ট্রিম (ইনপুটস্ট্রিম এবং আউটপুট স্ট্রিম) ব্যবহার করা।
ব্যবহারের ক্ষেত্রে:
আজ, কনসোল স্ট্রিমটি পড়তে বাইট স্ট্রিম ব্যবহার করাও গ্রহণযোগ্য। তবে, বাণিজ্যিক অ্যাপ্লিকেশনগুলির জন্য, কনসোল ইনপুট পড়ার জন্য পছন্দের পদ্ধতিটি হ'ল অক্ষর-ভিত্তিক স্ট্রিম (রিডার) ব্যবহার করা। পাঠক আপনার আন্তর্জাতিককরণ এবং রক্ষণাবেক্ষণ করা সহজ করে তোলে।
দ্রষ্টব্য: জাভা I / O কোডগুলি অন্বেষণের জন্য এটি কেবলমাত্র অতিরিক্ত তথ্য that আপনি যদি সাজসজ্জার ডিজাইন প্যাটার্নের সাথে পরিচিত হন তবে আপনি সহজেই বাস্তবায়নটি ধরতে পারবেন।
একটি বাইট গ্রহণ করে এবং অন্যটি অক্ষর গ্রহণ করে।
ইনপুটস্ট্রিম বাইট গ্রহণ করুন Java পাঠক গ্রহণযোগ্য চরিত্র, জাভাতে, একটি অক্ষর = দুটি বাইট এবং রিডার বাফার ব্যবহার করে, ইনপুট স্ট্রিম ব্যবহার করবে না। বাইটের ভিত্তিতে ডিস্কে বা ট্রান্সফারের সমস্ত ফাইল স্টোরেজ, চিত্র এবং ভিডিও অন্তর্ভুক্ত করে তবে চরিত্রটি মেমরিতে থাকে, তাই ইনপুটস্ট্রিম প্রায়শই ব্যবহৃত হয়।