[သင္ခန္းစာ ၁၅] [request ဆုိတာဘာလဲ ] Input libraries ေတြကုိ သံုးၿခင္း။

[သင္ခန္းစာ ၁၅] [request ဆုိတာဘာလဲ ] Input libraries ေတြကုိ သံုးၿခင္း။

အဆုိၿပဳခ်က္။ သင္ခန္းစာ ၄ မွာပါတဲ့ program ရဲ့ အဓိက elements သံုးခုကုိ နားလည္သေဘာေပါက္ပါ။

အခုေၿပာမွာကေတာ့ Input အေၾကာင္းပဲ ၿဖစ္ပါတယ္။

ကဲ ပထမဆံုး Input ကုိ သံုးၾကည့္ရေအာင္။

အခု program တစ္ခုသံုးၿပီ ေလ့လာၾကည့္ပါမယ္။

Sample 1 - StreamTest.java

import java.io.  * ;

public class StreamTest

{

    public static void main (String[] args) throws IOException         // (4)

    {

        InputStreamReader is = new InputStreamReader(System.in);       // (1)

        BufferedReader br = new BufferedReader(is);                    // (2)

        System.out.println(" Please input something.");

        String str = br.readLine();                                    // (3)

        System.out.println(str + "was input.");

    }

}

ဥပမာ ၁ ကုိ compile လုပ္ၿပီး execute လုပ္ပါ။

execute လုပ္တဲ့ အခါ ေအာက္မွာၿပထားတဲ့ message ကုိ ၿပပါလိမ့္မယ္။

ၿပီးရင္ေတာ့ characters ေတြကုိ input ထည့္လုိက္ပါ။

lesson15a

ဒီမွာေတြ့ရတဲ့ အတုိင္း “Hello, world” ကုိ ရုိက္ထည့္လုိက္ပါ။

lesson15b

Input ထည့္ထားတဲ့ character string ကုိ display ၿပေပးပါလိမ့္မယ္။ ဥပမာ ၁ က ေအာက္မွာေတြ့ရတဲ့ အရုိးရွင္းဆံုး program ၿဖစ္ပါတယ္။

Code မွာ ေတြ့ရတဲ့ အတုိင္း ၁ နဲ့ ၂ က user ကေန character string ကုိ Input လုပ္ေပးဖုိ့ ၿပင္ဆင္မွုေတြ ၿဖစ္ပါတယ္။

(၃) Character string ကုိ input လုပ္ရန္ အစိတ္အပုိင္း

နံပါတ္ ၂ မွာ တည္ေဆာက္ထားတဲ့ BufferedReader ရဲ့ instance တစ္ခုကုိ readLine method လုိ့ေခၚပါတယ္။

