تفاوت بین BufferedReader و InputStreamReader در جاوا چیست؟


پاسخ 1:

BufferedReader برخی از کاراکترهای جریان مشخص را می خواند و آنها را در یک بافر ذخیره می کند. این سرعت ورودی را سرعت می بخشد.

InputStreamReader فقط یک کاراکتر را از جریان مشخص می خواند و شخصیت های باقی مانده در جریان باقی می مانند.

به عنوان مثال:

Class NewClass {public static void main (String args []) InterpreException، IOException {BufferedReader isr = new BufferedReader (InputStreamReader جدید (System.in)) پرتاب می کند. اسکنر sc = اسکنر جدید (System.in)؛ System.out.println ("BR-" + (char) isr.read ())؛ System.out.println ("اسکنر -" + sc.nextLine ())؛ }

وقتی عبارت isr.read () اجرا شد ، من "سلام" را تایپ کردم و شخصیت "h" از "سلام" روی صفحه چاپ می شود. اگر این InputStreamReader بوده است ، شخصیت های باقی مانده "ello" در جریان System.in باقی می مانند و sc.nextLine () آنها را چاپ می کرد. در این حالت ، این اتفاق نمی افتد زیرا BufferedReader تمام شخصیت های "سلام" را از جریان "System.in" می خواند و آنها را در بافر شخصی خود ذخیره می کند. بنابراین ، جریان System.in هنگام استفاده از sc.nextLine () خالی می ماند.

برای کد:

کلاس NewClass main اصلی خالی استاتیک اصلی (رشته استدلال می کند)] InterchedException، IOException {InputStreamReader isr = new InputStreamReader (System.in) را پرتاب می کند؛ اسکنر sc = اسکنر جدید (System.in)؛ System.out.println ("ISR -" + (char) isr.read ())؛ System.out.println ("اسکنر -" + sc.nextLine ())؛ }

در این حالت ، InputStreamReader برای ورودی "سلام" فقط یک کاراکتر را می خواند ، و "سلام" باقیمانده در جریان System.in باقی می ماند و این کاراکترها توسط sc.nextLine () چاپ می شوند.

نتیجه گیری:

BufferedReader برخی از کاراکترهای جریان ورودی را خوانده و آنها را در یک بافر ذخیره می کند. به همین دلیل است که آن را BufferedReader می نامند. نتوانستم دریابم که چند شخصیت به طور هم زمان خوانده شده اند. وقتی تست کردم روی این جواب ، بین 3 تا 10 متغیر بود.

InputStreamReader فقط یک کاراکتر را از جریان ورودی می خواند و شخصیت های باقی مانده در جریان باقی می مانند. در این حالت بافر متوسط ​​وجود ندارد.

اگر یک یا چند موضوع یا اشیاء می خواهند کاراکترهای System.in را بخوانند ، باید از InputStreamReader در این حالت استفاده شود ، زیرا فقط یک کاراکتر خوانده می شود و سایر کاراکترها می توانند توسط اشیا یا موضوعات دیگر استفاده شوند.

BufferedReader سریع است زیرا یک بافر را مدیریت می کند و بازیابی داده ها از بافر در مقایسه با دریافت داده ها از دیسک / استاندارد سریع است.

امیدوارم که کمک کند اگر شک دارید ، لطفاً از طریق نظر بپرسید. من تمام تلاش خود را برای از بین بردن آنها انجام خواهم داد.


پاسخ 2:

مرجع: Decodejava.com با یک آموزش ساده جاوا

عملیات ورودی / خروجی پرونده منابع بسیاری از منابع مهم را مصرف می کند و وقت گیر است. بنابراین ، خواندن بخشی از کاراکترهای یک پرونده و ذخیره آنها در یک بافر محلی برای پردازش بعدی سریعتر از خواندن یک کاراکتر در یک زمان از یک فایل است.

