Ім'я файлу: Домашня робота.docx
Розширення: docx
Розмір: 158кб.
Дата: 18.11.2022
скачати

Міністерство освіти і науки України

Національний авіаційний університет

Навчально-науковий інститут комп’ютерних

інформаційних технологій


Домашня робота

з дисципліни «Майстерня розробки програмного забезпечення»


Виконав студент:

групи ПІ-227

Федючук Тимофій Віталійович

Перевірив викладач:

Київ 2022

ДОСЛІДЖЕННЯ МЕХАНІЗМУ СЕРІАЛІЗАЦІЇ В JAVA

Мета роботи: вивчити механізм серіалізації об’єктів при використанні потоків введення/виведення даних у мові Java та навчитися використовувати потоки введення/виведення даних у багатопоточному застосуванні.

Завдання: Напишіть консольне застосування на мові Java, яке:

1) створює потік для запису об’єктів класу до деякого файлу згідно з варіантом завдання;

2) створює потік для читання з файлу об’єктів та виведення їх у табличному вигляді;

3) передбачає синхронізацію між потоками (тобто запис або читання є атомарними операціями) та реалізує її двома способами:

- за допомогою механізму wait/notify;

- за допомогою класів та інтерфейсів пакету java.util.concurrent.locks;

import java.io.*;
import java.util.Scanner;
import java.util.concurrent.locks.Lock;

public class Main {
private static final Object lock = new Object();

public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("Введіть шлях до файлу, будь-ласка");


String path = scanner.nextLine();

while (true) {
System.out.println("1 - Додати автобус");
System.out.println("2 - Прочитати автобус з бази");

int choose;
try {
choose = scanner.nextInt();
} catch (Exception ex) {
System.out.println("Тільки 1 чи 2!");
return;
}
switch (choose) {
case (1):
synchronized (lock) {
try (BufferedWriter writer = new BufferedWriter(new FileWriter(path, true))) {
scanner = new Scanner(System.in);
Bus b = null;
while (b == null) {
System.out.println("Введіть прізвище водія");
String LastName = scanner.nextLine();

System.out.println("Введіть ім'я водія");
String Name = scanner.nextLine();

System.out.println("Введіть номер маршуту");
String routeNumber = scanner.nextLine();

System.out.println("Введіть номер астобусу");
String BusNumber = scanner.nextLine();

System.out.println("Введіть марку автобусу");
String BusBrand = scanner.nextLine();

System.out.println("Введіть час експлуатації автобусу");
int BusUsage = scanner.nextInt();


System.out.println("//////////////");


b = new Bus(Name, LastName, routeNumber, BusNumber, BusBrand, BusUsage);

writer.newLine();
writer.write(b.toString());
writer.flush();
}
} catch (IOException e) {
System.out.println("Проблеми з файлом...");

}
}
break;
case (2):
synchronized (lock) {
String line;
int n = 0;
try (BufferedReader reader = new BufferedReader(new FileReader(path))) {
while (n == 0) {
System.out.println("Введіть номер автобусу якого треба знайти");
try {
n = scanner.nextInt();
} catch (Exception ex) {
System.out.println("Номер!!!");
}
}
for (int i = 0; i < n - 1; i++) {
reader.readLine();
}
System.out.println(reader.readLine());
} catch (IOException e) {
System.out.println("Проблеми з файлом...");
}
}
break;
default:
System.out.println(choose + "Тільки 1 або 2!");
break;
}
}
}
}

public class Bus {
String firstName, lastName, numberRoute, numberBus, brand, run;
int startOfUsage;

public Bus(String _firstName, String _lastName, String _numberRoute
, String _numberBus, String _brand, int _startOfUsage) {
firstName = _firstName;
lastName = _lastName;
numberRoute = _numberRoute;
numberBus =
_numberBus;
brand = _brand;
startOfUsage = _startOfUsage;
}

public String toString() {
int i = 0;
return i++ + '.' + " Ім'я водія: " + firstName + " " + lastName + ". Номер маршуту: " +
numberRoute + ". Номер автобусу: " + numberBus + ". Марка автобусу: " + brand +
". Час експлуатації: " + startOfUsage + " років. Пробіг: " + run;
}
}




Висновок: під час виконання роботи було досліджено механізм сериалізації при використані потоків.
скачати

© Усі права захищені
написати до нас