1. URLক্লাস

আমরা I/O স্ট্রিমগুলির সাথে কাজ করার বিষয়ে অধ্যয়ন করেছি৷ আমরা ফাইলের সাথে কাজ অধ্যয়ন করেছি. আমরা পরবর্তী কি অধ্যয়ন করা উচিত? ইন্টারনেট সহ নেটওয়ার্কের সাথে কাজ করার বিষয়ে কি? প্রতিশ্রুতিশীল শোনাচ্ছে, তাই না?

জাভাতে, ইন্টারনেটের সাথে কাজ করা ফাইলগুলির সাথে কাজ করার চেয়ে বেশি কঠিন নয়। ওয়েল, সম্ভবত শুধু সামান্য বিট.

ইন্টারনেট সংস্থানগুলির সাথে কাজ করার জন্য, জাভার একটি বিশেষ শ্রেণী রয়েছে — URL. এটি একটি মলের মতো সহজ, যেমন আপনি এখন দেখতে পাবেন।

একটি ওয়েব পেজ হচ্ছে

ইন্টারনেট থেকে কিছু টেক্সট ফাইল ডাউনলোড করতে এবং এর বিষয়বস্তু স্ক্রিনে প্রদর্শন করতে আপনাকে কত লাইনের কোড লিখতে হবে বলে আপনি মনে করেন? 10? 100? 1000? বা হয়তো 5?

কোড বিঃদ্রঃ
URL url = new URL("https://codegym.cc");
InputStream input = url.openStream();
byte[] buffer = input.readAllBytes();
String str = new String(buffer);
System.out.println(str);
পৃষ্ঠার পথ সহ একটি URL অবজেক্ট তৈরি করে URL অবজেক্ট থেকে
একটি পায় সমস্ত বাইট পড়ে এবং বাইটের একটি অ্যারে ফেরত দেয় অ্যারেটিকে একটি স্ট্রিংয়ে রূপান্তর করে স্ট্রিংটি প্রদর্শন করুন InputStream


একটি HTML ফাইলের বিষয়বস্তু পর্দায় প্রদর্শিত হবে:

কনসোল আউটপুট
<!DOCTYPE html><html lang="ru" 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″>
    ...

Fileএবং সঙ্গে কাজ তুলনাURL

URLঅনুরূপ Fileবা Path, কিন্তু Pathফাইল সিস্টেমে একটি সম্পদের পথ সংরক্ষণ করে, এবং URLইন্টারনেটে একটি সম্পদের পথ সংরক্ষণ করে।

সমস্ত জাদু ঘটবে যখন আমরা একটি InputStreamবস্তু পাই পদ্ধতিতে একটি একক কলের জন্য ধন্যবাদ openStream()। এটি একটি সাধারণ বস্তু, এবং আমরা ইতিমধ্যে এটি ভিতরে এবং বাইরে অধ্যয়ন করেছি। বস্তুটি পাওয়ার পর সবকিছু স্পষ্ট হয়ে যায় InputStream। সব পরে, আমরা ইতিমধ্যে এটি থেকে তথ্য পেতে কিভাবে জানি.

একবার দেখুন: শুধুমাত্র প্রথম দুটি লাইন ভিন্ন, এবং শুধুমাত্র সামান্য. এবং এখন আপনি এটি দেখতে পাচ্ছেন — স্ট্যান্ডার্ডাইজেশনের সুবিধা এবং ডেটা স্ট্রিমের চেইনগুলির সাথে কাজ করা:

ইন্টারনেট নিয়ে কাজ করা একটি ফাইল নিয়ে কাজ করা
URL url = new URL("https://codegym.cc");
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ক্লাস

ইন্টারনেট থেকে ডেটা পড়ার পাশাপাশি, আমরা ডেটা আপলোডও করতে পারি। এটি পড়ার চেয়ে ডেটা আপলোড করা অনেক বেশি জটিল। আপনার আরও কয়েকটি পদ্ধতির প্রয়োজন হবে। উদাহরণ স্বরূপ:

কোড বিঃদ্রঃ
URL url = new URL("https://codegym.cc");
URLConnection connection = url.openConnection();

// Get a stream for sending data
OutputStream output = connection.getOutputStream();
output.write(1); // Send data

// Get a stream for reading data
InputStream input = connection.getInputStream();
int data = input.read(); // Read data
পৃষ্ঠার পথ সহ একটি URL অবজেক্ট তৈরি করুন
একটি দ্বিমুখী সংযোগ তৈরি করুন


একটি আউটপুট স্ট্রীম পান
এতে ডেটা রাখুন


