1. URLkelas
Kami telah belajar bekerja dengan aliran I/O. Kami telah belajar bekerja dengan fail. Apa yang patut kita kaji seterusnya? Bagaimana pula dengan bekerja dengan rangkaian, termasuk Internet? Bunyi menjanjikan, bukan?
Di Java, bekerja dengan Internet tidak lebih sukar daripada bekerja dengan fail. Nah, mungkin hanya sedikit.
Untuk bekerja dengan sumber Internet, Java mempunyai kelas khas — URL. Ia semudah najis, seperti yang anda akan lihat sekarang.
Mendapatkan halaman web
Berapa banyak baris kod yang anda fikir anda perlu tulis untuk memuat turun beberapa fail teks dari Internet dan memaparkan kandungannya pada skrin? 10? 100? 1000? Atau mungkin 5?
| Kod | Catatan |
|---|---|
|
Mencipta objek URL dengan laluan ke halaman Mendapatkan InputStreamdaripada objek URL Membaca semua bait dan mengembalikan tatasusunan bait Menukar tatasusunan kepada rentetan Paparkan rentetan |
Kandungan fail HTML akan dipaparkan pada skrin:
| Output konsol |
|---|
|
Membandingkan bekerja dengan FiledanURL
URLadalah serupa dengan Fileatau Path, tetapi Pathmenyimpan laluan ke sumber dalam sistem fail dan URLmenyimpan laluan ke sumber di Internet.
Semua keajaiban berlaku apabila kita mendapat InputStreamobjek terima kasih kepada satu panggilan ke openStream()kaedah tersebut. Ini adalah objek biasa, dan kami telah mengkajinya di dalam dan luar. Segala-galanya menjadi jelas selepas kita mendapat InputStreamobjek. Lagipun, kita sudah tahu bagaimana untuk mendapatkan data daripadanya.
Sila lihat: hanya dua baris pertama berbeza, dan hanya sedikit. Dan kini anda boleh melihatnya — kelebihan penyeragaman dan bekerja dengan rangkaian aliran data:
| Bekerja dengan Internet | Bekerja dengan fail |
|---|---|
|
|
2. URLConnectionkelas
Selain hanya membaca data dari Internet, kita juga boleh memuat naik data. Memuat naik data adalah lebih rumit daripada membacanya. Anda akan memerlukan beberapa kaedah lagi. Sebagai contoh:
| Kod | Catatan |
|---|---|
|
Cipta objek URL dengan laluan ke halaman Cipta sambungan dua hala Dapatkan aliran output Letakkan data di dalamnya Dapatkan aliran input Baca data daripadanya |
Ambil perhatian bahawa kami tidak lagi memanggil url.openStream()kaedah di sini. Sebaliknya, kami mengambil laluan yang lebih panjang:
- Kami mula-mula mewujudkan sambungan dua hala yang stabil menggunakan
URLConnection.openConnection()kaedah tersebut - Kemudian kami mendapat aliran untuk menghantar data menggunakan
connection.getOutputStream()kaedah dan menghantar data ke pelayan - Kemudian kami mendapat aliran untuk membaca data menggunakan
connection.getInputStream()kaedah dan mula membaca data daripadanya.
Pengurusan sumber
Tegasnya, kita harus membalut semua aliran dalam satu try-with-resourcesblok untuk pengendalian yang selamat. Dan tidak rugi untuk membungkus yang terdedah InputStreamdan OutputStreamdalam sesuatu yang lebih mudah. Contohnya, dalam PrintStreamdan BufferedReader.
Jika kita melakukan semua itu, maka kod kita akan kelihatan seperti ini:
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. Contoh bekerja dengan rangkaian
Mari muat turun sesuatu daripada Internet. Dan bukan sahaja memuat turunnya, tetapi menyimpannya ke cakera.
Sebagai contoh, mari tulis program yang menyimpan imej dari halaman utama Google ke cakera.
Pada dasarnya, tidak ada yang rumit di sini. Dalam bentuk yang paling mudah, kod ini akan kelihatan seperti ini:
| Menyimpan fail ke cakera |
|---|
|
Dengan bantuan tiga baris pertama, kami menerima aliran data daripada sumber Internet — daripada gambar.
Dalam baris keempat, kami mencipta nama fail yang akan kami simpan imej. Nama boleh apa-apa, tetapi sambungan fail mesti sepadan dengan sambungan gambar di Internet. Itu akan membolehkan penonton imej tempatan membukanya dengan betul.
Dan akhirnya, baris terakhir adalah salah satu kaedah Fileskelas copy. Kelas Filesmempunyai beberapa daripadanya. Kaedah ini, yang kami gunakan, mengambil aliran bait ( InputStream) sebagai parameter pertamanya, dan sebagai parameter kedua — nama fail tempat data harus ditulis.
Secara teorinya, jika URLimej itu pendek, maka kod ini juga boleh ditulis dalam satu baris:
| Menyalin data daripada aliran ke fail |
|---|
|
Sudah tentu, anda tidak perlu menulisnya seperti ini, tetapi contoh ini menunjukkan betapa mudah dan berkuasa aliran I/O di Jawa.
GO TO FULL VERSION