“สวัสดี อามีโก้!”
“สวัสดี เอลลี่!”
"วันนี้เราจะมาศึกษา I/O streams"
"ใช่ ฉันรู้ทุกอย่างเกี่ยวกับพวกเขาแล้ว เราใช้คลาส FileInputStream และ FileOutputStream ที่นี่"
"ใช่ แล้วคุณรู้วิธีใดของชั้นเรียนเหล่านี้บ้าง"
"แน่นอน นี่คือวิธีการของ FileInputStream:"
วิธี | คำอธิบาย |
---|---|
int read() |
อ่านหนึ่งไบต์และส่งคืน |
int read(byte b[]) |
อ่านอาร์เรย์ไบต์และส่งกลับ |
int read(byte b[], int off, int len) |
อ่านอาร์เรย์ไบต์จากสตรีม |
long skip(long n) |
ข้าม n ไบต์ ใช้เมื่ออ่านจากสตรีม |
int available() |
ส่งกลับจำนวนไบต์ที่ยังสามารถอ่านได้จากสตรีม |
void close() |
ปิดสตรีม |
"ตรงประเด็น! และวิธีการของ FileOutputStream?"
"ลองดูสิ:"
วิธี | คำอธิบาย |
---|---|
void write(int b) |
เขียนหนึ่งไบต์ไปยังสตรีม |
void write(byte b[]) |
เขียนอาร์เรย์ของไบต์ไปยังสตรีม |
void write(byte b[], int off, int len) |
เขียนอาร์เรย์ของไบต์ไปยังสตรีม |
void close() |
ปิดสตรีม |
“อามีโก้ คุณทำให้ฉันประหลาดใจ!”
"แล้วบางส่วน!"
"ก็ได้ ฉันจะให้คลาสใหม่สองคลาสแก่คุณ: ZipInputStream และ ZipOutputStream"
" Zip ? เหมือนไฟล์ zip หรือเปล่า "
"ถูกต้อง สตรีมเหล่านี้ออกแบบมาเพื่อทำงานกับไฟล์ zip คุณสามารถใช้มันเพื่ออ่านหรือเขียนโดยตรงไปยังไฟล์ zip!"
"Holy moly! น่าสนใจจัง แต่ไฟล์ zip จะมีไฟล์เดียวไม่ได้ แต่มีหลายไฟล์ ไฟล์เหล่านี้ทำงานอย่างไร"
"สำหรับสิ่งนั้น มีอีกคลาสพิเศษ: ZipEntryมันนำเสนอไฟล์ที่เก็บไว้ในไฟล์เก็บถาวร คุณสามารถอ่าน วัตถุ ZipEntryจากZipInputStream เท่านั้น และคุณสามารถเขียน วัตถุ ZipEntryไปยังZipOutputStream ได้เท่านั้น แต่กลายเป็นว่าคุณสามารถอ่านและ เขียนไปยังZipEntryเหมือนกับไฟล์ทั่วไป"
"คุณช่วยยกตัวอย่างวิธีการทำงานให้ฉันหน่อยได้ไหม"
"แน่นอน นี่คือตัวอย่างที่เราสร้างไฟล์เก็บถาวรและใส่ไฟล์ลงไป:"
// Create an archive
FileOutputStream zipFile = new FileOutputStream("c:/archive.zip");
ZipOutputStream zip = new ZipOutputStream(zipFile);
//Put a ZipEntry into it
zip.putNextEntry(new ZipEntry("document.txt"));
//Copy the file «document-for-archive.txt» to the archive under the name «document.txt»
File file = new File("c:/document-for-archive.txt");
Files.copy(file.toPath(), zip);
// Close the archive
zip.close();
"น่าสนใจจัง! และการแตกไฟล์ก็ง่ายเหมือนกันนะเนี่ย"
"อ๋อ นี่คือคำอธิบายโดยย่อเกี่ยวกับวิธีการของ คลาส ZipEntry , ZipInputStream และZipOutputStream "
" ZipInputStreamเป็นสตรีม ดังนั้นZipEntry ทั้งหมด สามารถอ่านได้ตามลำดับเท่านั้น นี่คือวิธีการ:"
วิธี | คำอธิบาย |
---|---|
ZipEntry getNextEntry() |
ส่งกลับวัตถุที่อธิบาย ZipEntry ถัดไป (ข้ามไบต์ทั้งหมดในรายการปัจจุบัน) |
void closeEntry() |
ปิดสตรีมอินพุตใน ZipEntry ปัจจุบัน (ข้ามไบต์ทั้งหมดในรายการปัจจุบัน) |
int available() |
ส่งคืน 1 มี ZipEntries มิฉะนั้นจะเป็น 0 |
int read(byte[] b, int off, int len) |
อ่านไบต์จาก ZipEntry ปัจจุบัน |
long skip(long n) |
ข้าม n ไบต์เมื่ออ่านจากสตรีม |
void close() |
ปิดสตรีม |
"ไม่เข้าใจจริงๆ"
"สิ่งที่ดีที่สุดที่ควรทำคือจินตนาการว่าคุณกำลังอ่านไฟล์ข้อความ และ ZipEntries เป็นเหมือนบรรทัดในไฟล์ คุณสามารถอ่านข้อมูลจากบรรทัดปัจจุบัน ( ZipEntryปัจจุบัน) หรือข้ามจากบรรทัดหนึ่งไปอีกบรรทัด( getNextEntry , closeEntry ) "
"ฉันคิดว่าฉันเข้าใจ แต่ฉันไม่แน่ใจ"
"นี่คือ ZipOutputStream และวิธีการ:"
วิธี | คำอธิบาย |
---|---|
void setComment(String comment) |
แสดงความคิดเห็นในไฟล์เก็บถาวร |
void setMethod(int method) |
ตั้งค่าวิธีการบีบอัด (ประเภท) |
void setLevel(int level) |
ตั้งค่าระดับการบีบอัด ยิ่งบีบอัดมากเท่าไหร่ก็ยิ่งช้าลงเท่านั้น |
void putNextEntry(ZipEntry e) |
เพิ่ม ZipEntry ใหม่ |
void closeEntry() |
ปิด ZipEntry ปัจจุบัน |
void write(byte[] b, int off, int len) |
เขียนชุดของไบต์ไปยัง ZipEntry ปัจจุบัน |
void close() |
ปิดสตรีม |
"แต่ในตัวอย่างด้านบน เราแทบจะไม่ใช้สิ่งนี้เลย"
"นี่เป็นวิธีทางเลือก คุณไม่จำเป็นต้องระบุระดับการบีบอัดและวิธีการ—จะใช้การตั้งค่าเริ่มต้น"
"อืม ก็ไม่เลวนะ แล้ว ZipEntry ล่ะ?"
"แน่นอน ข้อมูลอื่นๆ ใน ZipEntry คือข้อมูลการดูแลทำความสะอาด:"
วิธี | คำอธิบาย |
---|---|
String getName(), setName(String) |
ไฟล์ชื่อภายใน |
long getTime(), setTime(long) |
ครั้งล่าสุดที่มีการแก้ไขรายการ |
long getCRC(), setCRC(long) |
ตรวจสอบผลรวม |
long getSize(), setSize(long) |
ขนาดก่อนอัด. |
int getMethod(), setMethod(int) |
วิธีการบีบอัด |
long get/setCompressedSize() |
ขนาดหลังรูด. |
boolean isDirectory() |
รายการเป็นไดเร็กทอรีหรือไม่ |
"นั่นดูไม่ยาก ไม่มีอะไรจะรัก!"
“เยี่ยมมาก แล้วดิเอโกก็จะมอบงานให้คุณในหัวข้อนี้เช่นกัน”
“ฉันควรจะปิดปากไว้”
GO TO FULL VERSION