Java ObjectInputStream

Java Objectinputstream



“ข้อมูลที่เขียนผ่านอ็อบเจ็กต์ของ ObjectOutputStream นั้นเข้าถึงได้โดยใช้คลาส ObjectInputStream เป็นหลัก วัตถุประสงค์หลักของคลาส ObjectInputStream คือการสร้างข้อมูลพื้นฐานและเอนทิตีที่สร้างขึ้นใหม่โดยใช้คลาส ObjectOutputStream โดยการใช้ SocketStream นั้น ObjectInputStream อาจถูกใช้เพื่อถ่ายโอนอ็อบเจ็กต์ข้ามโฮสต์ต่างๆ ดังนั้นเราจึงตัดสินใจเขียนคำแนะนำที่เป็นประโยชน์สำหรับระบบ Ubuntu 20.04 ของเราเพื่อละทิ้งอ็อบเจ็กต์คลาส objectinputstream เพื่ออ่านข้อมูลจากสตรีมอินพุตไฟล์ เริ่มต้นด้วยการเปิดคอนโซล”

ตัวอย่าง 01

จากตัวอย่างแรกของบทความ เราได้สร้างไฟล์จาวาใหม่ 'test.java' หลังจากนั้น เราก็สร้างไฟล์ข้อความในโฟลเดอร์เดียวกัน







หากต้องการอ่านออบเจ็กต์ของอินพุตสตรีมในโปรแกรม java เราจำเป็นต้องนำเข้าเอาต์พุตสตรีม ดังนั้นเราจึงนำเข้าแพ็คเกจ “java.io.ObjectInputStream” และ “java.io.ObjectOutputStream” ในตอนเริ่มต้น นอกจากนั้น ในการแทรกข้อมูลลงในไฟล์ เราต้องนำเข้า “java.io.FileInputStream” และ “java.io.FileInputStream” เราได้สร้างคลาส 'Main' ที่มีฟังก์ชัน main() เดียว



การทำงานของฟังก์ชันเริ่มต้นจากการประกาศตัวแปรจำนวนเต็ม “d” เพื่อหลีกเลี่ยงไม่ให้โปรแกรมออกกะทันหันเนื่องจากข้อผิดพลาด เราได้เพิ่มคำสั่ง try-catch ของ java ส่วน 'ลอง' เริ่มต้นด้วยการเริ่มต้นของวัตถุสตรีมเอาต์พุต 'f' ผ่านคลาส FileOutputStream เราได้ส่งชื่อไฟล์ 'new.txt' ไปยังวัตถุนี้ 'f' แล้ว เราได้สร้าง Object Output Stream “o” และส่ง file object “f” ไปยังคลาส ObjectOutputStream เพื่อทำให้ไฟล์เป็น output stream



ในบรรทัดถัดไป เราได้เรียกใช้ฟังก์ชัน writeInt() ของสตรีมเอาต์พุต Java ผ่านออบเจ็กต์สตรีมเอาต์พุต 'o' เพื่อส่งผ่านตัวแปรจำนวนเต็ม 'd' เช่น เพื่อบันทึกลงในไฟล์ ในบรรทัดที่ 12 เราได้สร้างไฟล์อินพุตสตรีม 'fs' โดยใช้คลาส FileInputStream ของ java โดยส่งไฟล์ 'new.txt' ไปให้นั่นคือมีข้อมูลอยู่แล้ว ออบเจ็กต์สตรีมอินพุตไฟล์ 'fs' นี้ถูกส่งไปยังอ็อบเจ็กต์ 'os' ที่สร้างขึ้นใหม่ของคลาส ObjectInputStream เพื่อเปิดใช้งานการอ่านจากสตรีมไฟล์ ฟังก์ชัน println() จากแพ็คเกจ 'System.out' ของ java ถูกละทิ้งเพื่อเรียกใช้ฟังก์ชัน readInt() ผ่านออบเจกต์อินพุตสตรีมออบเจ็กต์ 'os' เพื่อแสดงข้อมูลจากไฟล์ new.txt หลังจากนั้น เราได้ปิดเอาต์พุตสตรีมและอินพุตสตรีมโดยใช้วัตถุ 'o' และ 'os' ตามลำดับโดยใช้ฟังก์ชัน 'ปิด' ของการจัดการไฟล์ใน java นี่เป็นขั้นตอนที่จำเป็นในการปิดสตรีมเพื่อไม่ให้ผู้ใช้รายอื่นสามารถป้อนหรือส่งออกข้อมูลจากไฟล์ได้ ภายในคำสั่ง catch() เราใช้ฟังก์ชัน getStackTrace() เพื่อรับข้อผิดพลาดและแสดงบนหน้าจอผ่านตัวแปร Exception “e” โปรแกรมนี้พร้อมสำหรับการดำเนินการบนเชลล์





เราเพิ่งบันทึกไฟล์โค้ดจาวาของเราก่อนดำเนินการ และใช้คำสั่งคีย์เวิร์ดจาวาเพื่อรันไฟล์ 'test.java' มันกลับไม่มีอะไรตอบแทน นอกจากนี้ การแสดงข้อมูลของไฟล์ข้อความ “new.txt” บนเชลล์โดยใช้คำสั่ง “cat” จะแสดงค่าขยะ เนื่องจากโดยส่วนใหญ่แล้ว java executor ไม่สามารถอ่านค่าจำนวนเต็มจากไฟล์ได้ แต่ส่วนใหญ่แล้ว มันจะแสดงค่าจำนวนเต็มที่แน่นอน



ในการตรวจสอบไฟล์ new.txt โดยการเปิดด้วยตนเอง เราพบว่ามีการแสดงค่ารูปแบบ Unicode ในไฟล์

หากคุณไม่สามารถแสดงค่าจำนวนเต็มจากสตรีมไฟล์ได้ คุณสามารถใช้ฟังก์ชัน writeObject() ในโปรแกรม java แทนฟังก์ชัน writeInt() เพื่อเขียนค่า 'd' ไปยังสตรีมไฟล์ผ่านอ็อบเจกต์ 'o' ตามที่แสดง นอกจากนั้น คุณต้องยกเลิกฟังก์ชัน “readObject()” แทนฟังก์ชัน readInt() เพื่อแสดงข้อมูลจากสตรีมอินพุตไฟล์

การอัปเดตรหัสนี้จะแสดงค่าจำนวนเต็มเมื่อดำเนินการ

ตัวอย่าง 02

มามีค่าอื่นของการเขียนโปรแกรมจาวาเพื่อตัดกระแสอินพุตออบเจ็กต์สำหรับค่าประเภทสตริง ดังนั้นเราจึงเริ่มโค้ดตัวอย่างนี้ด้วยการนำเข้าคลาส FileInputStream, FileOutputStream, ObjectInputStream และ ObjectOutputStream ของ java จากแพ็คเกจ 'io' ของไลบรารี java คลาสหลักมีฟังก์ชัน main() เพื่อเริ่มรันโค้ดนี้ ตัวแปรสตริง 'd2' เริ่มต้นด้วยค่าสตริงแบบยาว

คำสั่ง try-catch แบบเดียวกันนี้ถูกยกเลิกเพื่อหลีกเลี่ยงข้อผิดพลาดและเพื่อให้โค้ดจาวานี้ทำงานได้อย่างราบรื่น วัตถุ 'f' สำหรับสตรีมเอาท์พุตของไฟล์ได้ถูกสร้างขึ้นผ่านคลาส FileOutputStream โดยใช้ 'new.txt' เป็นอาร์กิวเมนต์ ออบเจ็กต์สตรีมเอาต์พุตไฟล์ 'f' ถูกส่งไปยังออบเจ็กต์สตรีมเอาต์พุต 'o' ที่สร้างขึ้นโดยใช้คลาส ObjectOutputStream ตอนนี้ เอาต์พุตสตรีม 'o' ได้เรียกใช้ฟังก์ชัน writeObject() โดยส่งตัวแปรสตริง 'd' เพื่อเขียนลงในไฟล์ 'new.txt'

จากนั้นสร้างสตรีมอินพุตไฟล์ 'fs' โดยใช้คลาส FileInputStream โดยส่งชื่อไฟล์ 'new.txt' เช่นเพื่ออ่านข้อมูลจากไฟล์ ตอนนี้ อ็อบเจ็กต์คลาส ObjectInputStream “os” จะใช้ออบเจ็กต์สตรีมอินพุตไฟล์ “fs” เพื่ออ่านข้อมูลโดยใช้ฟังก์ชัน readObject() ของ java ในคำสั่งการดำเนินการ “println” ของคลาส “System.out” จากนั้น เรามักจะปิดกระแสข้อมูลอินพุตและเอาต์พุตโดยเรียกใช้ฟังก์ชัน 'ปิด' และคำสั่ง catch จะใช้เพื่อรับข้อยกเว้นที่เกิดขึ้นในส่วนลองและหลีกเลี่ยงการปิดการดำเนินการของโปรแกรมนี้อย่างกะทันหัน

การดำเนินการของไฟล์โค้ดจาวานี้และไฟล์ข้อความแสดงค่าสตริงบนคอนโซล

บทสรุป

การใช้คลาส ObjectInputStream เป็นวิธีเดียวที่ใช้ได้สำหรับการอ่านสารที่ใช้โปรโตคอล Serializable หรือ Externalizable โดยสรุป เราได้รวมรายละเอียดที่จำเป็นทั้งหมดเพื่อใช้คลาส objectinputstream ของ java เพื่ออ่านข้อมูลจากสตรีมอินพุตวัตถุของไฟล์ สำหรับสิ่งนี้ เราได้แสดงตัวอย่างโค้ดจาวาที่แตกต่างกันสองตัวอย่างที่นี่ ตัวอย่างแรกใช้ค่าตัวแปรอินพุตประเภทจำนวนเต็ม ในขณะที่ภาพประกอบที่สองได้ตัดค่าตัวแปรสตริงออก กล่าวคือ อ่านจากสตรีมไฟล์อินพุต