1. URL
kelas
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 InputStream daripada 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 File
danURL
URL
adalah serupa dengan File
atau Path
, tetapi Path
menyimpan laluan ke sumber dalam sistem fail dan URL
menyimpan laluan ke sumber di Internet.
Semua keajaiban berlaku apabila kita mendapat InputStream
objek 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 InputStream
objek. 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. URLConnection
kelas
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-resources
blok untuk pengendalian yang selamat. Dan tidak rugi untuk membungkus yang terdedah InputStream
dan OutputStream
dalam sesuatu yang lebih mudah. Contohnya, dalam PrintStream
dan 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 Files
kelas copy
. Kelas Files
mempunyai 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 URL
imej 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