С Новым годом! Форум программистов, компьютерный форум, киберфорум
AlexProgramm
Войти
Регистрация
Восстановить пароль
Карта форума Блоги Сообщество Поиск Заказать работу  
Рейтинг: 1.00. Голосов: 1.

Изученный материал по Java. Сериализация.

Запись от AlexProgramm размещена 30.04.2023 в 15:12

Закончил тему:

13. Сериализация.

Сериализация (serialization) – преобразование состояния объекта в последовательность байт
Десериализация (deserialization) – восстановление объекта из байтовой последовательности
Объект может быть сериализован, если класс реализует интерфейс java.io.Serializable

Задачи:
1. СЕРИАЛИЗАЦИЯ ОБЪЕКТОВ
В классе com.spec.Point реализуйте интерфейс Serializable.
Напишите программу, сохраняющую в файл коллекцию векторов (ArrayList<com.spec.Vector>, наследников Point) и, затем, восстанавливающую коллекцию из файла, используя объектные потоки и сериализацию.
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
package com.spec;
 
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.util.ArrayList;
import java.util.Collections;
 
 
public class DZ131 {
 
    public static void main(String[] args) {
        String fileName = "E:\\Javatxt\\vectors.bin";
        ArrayList<Vector> arr2 = new ArrayList();
        
        ArrayList<Vector> arr = new ArrayList();
        arr.add(new Vector(5, 9));
        arr.add(new Vector(4, 4));
        arr.add(new Vector(7, 3));
        arr.add(new Vector(9, 7));
        arr.add(new Vector(1, 8));
        
        Collections.sort(arr);
        
        for (Vector iter : arr) {
            iter.print(iter);
        }
        
        try (FileOutputStream fout = new FileOutputStream(fileName);
             ObjectOutputStream oout = new ObjectOutputStream(fout);) {
            oout.writeObject(arr);
        }
        catch (IOException e) {
                e.printStackTrace();
        }
        
        try (FileInputStream fin = new FileInputStream(fileName);
             ObjectInputStream oin = new ObjectInputStream(fin);) {
            arr2 = (ArrayList<Vector>)oin.readObject();
        }
        catch (IOException e) {
                e.printStackTrace();
        }
        catch (ClassNotFoundException e) {
                e.printStackTrace();
        }        
        System.out.println("Hello World!");
        
        for (Vector iter : arr2) {
            iter.print(iter);
        }
    }
}
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
package com.spec;
 
import java.io.Serializable;
 
 
public class Point implements Serializable{
    
    private int x, y;
    
    public Point() {
        setCoord(0, 0);
    }
    public Point (int x, int y){
        this.x = x;
        this.y = y;
    }
    
    public void setCoord(int x, int y){
        this.x = x;
        this.y = y;
    }
    public int getCoordX(){
        //System.out.println("x = " + x + " y = " + y);
        return x;
    }
    public int getCoordY(){
        //System.out.println("x = " + x + " y = " + y);
        return y;
    }
}
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
package com.spec;
 
import java.util.Comparator;
 
 
public class Vector extends Point implements Comparable<Vector> {
    public Vector(){
        //super();
    }
    public Vector(int nx, int ny){
        super(nx, ny);
    }
    public Vector sum(Vector v){
        int xsum, ysum;
        Vector vsum = new Vector();
        xsum = getCoordX() + v.getCoordX();
        ysum = getCoordY() + v.getCoordY();
        vsum.setCoord(xsum, ysum);
        return vsum;
    }
    public Vector sub(Vector v){
        int xsub, ysub;
        Vector vsub = new Vector();
        xsub = getCoordX() - v.getCoordX();
        ysub = getCoordY() - v.getCoordY();
        vsub.setCoord(xsub, ysub);
        return vsub;
    }
    public int multi(Vector v){
        int scal;
        scal = this.getCoordX() * v.getCoordX() + this.getCoordY() * v.getCoordY();
        return scal;
    }
    public boolean isOrtho (Vector v){
        int scal;
        scal = this.getCoordX() * v.getCoordX() + this.getCoordY() * v.getCoordY();
        if (scal == 0)
            return true;
        else
            return false;
    }
    public double length() {
        return Math.sqrt(Math.pow(this.getCoordX(), 2) + Math.pow(this.getCoordY(), 2));
    }
    public void print(Vector v) {
        System.out.println("Coord X = " + v.getCoordX() + " Coord Y = " + v.getCoordY() + " Length = " + v.length());
    }
 
    @Override
    public int compareTo(Vector o) {
        //o = (Integer)o;
        if(this.getCoordX() > o.getCoordX()) {
            return 1;
        }
        else if (this.getCoordX() < o.getCoordX())
            return -1;
        else
            return 0;
        
    }
 
    
}
2. УПРАВЛЕНИЕ СЕРИАЛИЗАЦИЕЙ
1. Добавьте в класс com.spec.Vector неустойчивое (transient) скрытое поле Date createTime, хранящее время создания объекта. Поле не должно быть задействовано при сериализации объекта.
2. В конструкторах класса проинициализируйте поле createTime текущим временем.
3. Создайте публичный метод, позволяющий считывать значение поля createTime.
4. Создайте метод readObject, отвечающий за десереализацию объекта. После загрузки объекта из потока стандартным способом (defaultReadObject) метод должен инициализировать поле createTime текущим временем (временем загрузки объекта)
5. Разработайте программу, сохраняющую вектор в объектный поток, и затем, восстанавливающую вектор из потока. Убедитесь, что инициализация поля createTime при десереализации объекта работает корректно.
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
package com.spec;
 
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.util.ArrayList;
import java.util.Date;
 
 
public class DZ132 {
 