از این رو کلاس BufferedReader برای ایجاد چنین جریان بافر خواننده استفاده می شود ، که از طریق آن برخی از کاراکترها از یک پرونده خوانده می شوند و برای استفاده های بعدی به یک بافر محلی منتقل می شوند.

برای اطلاعات بیشتر در مورد BufferedReader با یک مثال ساده کد ، به کلاس کلاس Java BufferedReader مراجعه کنید - Decodejava.com

InputStreamReader در اطراف یک جریان ورودی (که بایت خوانده می شود) پیچیده شده است تا داده ها را به شکل کاراکترها بخواند. بنابراین ، کلاس InputStreamReader به عنوان مبدل از بایت به کاراکتر عمل می کند.

برای اطلاعات بیشتر در مورد InputStreamReader با یک مثال ساده کد ، به کلاس کلاس Java InputStreamReader مراجعه کنید - Decodejava.com

امیدوارم کمک کند

موفق باشید


پاسخ 3:

InputStreamReader پلی است از جریان بایت تا جریان کاراکتر: بایت را می خواند و با استفاده از یک مجموعه کاراکتر مشخص ، آنها را در کاراکترها رمزگشایی می کند. مجموعه کاراکترهای مورد استفاده را می توان با نام یا صریح مشخص کرد یا مجموعه کاراکترهای استاندارد سکوی پذیرفته شده است.

هر تماس به یکی از روشهای خواندن () InputStreamReader می تواند منجر به خواندن یک یا چند بایت از جریان ورودی بایت زیرین شود. برای فعال کردن تبدیل کارآمد بایت به کاراکترها ، بایت های بیشتری را می توانید از جریان داده های اصلی از آنچه برای عملیات خواندن فعلی مورد نیاز است ، بخوانید.

برای بهره وری بهینه ، باید InputStreamReader را در یک BufferedReader گنجانید. به عنوان مثال:

BufferedReader in = BufferedReader جدید (InputStreamReader جدید (System.in))؛ BufferedReader کلاس عمومی خواننده را گسترش می دهد

متن را از یک جریان ورودی کاراکتر می خواند و کاراکترها را بافر می کند تا خواندن کارآمد کاراکترها ، آرایه ها و خطوط را فعال کند.

اندازه بافر را می توان مشخص کرد یا می توان از اندازه پیش فرض استفاده کرد. تنظیم پیش فرض برای بسیاری از اهداف به اندازه کافی بزرگ است.

به طور کلی ، هر درخواست خواندن از یک خواننده باعث می شود که یک درخواست خواندن مربوطه از شخصیت اصلی یا جریان بایت ایجاد شود. از این رو توصیه می شود یک خواننده بافر را در تمام خوانندگانی بپیچانید که عملکرد خواندن آنها ممکن است پرهزینه باشد ، به عنوان مثال B. FileReaders و InputStreamReaders. مثلاً

BufferedReader in = BufferedReader جدید (FileReader جدید ("foo.in"))؛

پاسخ 4:
  • InputStreamReader یک جریان جدید را ایجاد می کند که می تواند برای خواندن داده ها از منبع مشخص شده استفاده شود. این پل از جریان بایت تا جریان کاراکترها است. این بایت ها را می خواند و با استفاده از یک مجموعه کاراکتر مشخص ، آنها را در کاراکترها رمزگشایی می کند. مجموعه کاراکترهای مورد استفاده را می توان با نام مشخص کرد یا مجموعه کاراکترهای استاندارد سکو را می توان پذیرفت. BufferedReader انتزاعی است که متن را از یک جریان ورودی کاراکتر می خواند. این کاراکترها را بافر می کند تا کاراکترها و خطوط به طور موثر خوانده شوند. این یک کلاس است که برای خواندن متن از یک جریان ورودی مبتنی بر کاراکتر استفاده می شود. می توان از آن برای خواندن خط داده به صورت خط با استفاده از متد readLine () استفاده کرد. این باعث می شود عملکرد سریع شود. این کلاس Reader را به ارث می برد.