PDA

View Full Version : مقاله: استریمها در جاوا - قسمت دوم



manvaputra
دوشنبه 18 آذر 1387, 01:13 صبح
پیش نیاز:

استریمها در جاوا قسمت اول (http://barnamenevis.org/forum/showthread.php?t=132604)


خواندن از یک Input Stream:
همانطور که در قسمت اول این سری مقالات مشاهده نمودید استریمهای ورودی متعددی توسط بسته java.io فراهم شده است که با اندکی توجه به نام آنها می توان گزینه مناسب برای خواندن از منبع مورد نظر را پیدا کرد.
وقتی یک استریم ورودی ایجاد می شود به این معناست که این استریم قرار است از یک منبع اطلاعاتی تغذیه شود. به شکل زیر دقت نمایید:




http://pichostonline.com/u/081207/c25c9a6f98.jpghttp://freezpic.com/images/mbwk06laneg6hyfxdftf.jpg



خواندن اطلاعات از استریمها بخصوص استریمهای سطح پایین بصورت ترتیبی است بدین معنی که شما قادر به پرش به نقطه ای که کمی قبل خوانده اید را ندارید. این ترتیبی خواندن ذاتی استریمها الزاما یک عیب به شمار نمی رود چون مثلا قرار نیست که ما 10 گیگ محتویات رو بریزیم روی حافظه و بعد به برنامه امکان پرش در اطلاعات رو بر اساس زمان خونده شدن بدیم!
البته بعضی از فیلتر استریمهای سطح بالا به صورت محدود امکان عقب گرد به نقاطی رو که مارک شده باشن در طول داده های خوانده شده میده که این مورد هم توسط خیلی از فیلترها پشتیبانی نمیشه.

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



import java.io.*;
public class file {

public static void main(String[] args) throws Exception {

FileInputStream fileInput = new FileInputStream("c:\\manvaputra.txt");
int Dbyte=fileInput.read();

while (Dbyte != -1)
{

System.out.println( Dbyte );
Dbyte = fileInput.read();
}

fileInput.close();

}
}


کد بالا کدی ساده برای خواندن بایت های یک فایل بود .
برای نمایش محتویات فایل کافیست کد بالا خط System.out.println( Dbyte ); را به
System.out.print((char) Dbyte ); تغییر دهید.



import java.io.*;
public class file {

public static void main(String[] args) throws Exception {

FileInputStream fileInput = new FileInputStream("c:\\manvaputra.txt");
int Dbyte=fileInput.read();

while (Dbyte != -1)
{

System.out.print((char) Dbyte );
Dbyte = fileInput.read();
}

fileInput.close();

}
}

چنانچه به خاطر داشته باشید در مقاله قبلی گفتیم که استریمها قابلیت ترکیب شدن با هم برای ایجاد کارایی بیشتر را دارند.

در ادامه برای روشن شدن موضوع مثالی می آوریم در این مثال برای سرعت بخشیدن به خواندن اطلاعات از فایل اطلاعات توسط BufferedInputStream باغر می شوند:


import java.io.*;
public class file {

public static void main(String[] args) throws Exception {


FileInputStream fileInput = new FileInputStream("c:\\manvaputra.txt");
BufferedInputStream txt = new BufferedInputStream(fileInput );

while (txt.available() > 0)
{
System.out.print((char)txt.read());
}

}

}

ادامه دارد.....

mzeadabadi@gmail.com
چهارشنبه 13 آبان 1388, 09:34 صبح
با تشکر از شما

abdoullah.aberi
جمعه 12 مهر 1392, 12:59 عصر
مرسی ادامه بدید خیلی عالی بود ما منتظریم

esmaeilbf
جمعه 12 مهر 1392, 15:15 عصر
مرسی ادامه بدید خیلی عالی بود ما منتظریم

یه مطلب ماله پنج سال پیش رو آوردین بالا میخواین که ادامه بدن ایشون!!!!!!!