آموزش های این وب سایت به صورت رایگان در دسترس است. اطلاعات بیشتر
بروز خطا
   [message]
اشتراک در سوال
رای ها
[dataList]

سوالاتی در مورد پروژه دانلودر

Hadi  9 سال پیش  9 سال پیش
0 0

سلام.من بعضی از قسمت های پروژه دانلودر رو متوجه نمیشم.اگر کسی میتونه لطفا این ها رو یه توضیحی بدi

 InputStream inputStream = connection.getInputStream();
byte[] buffer = new byte[G.DOWNLOAD_BUFFER_SIZE];
int len = 0;
int downloadedSize = 0;
while ((len = inputStream.read(buffer)) > 0) {
outputStream.write(buffer, 0, len);
downloadedSize += len;
}
 

اول اینکه چرا از آرایه بایت اینجا استفاده شده.و دقیقا چیکار میکنه.

دوم اینکه عددی که داخل آرایه بایت نوشته شده،چه معنی رو میده.مثلا تو پروژه استاد نوشته شده 8*1024.

سوم اینکه متد های read،write چیکار میکنن؟و چرا داخل متد read آرایه buffer رو نوشته.

و در آخر اینکه  مقدار inputStream.read چگونه تغییر میکنه که تو شرط هست تا زمانی که بیشتر از صفر بود ادامه بده.؟

ممنون میشم یه توضیحی بدید.

 برای این سوال 1 پاسخ وجود دارد. مشاهده پاسخ صحیح
پاسخ به سوال 
Amir  9 سال پیش
+1 0

 پاسخ صحیح

بایت که اینجا همون هشت بیته که ۱۰ × ۱۰۲۴ یعنی این آرایه می تونه ۱۰۲۴۰ بایت از فایلی که می خواید دانلود کنید رو توی خودش ذخیره کنه.

inputStream.read(buffer) میاد از یوآرالی که بهش دادید (فایلی که قراره دانلود بشه) به اندازه ی buffer (بایت ۱۰۲۴۰) می خونه و داخل همون بافر میریزه. متد write هم میاد اون مقدار بافری که خونده شده رو توی یه فایلی میریزه.

مقدار inputStream.read به صورت اتوماتیک عوض میشه یعنی اون مقداری که خونده شده دوباره خونده نمیشه و میره بعدی. وقتی هم که کل فایل رو خوند خروجی inputStram.read صفر میشه که در این صورت کار تمونه و از حلقه بیرون میاد.

0 0
متشکرم از توضیح شما.یه قسمت هایی شو متوجه شدم.و یه قسمت هایی شو نه! الان سوالم با آرایه بایته.اینکه چرا از آرایه استفاده شده؟من اگر عدد داخل بایت رو به 100000 تغییر بدم.چه معنی ای میده؟آیا ممکنه برنامه کرش کنه.اگر ممکنه یکم طریقه کار بایت رو بیشتر توضیح بدید.مرسی (9 سال پیش)
+1 0
اگه از آرایه استفاده نکنید و فقط بنویسید: byte buffer; این کد فقط می تونه یک بایت از فایلی رو که می خواید دانلود کنید رو توی خودش بریزه و به همین خاطر اگه مثلا حجم فایل 2 مگابایت باشه حلقه ی while تقریبا 2 میلیون بار تکرار میشه و بهینه هم نیست که بخواید 1 بایت رو دانلود کنید و بریزیدش توی فایل و دوباره تا 2 میلیون بار این کارو تکرار کنید (البته متد inputStream.read فقط byte[] میگیره و نمیشه byte خالی بهش بدید). حالا اگه عدد داخل بایت رو به هر عددی تغییر بدید هم هیچ مشکلی پیش نمیاد و آرایه می تونه حجم بیشتری رو توی خودش ذخیره کنه اما اگه این حجم خیلی زیاد باشه و بیشتر از مقدار حافظه ای باشه که به برنامه شما اختصاص داده شده مطمئنا برنامه کرش می کنه. (9 سال پیش)
0 0
متوجه شدممرسی و .ممنونم از وقتی که گذاشتید. (9 سال پیش)

پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .