یوشا

وبگاه دست نوشته ها و تجربیات شخصی

یوشا

وبگاه دست نوشته ها و تجربیات شخصی

یوشا

دکتر مصطفی چمران: می گویند تقوا از تخصص لازمتر است، آنرا می پذیرم، اما می گویم: آنکس که تخصص ندارد و کاری را می پذیرد، بی تقواست!

بایگانی
تبلیغات
Blog.ir بلاگ، رسانه متخصصین و اهل قلم، استفاده آسان از امکانات وبلاگ نویسی حرفه‌ای، در محیطی نوین، امن و پایدار bayanbox.ir صندوق بیان - تجربه‌ای متفاوت در نشر و نگهداری فایل‌ها، ۳ گیگا بایت فضای پیشرفته رایگان Bayan.ir - بیان، پیشرو در فناوری‌های فضای مجازی ایران

۱ مطلب در تیر ۱۳۹۷ ثبت شده است

در Java چندین کلاس برای نوشتن و خواندن ورودی و فایلهای متنی وجود داره... اما کدام کلاس مناسبتره، کدام سریعتره و کدام نیازهای کاربر رو برطرف میکنه؟

 

  • کلاس BufferedReader

برای خواندن ورودی/فایل stream بصورت خط به خط از نوع string.

دارای بیش از 20 متد public داخلی.

پشتیبانی از متد close() برای بستن file handle.

این کلاس thread-safe هست. (میتوان BufferedReader رو در بین thread ها share کرد)

توانایی خواندن ورودی از System.in (یا stdin)

دارای حافظه buffer با سایز 8 کیلوبایت.

میتواند کلاس FileReader و InputStreamReader رو بعنوان reader در سازنده دریافت کند.

این کلاس synchronized هست.

پیاده سازی شده در JDK 1.1 و جدیدتر.

دارای کمترین system calls و کاملاً بهینه.

در صورت وقوع استثنا IOException اونرو throw میکنه.

عدم پشتیبانی از Encoding بصورت مستقیم.

زیر مجموعه پکیج java.io.

دارای پرفورمنس بالا نسبت به کلاسهای Scanner و FileReader.

توانایی خواندن ورودی فقط با نوع string.

مناسب برای محیط های multi-thread.

مناسب برای خواندن متن/ورودی طولانی بصورت string و خط به خط. (مثل فایلهای log, books)

 

 

  • کلاس Scanner

برای خواندن ورودی/فایل بصورت parse کردن داده های نوع primitive. (مثل int, long, double, string)

دارای بیش از 60 متد public داخلی.

پشتیبانی از متد close() برای بستن file handle.

این کلاس thread-safe نیست. (نمیتوان Scanner رو در بین thread ها share کرد)

توانایی خواندن ورودی از System.in (یا stdin)

دارای حافظه buffer با سایز 1 کیلوبایت.

میتواند کلاس FileReader و BufferedReader رو بعنوان reader در سازنده دریافت کند.

این کلاس synchronized نیست.

پیاده سازی شده در JDK 1.5 و جدیدتر.

دارای system calls پایین و تقریباً بهینه.

در صورت وقوع استثنا IOException اونرو مخفی میکنه.

عدم پشتیبانی از Encoding بصورت مستقیم.

زیر مجموعه پکیج java.util.

دارای پرفورمنس پایین نسبت به کلاسهای BufferedReader و FileReader.

توانایی خواندن ورودی با نوع int, long, string, float...

به دلیل استفاده از regular expression حافظه/CPU بیشتری نسبت به کلاس BufferedReader مصرف میکنه.

مناسب برای خواندن متن/ورودی و parse کردنش توسط delimiter. (مثل فایلهای xml, ini, config, json)

 

  • کلاس FileReader

برای خواندن فقط فایل از نوع string.

دارای 20 متد public داخلی.

پشتیبانی از متد close() برای بستن file handle.

عدم توانایی خواندن ورودی از System.in (یا stdin)

بدون قابلیت buffer.

پیاده سازی شده در JDK 1.1 و جدیدتر.

دارای بیشترین system calls و بسیار کند.

در صورت وقوع استثنا IOException اونرو throw میکنه.

عدم پشتیبانی از Encoding. (درواقع پیشفرض platform رو استفاده میکنه)

زیر مجموعه پکیج java.io.

دارای پرفورمنس بسیار پایین نسبت به کلاسهای Scanner و BufferedReader.

توانایی خواندن ورودی فقط با نوع string.

بهتر است بصورت مستقیم استفاده نشود.

۲ نظر ۹۷/۰۴/۱۶
یوشا آل ایوب