(အသံုးၿပဳတဲ့သူက class နဲ့ instance ကုိ နားမလည္ခဲ့ရင္ JAVA သင္ခန္းစာမ်ားရဲ့ #10 နဲ့ #11 ကုိ ဖတ္ပါ။)

BuffedReader က character string ေတြကုိ Input လုပ္ေပးမယ့္ standard class ပဲၿဖစ္ပါတယ္။

အဲဒါကုိ Java မွာ ၿပင္ဆင္ေပးထားပါတယ္။

ေနာက္ဆံုး နံပါတ္ ၄ မွာေတာ့ IOException လုိ့ေခၚတဲ့ exceptionဟာ နံပါတ္ ၃ထဲက readLine method မွာ ၿဖစ္ေပၚႏုိင္ပါတယ္။(Exception အေၾကာင္းကုိ Java သင္ခန္းစာ ၁၄ မွာ ၿပန္လည္ ဖတ္ရွုႏုိင္ပါတယ္။) နံပါတ္ ၁ နဲ့ ၄ ကုိ နားလည္ရင္ user ဆီက character ကုိ လက္ခံၿပီး String အၿဖစ္ သိမ္းထားပါမယ္။

စကားမစပ္ အခု input အေၾကာင္းကုိ နားလည္သြားၿပီဆုိေတာ့ input တည္ေဆာက္ပံုကုိ အေသးစိပ္ ေလ့လာၾကည့္ရေအာင္။ အထက္မွာ မရွင္းၿပခဲ့တဲ့ ဥပမာရဲ့ လ်ွဳိ့၀ွက္ခ်က္ကုိေတာ့ ၁ နဲ့ ၂ မွာ ၀ွက္ထားပါတယ္။

(1) InputStreamReader လုိ့ေခၚတဲ့ class တစ္ခုကုိ create လုပ္ပါ။

(2) BufferReader လုိ့ ေခၚတဲ့ class တစ္ခုကုိ create လုပ္ပါ။

အဲဒီ့ class ေတြ အေၾကာင္းကုိ ရွင္းၿပပါမယ္။

နံပါတ္ ၁ ရဲ့ process ကေတာ့ “Specified location မွ character တစ္ခုကုိ ဖတ္ၿခင္း”ပဲ ၿဖစ္ပါတယ္။ “Specified location” ဆုိတာ System.in နဲ့ တူညီပါတယ္။

ပထမဆံုး System.in ကုိ ၿမင္ေတြ့မွာပါ။ ဒါေပမယ့္ System.out ရဲ့ ဆန့္က်င္ဘက္ အဓိပါၸယ္ၿဖစ္တဲ့ screen မွ input data ေတြကုိ အသံုးၿပဳဖုိ့ရန္ object တစ္ခု ၿဖစ္ပါတယ္။

Java ရဲ့ reference အားၿဖင့္ InputStreamReader ကုိ ရွာၾကည့္ရေအာင္။

(Reference မွာ ဘယ္လုိရွာရလဲ ေမ့ေနၿပီဆိုရင္ေတာ့ သင္ခန္းစာ ၈ ကုိ ၿပန္ၾကည့္ရေအာင္။) InputStreamReader မွာ read လုိ့ေခၚတဲ့ method တစ္ခုရွိပါတယ္။ သူရဲ့ return value ကေတာ့ “int”ပါ။ တစ္နည္းအားၿဖင့္ InputStreamReader က character တစ္လံုးတည္းကုိသာ ဖတ္ႏုိင္ၿပီး character code ကုိ return ၿပန္ေပးပါတယ္။

Character code ဆုိတာ computer ထဲမွာ အသံုးၿပဳတဲ့ စာေၾကာင္းကုိ ေဖာ္ၿပတဲ့ ကိန္းဂဏန္းႏွင့္ သက္ဆုိင္တဲ့ တန္ဖုိးေတြပဲ ၿဖစ္ပါတယ္။

List 2 - InputTest.java

import java.io.  * ;

public class InputTest

{

    public static void main (String[] args) throws IOException

    {

        InputStreamReader is = new InputStreamReader(System.in);

        System.out.println("Please input something.");

        int charCode = is.read();

        System.out.println(charCode + "was input.");

    }

}

Compile နဲ့ Execute လုပ္ၿပီးရင္ေတာ့ program က user ကုိ input ေတာင္းပါလိမ့္မယ္။

lesson15c

a ကုိရုိက္ထည့္ၿပီးေတာ့ Enter ကုိ ႏွိပ္လုိက္ပါ။

lesson15d

a ကုိရုိက္ထည့္လုိက္တဲ့အခါ a ရဲ့ Char Code ၿဖစ္တဲ့ 97 ကုိ ထုတ္ေပးပါတယ္။

အခု အေၿခအေနမွာ အဲ့ဒီလုိသံုးဖုိ့ နည္းနည္း ခက္ခဲပါတယ္။

အဲဒါေၾကာင့္ ဥပမာ ၂ မွာၿပထားတဲ့ အတုိင္း BufferReader ကုိသံုးထားတာပါ။

BufferReader က argument တစ္ခု အေနနဲ့ InputStreamReader ကုိ ၿဖတ္ၿပီး character string ေတြကုိ အက်ဳိးရွိရွိ input လုပ္ႏုိင္ပါတယ္။

စာေၾကာင္း ၁မွာ create လုပ္ထားတဲ့ instance “is” ကုိ စာေၾကာင္း ၂ ရဲ့ BufferedReader ရဲ့ “new” မွာ argument အေနနဲ့ ထည့္္ေပးပါ။

ဒါနဲ့ အဲဒီလုိမ်ဳိး အသံုးၿပဳပံုကုိ “wrap” လုိ့ေခၚတယ္။ ဘာၿဖစ္လုိ့လဲဆုိေတာ့ InputStreamReader ကုိ BufferedReader ကုိ အသံုးၿပဳဖုိ့ wrap လုပ္ထားလုိ့ ၿဖစ္ပါတယ္။

ေနာက္ဆံုးအေနနဲ့ကေတာ့ BufferedReader မွာ readLine ကုိ အသံုးၿပဳတဲ့ အခါ

constructor တစ္ခုအေနနဲ့ specified လုပ္ထားတဲ့ InputStreamReader ကုိအသံုးၿပဳၿပီး တစ္ေၾကာင္းစီရဲ့ character string ကုိ input လုပ္ရန္ ၿဖစ္ႏုိင္ပါတယ္။

၃. Class ထဲမွ ၿဖန့္ေ၀ၿခင္း အခန္းက႑

အခု keyboard ကေန input လုပ္တဲ့ method ကုိ နားလည္သြားၿပီ ထင္ပါတယ္။ ဒါေပမယ့္ အခု ေအာက္မွာၿပထားတဲ့ ေမးခြန္းေတြကုိ ေမးခ်င္တဲ့ သူေတြရွိႏုိင္ပါတယ္။

ဘာေၾကာင့္အဲလုိ အခက္အခဲမ်ဳိး ၿဖစ္တာပါလဲ။

Output မွာေတာ့ System.out.println ကုိပဲ ေခၚရမွာပါ။

ဒါေပမယ့္ input မွာေတာ့ သံုးႏုိင္တာ အမ်ားၾကီးရွိတဲ့အတြက္ နားလည္ဖုိ့ေတာ့ မလြယ္ကူပါဘူး။

ေနာက္ထပ္အေနနဲ့ အခုဒီသင္ခန္းစာမွာ မရွင္းၿပထားေပမယ့္ input နဲ့ output အတြက္ InputStreamReader နဲ့ BufferedReader အၿပင္ အၿခားclass အမ်ားၾကီးရွိပါတယ္။(အဲဒါေတြအားလံုးကုိ java.io package က စုစည္းထားပါတယ္။)

အဲဒီလုိ class ေတြ အမ်ားၾကီး ရွိေစရန္ reason ေတြလည္း အမ်ားၾကီးရွိပါတယ္။

*class တစ္ခုစီရဲ့ function နဲ့ အခန္းက႑ကုိ ရွင္းလင္းလြယ္ကူေစရန္။

*ရွင္းလင္းလြယ္ကူေစေသာ classေတြ ရဲ ့combination မွာ အသံုးၿပဳၿခင္းအားၿဖင့္ အၿခားအရာ အမ်ားၾကီးကုိ လုပ္ႏုိင္ေစရန္။

ဥပမာအားၿဖင့္ InputStreamReader မွာ character ၁ခုကုိ input လုပ္ေပးတဲ့ ရုိးရွင္းတဲ့ function တစ္ခုသာရွိပါတယ္။

ၿပီးေတာ့ BufferedReader မွာဆုိရင္ ဘယ္လုိ input လုပ္ရမယ္ဆုိတဲ့ function မရွိပါဘူး။ဒါေပမယ့္ InputStreamReader class ကုိ သံုးၿပီး 1 line unit ကုိ input လုပ္ႏုိင္ပါတယ္။အဲဒါကေတာ့ အသံုးၿပဳၿခင္းကုိ တိုးတက္ေစတဲ့ အခ်က္ပဲၿဖစ္ပါတယ္။

စိတ္၀င္စားတယ္ဆုိရင္ေတာ့ API reference ရဲ့ java.io package အပုိင္း ရွာႏုိင္ပါတယ္။

အဲဒီ့မွာဆုိရင္ class ေတြအမ်ားၾကီးကုိ မိတ္ဆက္ေပးထားပါတယ္။

အခုနားလည္သြားပါၿပီလား။

ဘာလုိ့လဲဆုိေတာ့ ေနာက္ဆံုး အပုိင္းၿဖစ္တဲ့ object oriented အပုိင္းက ပုိၿပီးခက္လုိ့ပါ။

အဲဒါေၾကာင့္ ဒီအခ်က္ေတြကုိ မွတ္ထားေပးေစခ်င္ပါတယ္။

အခု ဒီသင္ခန္းစာကုိ အက်ဥ္းခ်ဳပ္နဲ့ အဆံုးသတ္ပါမယ္။

…အက်ဥ္းခ်ဳပ္…

၁။ JAVA ကုိ သံုးၿပီး keyboard ကေန character string ကုိ input လုပ္တဲ့ method ကုိ နားလည္ပါ။

၂။ InputStreamReader နဲ့ BufferReader ရဲ့ အခန္းက႑ကုိ နားလည္ပါ။

၃။ Class ရဲ့ အမ်ဳိးမ်ဳိးေသာ အခန္းက႑ေတြ ေပါင္းစည္းၿခင္းမွာ java.io.package ကုိ အသံုးၿပဳပါ။

ေနာက္တစ္ၾကိမ္ ထပ္ေတြ့ၾကပါစုိ့။

ဆက္ရန္။ အခန္း ၁၆.


Check our Facebook Page!