Poprzedni artykułpreviousnextNastępny artykuł

Externalizacja i deeksternalizacja

Eksternalizacja i deeksternalizacja jest lepszym rozwiązaniem problemu zapisu macierzy niż serializacja i deserializacja.
Nasza klasa Matrix musi implementować interface Externalizable, co wiąże się z dodaniem 2 metod:

  @Override
    public void readExternal(ObjectInput in) throws IOException,
            ClassNotFoundException {
        final int row = in.readInt();
        final int col = in.readInt();
        double[][] objs = new double[row][col];
        for (int i = 0; i < row; i++) {
            for (int j = 0; j < col; j++) {
                objs[i][j] = (Double) in.readObject();
            }
        }
        setArray(objs);
    }

    @Override
    public void writeExternal(ObjectOutput out) throws IOException {
        final int row = array.length;
        final int col = array[0].length;
        out.writeInt(row);
        out.writeInt(col);
        for (double[] doubles : array) {
            for (int j = 0; j < col; j++) {
                out.writeObject(doubles[j]);
            }
        }
    }

Teraz możemy macierz strumieniować do i z obiektów ObjectInputStream i ObjectOutputStream.
Macierz możemy zapisać do pliku i odczytać z pliku używając metod externalize i deeksternalize z klasyMatrixUtil.

 public static void externalize(Matrix matrix, String path) {
        try {
            FileOutputStream fos = new FileOutputStream(path);
            ObjectOutputStream oos = new ObjectOutputStream(fos);
            matrix.writeExternal(oos);
            oos.flush();
            oos.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
public static Matrix deexternalize(String path) {
        Matrix mat = null;
        try {
            FileInputStream fis = new FileInputStream(path);
            ObjectInputStream ois = new ObjectInputStream(fis);
            try {
                mat.readExternal(ois);
            } catch (ClassNotFoundException e) {
                e.printStackTrace();
            }
            ois.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return mat;
    }

My jednak chcemy zapisywać macierze w bazie danych Apache Derby. Musimy dopisać spor kodu. uczynimy to w następnym wpisie.

Pliki do ściągnięcia

matrices029.zip
Moduł matrices - aktualny stan projektu = 029;