    public static void main(String[] args) throws IOException, ClassNotFoundException {
        Vector v1 = new Vector(5, 6);
        System.out.print("Vector v1 : ");
        v1.print(v1);
        System.out.print("Дата создания объекта: " + v1.getTime());
        System.out.println();
        
        System.out.println("Сериализация объекта v1...");
        String fileName = "E:\\Javatxt\\vector1.bin";
        try (FileOutputStream fout = new FileOutputStream(fileName);
             ObjectOutputStream oout = new ObjectOutputStream(fout);) {
            oout.writeObject(v1);
        }
        catch (IOException e) {
                e.printStackTrace();
        }
        
        System.in.read();
        System.out.println("Десериализация объекта v1...");
        try (FileInputStream fin = new FileInputStream(fileName);
             ObjectInputStream oin = new ObjectInputStream(fin);) {
            System.out.println("Наш десериализованный объект v1:");
            Vector v2 = ((Vector)oin.readObject());
            System.out.print("Переменная createTime не сереализовалась, поэтому: ");
            v2.print(v2);
            //v1.readObject(oin);
//            v1.print(v1);
//            String s = String.format("Дата десириализации объекта: %tA, %td, %tB, %tY, %tr", v1.getTime(), v1.getTime(), v1.getTime(), v1.getTime(), d2.getTime());
//            System.out.println(s);
            System.out.print("Дата десериализации объекта: " + v1.readObject(oin));
//            String s = String.format("Дата десирилизации объекта: %tr" + v1.readObject(oin));
//            System.out.println(s);
        }
        catch (IOException e) {
                e.printStackTrace();
        }
//        catch (ClassNotFoundException e) {
//                e.printStackTrace();
//        } 
        System.out.println("Hello World!");
    }
}
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
package com.spec;
 
import java.io.Serializable;
 
 
public class Point implements Serializable{
    
    private int x, y;
    
    public Point() {
        setCoord(0, 0);
    }
    public Point (int x, int y){
        this.x = x;
        this.y = y;
    }
    
    public void setCoord(int x, int y){
        this.x = x;
        this.y = y;
    }
    public int getCoordX(){
        //System.out.println("x = " + x + " y = " + y);
        return x;
    }
    public int getCoordY(){
        //System.out.println("x = " + x + " y = " + y);
        return y;
    }
}
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
package com.spec;
 
import java.io.IOException;
import java.io.ObjectInputStream;
import java.util.Comparator;
import java.util.Date;
 
 
public class Vector extends Point implements Comparable<Vector> {
    private transient Date createTime;
    
    public Vector(){
        //super();
        createTime = new Date();
    }
    public Vector(int nx, int ny){
        super(nx, ny);
        createTime = new Date();
    }
    public Vector sum(Vector v){
        int xsum, ysum;
        Vector vsum = new Vector();
        xsum = getCoordX() + v.getCoordX();
        ysum = getCoordY() + v.getCoordY();
        vsum.setCoord(xsum, ysum);
        return vsum;
    }
    public Vector sub(Vector v){
        int xsub, ysub;
        Vector vsub = new Vector();
        xsub = getCoordX() - v.getCoordX();
        ysub = getCoordY() - v.getCoordY();
        vsub.setCoord(xsub, ysub);
        return vsub;
    }
    public int multi(Vector v){
        int scal;
        scal = this.getCoordX() * v.getCoordX() + this.getCoordY() * v.getCoordY();
        return scal;
    }
    public boolean isOrtho (Vector v){
        int scal;
        scal = this.getCoordX() * v.getCoordX() + this.getCoordY() * v.getCoordY();
        if (scal == 0)
            return true;
        else
            return false;
    }
    public double length() {
        return Math.sqrt(Math.pow(this.getCoordX(), 2) + Math.pow(this.getCoordY(), 2));
    }
    public void print(Vector v) {
        System.out.println("Coord X = " + v.getCoordX() + " Coord Y = " + v.getCoordY() + " Length = " + v.length());
        //String s = String.format("%tc", getTime());
        System.out.println(getTime());
    }
 
    @Override
    public int compareTo(Vector o) {
        //o = (Integer)o;
        if(this.getCoordX() > o.getCoordX()) {
            return 1;
        }
        else if (this.getCoordX() < o.getCoordX())
            return -1;
        else
            return 0;
        
    }
    
    public Date getTime() {
        return createTime;
    }
    public Date readObject(java.io.ObjectInputStream in) throws IOException, ClassNotFoundException {
        createTime = new Date();
        System.out.println("Дата десериализации объекта(в методе readObject): " + createTime);
        //in.defaultReadObject();
        in.close();
        return createTime;
    }
}
Размещено в Без категории
Показов 1546 Комментарии 0
Всего комментариев 0
Комментарии
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru