1. URL
klase
Pinag-aralan namin ang pagtatrabaho sa mga stream ng I/O. Nag-aral kami ng pagtatrabaho sa mga file. Ano ang susunod nating pag-aaralan? Paano ang tungkol sa pagtatrabaho sa network, kabilang ang Internet? Mukhang may pag-asa, hindi ba?
Sa Java, ang pagtatrabaho sa Internet ay hindi mas mahirap kaysa sa pagtatrabaho sa mga file. Well, siguro konti lang.
Upang gumana sa mga mapagkukunan ng Internet, ang Java ay may espesyal na klase — URL
. Ito ay kasing simple ng isang dumi, tulad ng makikita mo ngayon.
Pagkuha ng web page
Ilang linya ng code sa tingin mo ang kailangan mong isulat upang mag-download ng ilang text file mula sa Internet at ipakita ang mga nilalaman nito sa screen? 10? 100? 1000? O baka 5?
Code | Tandaan |
---|---|
|
Gumagawa ng URL object na may path patungo sa page Kumuha ng InputStream mula sa URL object Binabasa ang lahat ng byte at nagbabalik ng array ng byte I-convert ang array sa isang string Ipakita ang string |
Ang mga nilalaman ng isang HTML file ay ipapakita sa screen:
Output ng console |
---|
|
Paghahambing ng pagtatrabaho sa File
atURL
URL
ay katulad ng File
o Path
, ngunit Path
iniimbak ang landas patungo sa isang mapagkukunan sa file system, at URL
iniimbak ang landas patungo sa isang mapagkukunan sa Internet.
Ang lahat ng magic ay nangyayari kapag nakakuha tayo ng isang InputStream
bagay salamat sa isang tawag sa openStream()
pamamaraan. Ito ay isang ordinaryong bagay, at napag-aralan na natin ito sa loob at labas. Ang lahat ay nagiging halata pagkatapos nating makuha ang InputStream
bagay. Pagkatapos ng lahat, alam na natin kung paano kumuha ng data mula dito.
Tingnan: ang unang dalawang linya lamang ang naiiba, at bahagyang lamang. At ngayon ay makikita mo na ito — ang bentahe ng standardisasyon at pagtatrabaho sa mga chain ng data stream:
Paggawa gamit ang Internet | Paggawa gamit ang isang file |
---|---|
|
|
2. URLConnection
klase
Bilang karagdagan sa simpleng pagbabasa ng data mula sa Internet, maaari rin tayong mag-upload ng data. Ang pag-upload ng data ay mas kumplikado kaysa sa pagbabasa nito. Kakailanganin mo ang ilang higit pang mga pamamaraan. Halimbawa:
Code | Tandaan |
---|---|
|
Gumawa ng URL object na may path sa page Lumikha ng two-way na koneksyon Kumuha ng output stream Maglagay ng data dito Kumuha ng input stream Magbasa ng data mula dito |
Tandaan na hindi na namin tinatawag ang url.openStream()
pamamaraan dito. Sa halip, mas mahabang ruta ang dadaan namin:
- Magtatag muna kami ng isang matatag na two-way na koneksyon gamit ang
URLConnection.openConnection()
pamamaraan - Pagkatapos ay nakakakuha kami ng isang stream upang magpadala ng data gamit ang
connection.getOutputStream()
pamamaraan at magpadala ng data sa server - Pagkatapos ay makakakuha kami ng isang stream para sa pagbabasa ng data gamit ang
connection.getInputStream()
pamamaraan at simulan ang pagbabasa ng data mula dito.
Pamamahala ng mapagkukunan
Sa mahigpit na pagsasalita, dapat nating balutin ang lahat ng mga stream sa isang try-with-resources
bloke para sa ligtas na paghawak. At hindi masakit na balutin ang hubad InputStream
at OutputStream
sa isang bagay na mas maginhawa. Halimbawa, sa PrintStream
at BufferedReader
.
Kung gagawin natin ang lahat ng iyon, magiging ganito ang hitsura ng ating code:
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. Mga halimbawa ng pagtatrabaho sa network
Mag-download tayo ng isang bagay mula sa Internet. At hindi lamang i-download ito, ngunit i-save ito sa disk.
Halimbawa, magsulat tayo ng isang programa na nagse-save ng isang imahe mula sa homepage ng Google patungo sa disk.
Sa prinsipyo, walang kumplikado dito. Sa pinakasimpleng anyo nito, ang code na ito ay magiging ganito:
Nagse-save ng file sa disk |
---|
|
Sa tulong ng unang tatlong linya, nakakatanggap kami ng stream ng data mula sa isang mapagkukunan ng Internet — mula sa isang larawan.
Sa ika-apat na linya, nilikha namin ang pangalan ng file kung saan namin ise-save ang imahe. Ang pangalan ay maaaring kahit ano, ngunit ang extension ng file ay dapat tumugma sa extension ng larawan sa Internet. Papayagan nito ang mga lokal na tumitingin ng imahe na buksan ito nang tama.
At sa wakas, ang huling linya ay isa sa mga pamamaraan Files
ng klase copy
. Ang Files
klase ay may ilan sa kanila. Ang pamamaraang ito, na ginamit namin, ay kumukuha ng byte stream ( InputStream
) bilang unang parameter nito, at bilang pangalawang parameter — ang pangalan ng file kung saan dapat isulat ang data.
Sa teoryang, kung URL
maikli ang larawan, maaaring maisulat ang code na ito sa isang linya:
Pagkopya ng data mula sa isang stream patungo sa isang file |
---|
|
Siyempre, hindi mo kailangang isulat ito nang ganito, ngunit ang halimbawang ito ay nagpapakita kung gaano maginhawa at malakas ang mga stream ng I/O sa Java.