ورود

View Full Version : تفاوت بین دو FileOutput/InputStream و BufferedOutput/InputStream



silverado1371
چهارشنبه 27 دی 1396, 05:38 صبح
سلام
چه تفاوتی بین FileOutputStream و BufferedOutputStream هست؟
چه تفاوتی بین FileInputStream و BufferedInputStream هست؟
و اینکه کلا Buffer در جاوا چی هست!؟ و چرا سرعت BuffredStream از یه Stream بیشتره!؟

vahid-p
چهارشنبه 27 دی 1396, 11:04 صبح
اولین تفاوت اینه که BufferedOutputStream و FileOutputStream که اولی برای استریم های مختلفی (از جمله فایل) هست ولی دومی فقط برای فایل. بهتر بود با OutputStream مقایسه میشد.

اما معنای تقریبی بافر (Buffer) خروجی یعنی مقادیر نسبتا زیادی در مموری نوشته میشه ولی لزوما در خروجی نوشته نمیشه و در مموری قرار میگیره و بعد یک مرتبه در خروجی نوشته میشه یا لااقل مقادیر زیادی با هم نوشته میشن. ولی در حالت غیربافر مقادیر (هر چقدر هم کم باشن) مستقیما در خروجی نوشته میشن. اگر فایل باشه خب هر مقدار کمی در فایل نوشته میشه ولی بافر شده اونها رو جمع میکنه و مقادیر زیادی رو یک مرتبه در دیسک مینویسه. هر چند ممکنه با اینکه از بافر استفاده نکنید خود سیستم عامل بافر کنه و برای همین لازمه flush کنید.

همین ذخیره کردن مموری و مقادیر زیادی با هم نوشتن در خیلی از مواقع باعث بالا رفتن شدید کارایی میشه. لازمه در مورد بافر بیشتر بخونید. همچنین سرچ کنید Differences between OutputStream and BufferedOutputStream

silverado1371
چهارشنبه 27 دی 1396, 14:00 عصر
اولین تفاوت اینه که BufferedOutputStream و FileOutputStream که اولی برای استریم های مختلفی (از جمله فایل) هست ولی دومی فقط برای فایل. بهتر بود با OutputStream مقایسه میشد.

اما معنای تقریبی بافر (Buffer) خروجی یعنی مقادیر نسبتا زیادی در مموری نوشته میشه ولی لزوما در خروجی نوشته نمیشه و در مموری قرار میگیره و بعد یک مرتبه در خروجی نوشته میشه یا لااقل مقادیر زیادی با هم نوشته میشن. ولی در حالت غیربافر مقادیر (هر چقدر هم کم باشن) مستقیما در خروجی نوشته میشن. اگر فایل باشه خب هر مقدار کمی در فایل نوشته میشه ولی بافر شده اونها رو جمع میکنه و مقادیر زیادی رو یک مرتبه در دیسک مینویسه. هر چند ممکنه با اینکه از بافر استفاده نکنید خود سیستم عامل بافر کنه و برای همین لازمه flush کنید.

همین ذخیره کردن مموری و مقادیر زیادی با هم نوشتن در خیلی از مواقع باعث بالا رفتن شدید کارایی میشه. لازمه در مورد بافر بیشتر بخونید. همچنین سرچ کنید Differences between OutputStream and BufferedOutputStream

نکته جالبی بود که باید تفاوت بین OutputStream و BufferedOutpuStream رو ببینم چون تو نتم که سرچ میکردم اکثرا سوالشون مثل سوال من بود! بازم ممنون که توجه میکنید و جواب میدید.