1. URL
ชั้นเรียน
เราได้ศึกษาการทำงานกับสตรีม I/O เราได้ศึกษาการทำงานกับไฟล์ เราควรเรียนอะไรต่อไปดี? แล้วการทำงานกับเครือข่ายรวมถึงอินเทอร์เน็ตล่ะ? ฟังดูดีใช่ไหม?
ใน Java การทำงานกับอินเทอร์เน็ตนั้นไม่ยากไปกว่าการทำงานกับไฟล์ ก็อาจจะเพียงเล็กน้อย
ในการทำงานกับแหล่งข้อมูลทางอินเทอร์เน็ต Java มีคลาสพิเศษURL
— มันง่ายเหมือนอุจจาระอย่างที่คุณเห็นในตอนนี้
รับทำเว็บเพจ
คุณคิดว่าต้องเขียนโค้ดกี่บรรทัดเพื่อดาวน์โหลดไฟล์ข้อความจากอินเทอร์เน็ตและแสดงเนื้อหาบนหน้าจอ 10? 100? 1,000? หรืออาจจะ 5?
รหัส | บันทึก |
---|---|
|
สร้างวัตถุ URL ที่มีเส้นทางไปยังหน้า รับ InputStream จากวัตถุ URL อ่านไบต์ทั้งหมดและส่งกลับอาร์เรย์ของไบต์ แปลงอาร์เรย์เป็นสตริง แสดงสตริง |
เนื้อหาของไฟล์ HTML จะแสดงบนหน้าจอ:
เอาต์พุตคอนโซล |
---|
|
เปรียบเทียบการทำงานกับFile
และURL
URL
คล้ายกับFile
หรือPath
แต่Path
เก็บเส้นทางไปยังทรัพยากรในระบบไฟล์ และURL
เก็บเส้นทางไปยังทรัพยากรบนอินเทอร์เน็ต
ความมหัศจรรย์ทั้งหมดเกิดขึ้นเมื่อเราได้รับInputStream
วัตถุด้วยการเรียกใช้เมธอดเพียงครั้งopenStream()
เดียว นี่เป็นวัตถุธรรมดาและเราได้ศึกษามาแล้วทั้งภายนอกและภายใน ทุกอย่างจะชัดเจนหลังจากที่เราได้รับInputStream
วัตถุ ท้ายที่สุดเรารู้วิธีรับข้อมูลจากมันแล้ว
ลองดู: เฉพาะสองบรรทัดแรกเท่านั้นที่แตกต่างกันและเพียงเล็กน้อยเท่านั้น และตอนนี้คุณก็เห็นแล้ว — ข้อได้เปรียบของการสร้างมาตรฐานและการทำงานกับกลุ่มของสตรีมข้อมูล:
การทำงานกับอินเทอร์เน็ต | การทำงานกับไฟล์ |
---|---|
|
|
2. URLConnection
ชั้นเรียน
นอกจากการอ่านข้อมูลจากอินเทอร์เน็ตแล้ว เรายังสามารถอัพโหลดข้อมูลได้อีกด้วย การอัปโหลดข้อมูลนั้นซับซ้อนกว่าการอ่านข้อมูลมาก คุณจะต้องใช้วิธีอื่นอีกสองสามวิธี ตัวอย่างเช่น:
รหัส | บันทึก |
---|---|
|
สร้างวัตถุ URL ที่มีพาธไปยังเพจ สร้างการเชื่อมต่อแบบสองทาง รับสตรีมเอาต์พุต ใส่ข้อมูลเข้าไป รับสตรีมอินพุต อ่านข้อมูลจากมัน |
โปรดทราบว่าเราไม่ได้เรียกurl.openStream()
เมธอดที่นี่ อีกต่อไป เราใช้เส้นทางที่ยาวกว่าแทน:
- ก่อนอื่นเราสร้างการเชื่อมต่อสองทางที่เสถียรโดยใช้
URLConnection.openConnection()
วิธีการ - จากนั้นเราจะได้รับสตรีมเพื่อส่งข้อมูลโดยใช้
connection.getOutputStream()
เมธอดและส่งข้อมูลไปยังเซิร์ฟเวอร์ - จากนั้นเราจะได้รับสตรีมสำหรับอ่านข้อมูลโดยใช้
connection.getInputStream()
วิธีการและเริ่มอ่านข้อมูลจากมัน
การจัดการทรัพยากร
พูดตามตรง เราควรห่อสตรีมทั้งหมดไว้ในtry-with-resources
บล็อกเพื่อความปลอดภัยในการจัดการ และมันจะไม่เจ็บที่จะห่อเปลือยInputStream
และOutputStream
ในสิ่งที่สะดวกกว่า ตัวอย่างเช่น ใน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 ลงในดิสก์
โดยหลักการแล้วไม่มีอะไรซับซ้อนที่นี่ ในรูปแบบที่ง่ายที่สุด รหัสนี้จะมีลักษณะดังนี้:
การบันทึกไฟล์ลงดิสก์ |
---|
|
ด้วยความช่วยเหลือของสามบรรทัดแรก เราได้รับสตรีมข้อมูลจากแหล่งข้อมูลทางอินเทอร์เน็ต — จากรูปภาพ
ในบรรทัดที่สี่ เราสร้างชื่อไฟล์ที่เราจะบันทึกภาพ ชื่อสามารถเป็นอะไรก็ได้ แต่นามสกุลไฟล์ต้องตรงกับนามสกุลของรูปภาพบนอินเทอร์เน็ต ซึ่งจะช่วยให้ผู้ดูรูปภาพในท้องถิ่นสามารถเปิดได้อย่างถูกต้อง
และสุดท้าย บรรทัดสุดท้ายเป็นหนึ่งในวิธีการFiles
ของชั้นเรียน copy
ชั้นFiles
เรียนมีหลายคน วิธีนี้เราใช้ byte stream ( InputStream
) เป็นพารามิเตอร์แรกและเป็นพารามิเตอร์ที่สอง — ชื่อของไฟล์ที่ควรเขียนข้อมูล
ในทางทฤษฎี หากURL
รูปภาพมีขนาดสั้น รหัสนี้อาจเขียนได้ในบรรทัดเดียว:
การคัดลอกข้อมูลจากสตรีมไปยังไฟล์ |
---|
|
แน่นอน คุณไม่จำเป็นต้องเขียนแบบนี้ แต่ตัวอย่างนี้แสดงให้เห็นว่าสตรีม I/O ที่สะดวกและมีประสิทธิภาพใน Java เป็นอย่างไร
GO TO FULL VERSION