0Pricing
Java Academy · درس

بديل BufferedReader

قراءة أسرع من وحدة التحكم

بديل BufferedReader درس مجاني في Java Academy على CoddyKit. هذا هو الدرس 4 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Java Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Java Academy 4 دروس في المجموع.

قارئ أسرع

يتميز Scanner بسهولة الاستخدام، لكنه بطيء نسبيًا عند التعامل مع المدخلات الكبيرة. وللقراءة بكميات كبيرة، يكون BufferedReader من java.io أسرع بكثير لأنه يقرأ كتلًا كبيرة دفعة واحدة.

إنشاء BufferedReader

ضع InputStreamReader الذي يحيط بـ System.in داخل BufferedReader. نستخدم StringReader هنا لكي تعمل الأمثلة دون إدخال مكتوب.

import java.io.BufferedReader;
import java.io.StringReader;
import java.io.IOException;

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader reader = new BufferedReader(new StringReader("Hello"));
        System.out.println(reader.readLine());
        reader.close();
    }
}

تعيد readLine قيمة من نوع String

تقرأ readLine() سطرًا كاملًا باعتباره String، من دون مُنهي السطر. وبخلاف Scanner، تعيد دائمًا نصًا، لذلك عليك تحليل الأرقام بنفسك.

import java.io.BufferedReader;
import java.io.StringReader;
import java.io.IOException;

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader reader = new BufferedReader(new StringReader("first\nsecond"));
        System.out.println(reader.readLine());
        System.out.println(reader.readLine());
        reader.close();
    }
}

نهاية الإدخال هي null

عند عدم وجود مزيد من الإدخال، تُرجع readLine() القيمة null. وهذه هي الإشارة إلى وجوب التوقف عن القراءة.

import java.io.BufferedReader;
import java.io.StringReader;
import java.io.IOException;

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader reader = new BufferedReader(new StringReader("one line"));
        System.out.println(reader.readLine());
        System.out.println(reader.readLine());
        reader.close();
    }
}

قراءة جميع الأسطر

كرّر التنفيذ ما دامت نتيجة readLine() لا تساوي null لمعالجة كل سطر من الإدخال.

import java.io.BufferedReader;
import java.io.StringReader;
import java.io.IOException;

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader reader = new BufferedReader(new StringReader("a\nb\nc"));
        String line;
        while ((line = reader.readLine()) != null) {
            System.out.println("> " + line);
        }
        reader.close();
    }
}

تحليل الأرقام بنفسك

بما أن readLine تعيد نصًا، حوّله باستخدام Integer.parseInt عندما تحتاج إلى رقم.

import java.io.BufferedReader;
import java.io.StringReader;
import java.io.IOException;

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader reader = new BufferedReader(new StringReader("42"));
        int n = Integer.parseInt(reader.readLine().trim());
        System.out.println(n * 2);
        reader.close();
    }
}

تقسيم السطر إلى رموز

لقراءة عدة أرقام من سطر واحد، قسّم السطر باستخدام split وحلّل كل جزء.

import java.io.BufferedReader;
import java.io.StringReader;
import java.io.IOException;

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader reader = new BufferedReader(new StringReader("10 20 30"));
        String[] parts = reader.readLine().split(" ");
        int sum = 0;
        for (String p : parts) {
            sum += Integer.parseInt(p);
        }
        System.out.println(sum);
        reader.close();
    }
}

الاستثناءات التي يجب التحقق منها

تُعلن readLine عن الاستثناء IOException الذي يجب التحقق منه، لذا عليك إما الإعلان عن throws IOException أو إحاطة الاستدعاء بكتلة try-catch. ولا يتطلب Scanner ذلك.

import java.io.BufferedReader;
import java.io.StringReader;
import java.io.IOException;

public class Main {
    public static void main(String[] args) {
        try {
            BufferedReader reader = new BufferedReader(new StringReader("data"));
            System.out.println(reader.readLine());
            reader.close();
        } catch (IOException e) {
            System.out.println("Read error");
        }
    }
}

الموارد ضمن try-with-resources

استخدم try-with-resources حتى يُغلق القارئ تلقائيًا، حتى عند حدوث استثناء.

import java.io.BufferedReader;
import java.io.StringReader;
import java.io.IOException;

public class Main {
    public static void main(String[] args) throws IOException {
        try (BufferedReader reader = new BufferedReader(new StringReader("auto-closed"))) {
            System.out.println(reader.readLine());
        }
    }
}

مثال فعلي على System.in

لقراءة إدخال فعلي من لوحة المفاتيح، أحط System.in. شغّل هذا المثال محليًا واكتب سطرًا ثم اضغط Enter.

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
        System.out.print("Enter text: ");
        String input = reader.readLine();
        System.out.println("You typed: " + input);
    }
}

Scanner مقارنةً بـ BufferedReader

اختر Scanner للسهولة ولتحليل الأرقام بسهولة. واختر BufferedReader للسرعة مع المدخلات الكبيرة، مع تقبّل أنك ستتولى تحليل القيم ومعالجة IOException بنفسك.

تحقق سريع

اختبر معرفتك بـ BufferedReader.

مراجعة

لقد تعلمت البديل BufferedReader:

  • ضع System.in داخل InputStreamReader ثم داخل BufferedReader
  • تُرجع readLine() سطرًا كاملًا، أو null عند نهاية الإدخال
  • حلّل الأرقام بنفسك باستخدام Integer.parseInt وsplit
  • ترمي الاستثناء IOException الذي يجب التحقق منه، لذا عليك معالجته أو الإعلان عنه
  • فضّله على Scanner عند التعامل مع إدخال كبير وحساس للأداء

الأسئلة الشائعة

هل درس «بديل BufferedReader» مجاني؟

نعم — نص درس «بديل BufferedReader» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Java Academy، انتقل إلى CoddyKit PRO. تتضمن دورة Java Academy 4 دروس في المجموع.

ماذا ستتعلم في «بديل BufferedReader»؟

قراءة أسرع من وحدة التحكم تتمرن على Java Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.

هل أحتاج إلى خبرة سابقة لأبدأ Java Academy؟

لا تُشترط خبرة سابقة. Java Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 4 من أصل 4.

كم من الوقت يستغرق درس «بديل BufferedReader»؟

معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.

هل يمكنني كتابة وتشغيل أكواد في درس Java Academy هذا؟

نعم. كل درس في Java Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.

جميع الدروس في هذه الدورة

  1. قراءة الإدخال باستخدام Scanner
  2. قراءة الأعداد والأسطر
  3. التحقّق من إدخال المستخدم
  4. بديل BufferedReader
← العودة إلى Java Academy