كيفية قراءة InputStream عن طريق Scanner ؟

أنا مبتدئ في برمجة الأندرويد و حاليا انا أخذ كورسات على منصة Udacity في أحد الدروس لاحظت انو في عوض ما يتم قراءة InputStream عن طريق BufferReader تم استخدام كلاس Scanner صراحة بحثت في موضوع سكانر و ما فهمت فيه شي وجدت طريقة عمله و الشرح كان باللغة الأنجليزية :

Using Scanner class is not so popular, but it works. The reason it works is because Scanner iterates over tokens in the stream, and in this process we can separate tokens using “beginning of the input boundary” (A) thus giving us only one token for the entire contents of the stream.

مططلحات كثيرة ما فهمتها هنا ماذا يقصد بـ "Iterates" و "tokens"؟ علمت أن معناها هو ' يتكرر عبر الرموز ' لكن ما المقصود بهذا ؟ هل يوجد رموز في ستريم ؟

بصراحة ما فهمت شي من الكلام ذا و عن كلاس سكانر اذا في شخص له معرفة بالأمر فمن فضلكم الاجابة


OptProg أضف ردا

دعنا نفهم أولاً الفرق بين BufferedReader و Scanner. هناك فارق أساسي بينهما، وهو أن BufferedReader فقط يقوم بقراءة البيانات المعطية له أما Scanner فهو يقرأ ويحولها أيضاً (parsing) بحيث تستطيع الحصول على قيم مثل int و double وغيرها من خلاله. هناك فروق أخرى لن نتحدث عنها.

فعلياً بسبب التحويل الذي يعمله Scanner فإنه أقل كفاءة من BufferedReader، ولذا إذا كنت فقط تريد قراءة البيانات فلا حاجة لاستخدام Scanner.

بالنسبة لما يقصده بiterate وtokens فدعني أشرح لك tokens أولاً:

token هي ببساطة أي نص ممكن أن يقوم بقراءته الScanner. في المثال التالي:

ستحصل على هذه النتيجة:

This

is

school

1

كل واحدة من العبارات في الأعلى تعبر عن token.

إذا فtoken هي النص الذي يقرأه الScanner أو BufferedReader أو أي قارئ آخر، سواء كان يتكون من كلمة واحدة أو جملة أو رقم.. المهم أن القارئ يستطيع قراءته.

إذاً الآن يصبح فهم iterate سهل، وهو أن الScanner يمر على كل الtokens واحدة تلو الأخرى (iterate over tokens).

حاولت أن أوضح كل شيء لكن قد يكون شرحي غير كافياً، لذا إذا كان لديك استفسار فاطرحه.

شكرا لك صراحة شرحلي أحدهم كيفية عمل سكانر و أنت قمت بتدعيم فهمي له

شرحك كان كافيا و مفصلا شكرا !