สนับสนุนโดย

วันพุธที่ 26 ธันวาคม พ.ศ. 2561

ObjectStream และ Zip Programming

เรื่องนี้เราจะมาพูดเรื่องการบีบอัดข้อมูล โดยเขียนโปรแกรมสั่งให้เขียนไฟล์แบบ ไบนารี่ เหมือนเดิม เพียงแต่ว่ามีความต่างคือเป็นการเขียนค่า และบีบอัด (zip) เพื่อให้ข้อมุลในไฟล์มีขนาดเล็กลงไปอีก

ตัวอย่างนี้เพื่อไม่ให้เกิดความสับสน ขอให้สร้าง package ชื่อ objectStreamTest ขึ้นมาก่อน แล้วสร้างไฟล์ ObjectStreamTest.java ใส่เข้าไป พร้อมกับเขียนโค้ดลงไปดังนี้



package objectStreamTest;

import java.io.*;
import java.util.*;

class Employee implements Serializable {

    private String name;
    private double salary;
    private Date hireDay;

    public Employee() {
    }

    public Employee(String n, double s, int year, int month, int day) {
        name = n;
        salary = s;
        GregorianCalendar calendar = new GregorianCalendar(year, month - 1, day);
        hireDay = calendar.getTime();
    }

    public String getName() {
        return name;
    }

    public double getSalary() {
        return salary;
    }

    public Date getHireDay() {
        return hireDay;
    }

    public void raiseSalary(double byPercent) {
        double raise = salary * byPercent / 100;
        salary += raise;
    }

    public String toString() {
        return getClass().getName() + "[name=" + name + ",salary=" + salary + ",hireDay=" + hireDay + "]";
    }
}

class Manager extends Employee {

    private Employee secretary;

    public Manager(String n, double s, int year, int month, int day) {
        super(n, s, year, month, day);
        secretary = null;
    }

    public void setSecretary(Employee s) {
        secretary = s;
    }

    public String toString() {
        return super.toString() + "[secretary=" + secretary + "]";
    }
}

class ObjectStreamTest {

    public static void main(String[] args) throws IOException, ClassNotFoundException {
        Employee harry = new Employee("Harry Hacker", 50000, 1989, 10, 1);
        Manager carl = new Manager("Carl Cracker", 80000, 1987, 12, 15);
        carl.setSecretary(harry);
        Manager tony = new Manager("Tony Tester", 40000, 1990, 3, 15);
        tony.setSecretary(harry);

        Employee[] staff = new Employee[3];

        staff[0] = carl;
        staff[1] = harry;
        staff[2] = tony;

        // save all employee records to the file employee.dat         
        try (ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream("employee.dat"))) {
            out.writeObject(staff);
        }

        try (ObjectInputStream in = new ObjectInputStream(new FileInputStream("employee.dat"))) {
            // retrieve all records into a new array
            Employee[] newStaff = (Employee[]) in.readObject();

            // raise secretary's salary
            newStaff[1].raiseSalary(10);

            // print the newly read employee records
            for (Employee e : newStaff) {
                System.out.println(e);
            }
        }
    }
}

ผลการทำงาน
objectStreamTest.Manager[name=Carl Cracker,salary=80000.0,hireDay=Tue Dec 15 00:00:00 ICT 1987][secretary=objectStreamTest.Employee[name=Harry Hacker,salary=55000.0,hireDay=Sun Oct 01 00:00:00 ICT 1989]]
objectStreamTest.Employee[name=Harry Hacker,salary=55000.0,hireDay=Sun Oct 01 00:00:00 ICT 1989]
objectStreamTest.Manager[name=Tony Tester,salary=40000.0,hireDay=Thu Mar 15 00:00:00 ICT 1990][secretary=objectStreamTest.Employee[name=Harry Hacker,salary=55000.0,hireDay=Sun Oct 01 00:00:00 ICT 1989]]

ไม่มีความคิดเห็น:

แสดงความคิดเห็น