একটি ইনপুট স্ট্রীম পান
এটি থেকে ডেটা পড়ুন

url.openStream()মনে রাখবেন যে আমরা এখানে পদ্ধতিটিকে আর কল করি না । পরিবর্তে, আমরা একটি দীর্ঘ পথ গ্রহণ করি:

  • URLConnection.openConnection()আমরা প্রথমে পদ্ধতি ব্যবহার করে একটি স্থিতিশীল দ্বি-মুখী সংযোগ স্থাপন করি
  • তারপরে আমরা পদ্ধতিটি ব্যবহার করে ডেটা প্রেরণের জন্য একটি স্ট্রিম পাই connection.getOutputStream()এবং সার্ভারে ডেটা প্রেরণ করি
  • তারপরে আমরা পদ্ধতিটি ব্যবহার করে ডেটা পড়ার জন্য একটি স্ট্রিম পাই connection.getInputStream()এবং এটি থেকে ডেটা পড়া শুরু করি।

সম্পদ ব্যবস্থাপনা

try-with-resourcesকঠোরভাবে বলতে গেলে, নিরাপদ পরিচালনার জন্য আমাদের সমস্ত স্ট্রীমকে একটি ব্লকে মোড়ানো উচিত । এবং এটি খালি InputStreamএবং OutputStreamআরো সুবিধাজনক কিছু মোড়ানো আঘাত করবে না। উদাহরণস্বরূপ, in PrintStreamএবং BufferedReader.

যদি আমরা এটি সব করি, তাহলে আমাদের কোডটি এরকম কিছু দেখাবে:

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

// Send data
try (OutputStream output = connection.getOutputStream();
   PrintStream sender = new PrintStream(output))
{
   sender.println("Hello");
}

// Read data
try(InputStream input = connection.getInputStream();
   BufferedReader reader = new BufferedReader(new InputStreamReader(input)))
{
   while (reader.ready())
      System.out.println(reader.readLine());
}

3. নেটওয়ার্কের সাথে কাজ করার উদাহরণ

ইন্টারনেট থেকে কিছু ডাউনলোড করা যাক। এবং শুধু এটি ডাউনলোড করবেন না, তবে এটি ডিস্কে সংরক্ষণ করুন।

উদাহরণস্বরূপ, আসুন একটি প্রোগ্রাম লিখি যা Google হোমপেজ থেকে ডিস্কে একটি চিত্র সংরক্ষণ করে।

নীতিগতভাবে, এখানে জটিল কিছু নেই। এর সহজতম আকারে, এই কোডটি দেখতে এইরকম হবে:

ডিস্কে একটি ফাইল সংরক্ষণ করা হচ্ছে
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);

প্রথম তিনটি লাইনের সাহায্যে, আমরা একটি ইন্টারনেট সংস্থান থেকে - একটি ছবি থেকে একটি ডেটা স্ট্রিম পাই৷

চতুর্থ লাইনে, আমরা ফাইলটির নাম তৈরি করি যেখানে আমরা ছবিটি সংরক্ষণ করব। নাম যেকোনো কিছু হতে পারে, কিন্তু ফাইল এক্সটেনশন অবশ্যই ইন্টারনেটে ছবির এক্সটেনশনের সাথে মিলবে। এটি স্থানীয় চিত্র দর্শকদের এটি সঠিকভাবে খুলতে অনুমতি দেবে।

Filesএবং অবশেষে, শেষ লাইনটি ক্লাসের copyপদ্ধতিগুলির মধ্যে একটি । ক্লাস Filesতাদের বেশ কিছু আছে. এই পদ্ধতিটি, যা আমরা ব্যবহার করেছি, একটি বাইট স্ট্রীম ( ) এর প্রথম প্যারামিটার হিসাবে নেয় InputStreamএবং দ্বিতীয় প্যারামিটার হিসাবে — ফাইলের নাম যেখানে ডেটা লেখা উচিত।

তাত্ত্বিকভাবে, যদি URLচিত্রটি সংক্ষিপ্ত হয়, তবে এই কোডটি এমনকি একটি লাইনে লেখা যেতে পারে:

একটি স্ট্রীম থেকে একটি ফাইলে ডেটা অনুলিপি করা হচ্ছে
Files.copy(
   new URL("https://www.google.com/logo.png").openStream(),
   Path.of("c:\\GoogleLogo.png")
);

অবশ্যই, আপনাকে এটি এভাবে লিখতে হবে না , তবে এই উদাহরণটি জাভাতে কতটা সুবিধাজনক এবং শক্তিশালী I/O স্ট্রীম তা প্রদর্শন করে।