CodeGym /Kurslar /Java SELF AZ /Şəbəkə ilə iş

Şəbəkə ilə iş

Java SELF AZ
Səviyyə , Dərs
Mövcuddur

1. URL sinifi

Input-output axınları ilə işi öyrənmişik, fayllarla işi öyrənmişik, bəs sonra nəyi öyrənək? Gəlin şəbəkə və internetlə işi öyrənək. Vədedici səslənir, elə deyilmi?

Java-da internetlə işləmək fayllarla işləməkdən çətin deyil. Bəlkə də cüzi fərqlə.

Java-da internet resursları ilə işləmək üçün xüsusi bir sinif var - URL. O qədər sadədir ki, az qala skamyadır, buna indi özünüz şahid olacaqsınız.

İnternetdən səhifə götürmək

Necə düşünürsünüz, internetdən hansısa mətn faylını yükləmək və onu ekranda göstərmək üçün neçə kod sətri yazmaq lazımdır? 10? 100? 1000? Yoxsa 5?

Kod Qeydlər
URL url = new URL("https://codegym.com");
InputStream input = url.openStream();
byte[] buffer = input.readAllBytes();
String str = new String(buffer);
System.out.println(str);
URL obyektini səhifənin yoluna uyğun olaraq yaradılır
İnternet obyektindən InputStream götürülür
Bütün baytlar oxunur və bayt massivi qaytarılır
Massiv mətnə çevrilir
Mətn ekranda göstərilir

Ekranda HTML-faylın tərkibi göstəriləcək:

Ekranda çıxış
<!DOCTYPE html><html lang="az" class="light"><head>
    <meta charset="utf-8″>
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1″>
    ...

FileURL ilə işin müqayisəsi

URL - File ya da Path-in analoqudur, sadəcə Path fayl sistemində resursa yol göstərir, URL isə internetdə resursa yol göstərir.

Bütün sehr, yalnız openStream() metodunun bir çağırışı ilə InputStream tipli obyekt əldə etdiyimiz zaman baş verir. Bu standart bir obyektə çevrilir və biz artıq bunu başa düşmüşük. InputStream tipli obyekt alındıqdan sonra hər şey aydın olur. Çünki, məlumatları necə oxuyacağımızı artıq bilirik.

Müqayisə edin: yalnızca ilk iki sətir fərqlənir, o da az. Bu, standartlaşdırmanın və məlumat axınları ilə işləməyin üstünlükləridir:

İnternetlə iş Fayllarla iş
URL url = new URL("https://codegym.com");
InputStream input = url.openStream(); 
byte[] buffer = input.readAllBytes();
String str = new String(buffer);
System.out.println(str);
File file = new File("c:\\readme.txt");
InputStream input = new FileInputStream(file);

byte[] buffer = input.readAllBytes();
String str = new String(buffer);
System.out.println(str);


2. URLConnection sinfi

İnternetdən məlumatları oxumaqdan başqa, ora məlumat yükləyə bilərik. Məlumat yükləmə prosesi oxumaqdan qat-qat daha çətindir. Bir neçə əlavə metod istifadə etməli olacaqsınız. Nümunə:

Kod Qeyd
URL url = new URL("https://codegym.com");
URLConnection connection = url.openConnection();

// məlumat göndərmək üçün axını alırıq
OutputStream output = connection.getOutputStream();
output.write(1); // məlumat göndəririk

// məlumat oxumaq üçün axını alırıq
InputStream input = connection.getInputStream();
int data = input.read(); // məlumat oxuyuruq
URL obyektini səhifənin yoluna görə yaradırıq
İki tərəfli bir bağlantı yaradırıq


Çıxış axını alırıq
Axına məlumat yazırıq


Giriş axını alırıq
Axından məlumat oxuyuruq

Burada artıq url.openStream() metodunu çağırmadığımıza diqqət yetirin. Bunun əvəzinə daha uzun yola baş vururuq:

  • Əvvəlcə URLConnection openConnection() metodundan istifadə edərək stabil iki tərəfli bağlantı qururuq
  • Sonra connection.getOutputStream() metodu ilə məlumat göndərmək üçün axını alırıq və onları serverə ötürürük
  • Sonra connection.getInputStream() metodu ilə məlumat oxumaq üçün axını alırıq və oradan oxumağa başlayırıq.

Resursların idarə edilməsi

Düzünü desək, bütün axınları try-with-resources daxilində istifadə etməliyik ki, bu daha təhlükəsiz olsun. Həmçinin boş InputStreamOutputStream-ləri daha rahat bir şeyə bükmək zərər verməzdi. Məsələn, PrintStreamBufferedReader.

Bunların hamısını etsək, kodumuz belə bir vəziyyətdə olacaq:

URL url = new URL("https://codegym.com");
URLConnection connection = url.openConnection(); // məlumat göndəririk
try (OutputStream output = connection.getOutputStream();
   PrintStream sender = new PrintStream(output))
{
   sender.println("Salam");
}

// məlumat oxuyuruq
try(InputStream input = connection.getInputStream();
   BufferedReader reader = new BufferedReader(new InputStreamReader(input)))
{
   while (reader.ready())
      System.out.println(reader.readLine());
}

3. Şəbəkə ilə iş nümunələri

Bəlkə internetdən nəsə yükləyək? Təkcə yükləməyək, həm də diskin üzərinə saxlayaq.

Məsələn, gəlin elə bir proqram yazaq ki, Google-un əsas səhifəsindən bir şəkli diskin üzərinə saxlasın.

Əslində, bu, çox çətin deyil. Ən sadə interpretasiyada kod bu cür görünəcək:

Faylı diskin üzərinə saxlamaq
String image = "https://www.google.com/images/branding/googlelogo/1x/googlelogo_color_272x92dp.png";
URL url = new URL(image);
InputStream input = url.openStream();

Path path = Path.of("c:\\GoogleLogo.png");
Files.copy(input, path);

İlk üç sətir vasitəsilə internet resursundan — şəkildən məlumat axını alırıq.

Dördüncü sətirdə şəkli saxlamaq üçün fayl adı yaradılır. Ad istənilən ola bilər, amma faylın genişlənməsi internetdəki şəkilin genişlənməsi ilə uyğun olmalıdır. Beləliklə, yerli şəkil baxıcı proqramlar onu düzgün aça biləcək.

Və nəhayət, sonuncu sətir — bu, Files sinfinin copy metodlarından biridir. Files sinfinin bir neçə belə metodu var. Bizim istifadə etdiyimiz metod birinci parametr kimi məlumat mənbəyini — byte axını (InputStream), ikinci parametr kimi isə məlumatın yazılacağı faylın adını qəbul edir.

Nəzəri olaraq, əgər şəkilin URL-i çox qısa olsaydı, bu kodu ümumiyyətlə bir sətirdə yazmaq olardı:

Axından fayla məlumatın kopiyası
Files.copy(
   new URL("https://www.google.com/logo.png").openStream(),
   Path.of("c:\\GoogleLogo.png")
);

Belə yazmaq, əlbəttə ki, lazım deyil, amma bu nümunə göstərir ki, Java dili ilə giriş-çıxış axınları nə qədər rahat və güclüdür.



Şərhlər
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION