- ทำความเข้าใจเกี่ยวกับไฟล์ I/O ใน Java
FileInputStream และ FileOutputStream
BufferedInputStream และ BufferedOutputStream - การทำให้เป็นอนุกรมของวัตถุ (Object Serialization)ใน Java
การทำให้เป็นอนุกรมของวัตถุ (Serializing Objects)
Deserializing Objects - การทำแอพด้วย Java File I/O และ Serialization
ในการทำแอพ Java ที่ทรงพลัง ใช้งานได้จริง และมีประสิทธิภาพ การทำความเข้าใจไฟล์ Input/Output (I/O) และการทำให้เป็นอนุกรมของออบเจกต์ (Object Serialization) เป็นสิ่งสำคัญ ฟังก์ชันการทำงานเหล่านี้ทำให้การทำแอพของคุณสามารถอ่านและเขียนข้อมูลไปยังไฟล์และคงสถานะของออบเจกต์ในเซสชันต่างๆ ตามลำดับ ทักษะเหล่านี้สามารถเพิ่มประสิทธิภาพให้กับการทำแอพของคุณ ทำให้สามารถโต้ตอบกับฐานข้อมูล บันทึกการตั้งค่าผู้ใช้ ส่งออกและนำเข้าข้อมูล และอื่นๆ
1. ทำความเข้าใจเกี่ยวกับไฟล์ I/O ใน Java
Java ให้การสนับสนุนอย่างมากสำหรับการอ่านและเขียนไฟล์ผ่าน I/O API สองคลาสที่สำคัญใน API นี้คือ FileInputStream
และ FileOutputStream
FileInputStream และ FileOutputStream
ลองมาดูตัวอย่างที่ใช้คลาสเหล่านี้กัน พิจารณาแอปพลิเคชันที่ต้องอ่านการกำหนดค่าผู้ใช้จากไฟล์ข้อความ:
import java.io.FileInputStream;
import java.io.IOException;
public class ConfigReader {
public void readConfig(String fileName) {
try (FileInputStream fis = new FileInputStream(fileName)) {
int i;
while ((i = fis.read()) != -1) {
System.out.print((char) i);
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
ที่นี่ FileInputStream
ใช้เพื่ออ่านข้อมูลจากไฟล์ เมธอด read()
จะส่งคืนข้อมูลไบต์ถัดไปหรือ -1
หากถึงจุดสิ้นสุดของไฟล์
ในการเขียนไฟล์เราใช้ FileOutputStream
:
import java.io.FileOutputStream;
import java.io.IOException;
public class ConfigWriter {
public void writeConfig(String fileName, String data) {
try (FileOutputStream fos = new FileOutputStream(fileName)) {
byte[] buffer = data.getBytes();
fos.write(buffer);
} catch (IOException e) {
e.printStackTrace();
}
}
}
ตัวอย่างนี้เขียนสตริงลงในไฟล์โดยใช้ FileOutputStream
สตริงจะถูกแปลงเป็นไบต์ ซึ่งจะถูกเขียนลงในไฟล์
BufferedInputStream และ BufferedOutputStream
Java ยังมีสตรีม I/O ที่บัฟเฟอร์ – BufferedInputStream
และBufferedOutputStream
บัฟเฟอร์สามารถเพิ่มความเร็วในการดำเนินการ I/O เนื่องจากลดจำนวนครั้งที่เรียกการดำเนินการ I/O ดั้งเดิม
นี่คือตัวอย่างการใช้BufferedOutputStream
:
import java.io.BufferedOutputStream;
import java.io.FileOutputStream;
import java.io.IOException;
public class BufferedWriter {
public void writeData(String fileName, String data) {
try (BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(fileName))) {
byte[] buffer = data.getBytes();
bos.write(buffer);
} catch (IOException e) {
e.printStackTrace();
}
}
}
2. การทำให้เป็นอนุกรมของวัตถุ (Object Serialization)ใน Java
แม้ว่าไฟล์ I/O จะช่วยให้การทำแอพของคุณสามารถอ่านและเขียนข้อมูลลงในไฟล์ได้ แต่การทำให้เป็นอนุกรมของอ็อบเจ็กต์ (Object Serialization) จะช่วยให้คุณสามารถแปลงสถานะของอ็อบเจ็กต์เป็นไบต์สตรีม ซึ่งสามารถแปลงกลับเป็นสำเนาของอ็อบเจ็กต์ได้ เทคนิคนี้ช่วยให้การทำแอพของคุณสามารถคงอ็อบเจ็กต์ระหว่างเซสชัน ส่งอ็อบเจ็กต์ผ่านเครือข่าย หรือบันทึกลงในฐานข้อมูล
อินเทอร์เฟส Java Serializable
ทำเครื่องหมายคลาสที่สามารถซีเรียลไลซ์ได้ ลองอธิบายสิ่งนี้ด้วยตัวอย่าง พิจารณาคลาส User
:
import java.io.Serializable;
public class User implements Serializable {
private String name;
private String email;
// constructors, getters, and setters...
}
การทำให้เป็นอนุกรมของวัตถุ (Serializing Objects)
ในการทำให้เป็นอนุกรมอินสแตนซ์ของคลาส User
:
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectOutputStream;
public class UserSerializer {
public void serializeUser(User user, String fileName) {
try (ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(fileName))) {
oos.writeObject(user);
} catch (IOException e) {
e.printStackTrace();
}
}
}
Deserializing Objects
ในการดีซีเรียลไลซ์วัตถุ:
import java.io.FileInputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
public class UserDeserializer {
public User deserializeUser(String fileName) {
try (ObjectInputStream ois = new ObjectInputStream(new FileInputStream(fileName))) {
return (User) ois.readObject();
} catch (IOException | ClassNotFoundException e) {
e.printStackTrace();
}
return null;
}
}
3. การทำแอพด้วย Java File I/O และ Serialization
ด้วยทักษะเหล่านี้ ตอนนี้คุณสามารถปรับปรุงแอปพลิเคชันของคุณเพื่อสร้าง ดึงข้อมูล อัปเดต และลบไฟล์ (การดำเนินการ CRUD) ซึ่งจะทำให้ผู้ใช้ของคุณสามารถทำงานกับข้อมูลถาวรได้ ฟังก์ชันนี้สามารถนำไปใช้ในสถานการณ์จริงมากมาย เช่น การบันทึกการดำเนินการของผู้ใช้ การอ่าน/เขียนการตั้งค่าผู้ใช้ การส่งออก/นำเข้าข้อมูลไปยัง/จากไฟล์ CSV และอื่นๆ
นอกจากนี้ การทำให้เป็นอนุกรมของออบเจกต์ยังช่วยให้การทำแอพของคุณคงสถานะของออบเจกต์ระหว่างเซสชันได้ ซึ่งอาจมีความสำคัญสำหรับการทำแอพจำนวนมาก เช่น เกม ตัวจัดการรายการสิ่งที่ต้องทำ และโปรแกรมแก้ไขข้อความ
การทำความเข้าใจหัวข้อเหล่านี้เป็นขั้นตอนสำคัญในเส้นทางของคุณในการทำแอพ Java ทำให้คุณเข้าใกล้การทำแอพที่สามารถโต้ตอบกับระบบไฟล์และคงข้อมูลไว้ได้อย่างมีความหมาย จึงมอบคุณค่าที่มากขึ้นแก่ผู้ใช้ของคุณ
ฝึกฝนสิ่งที่คุณได้เรียนรู้ผ่านโครงการที่ลงมือปฏิบัติจริง เช่น การทำแอพเพื่อจัดการงานหรือโปรแกรมแก้ไขข้อความอย่างง่าย โปรดจำไว้ว่ากุญแจสำคัญในการเรียนรู้แนวคิดเหล่านี้อยู่ที่การนำไปใช้ ไม่ใช่แค่การเข้าใจทฤษฎีเท่านั้น