mirror of
https://github.com/davidalves04/Trabalho-Pratico-SD.git
synced 2025-12-08 12:33:31 +00:00
135 lines
5.0 KiB
Java
135 lines
5.0 KiB
Java
package sd.serialization;
|
|
|
|
import sd.model.Message;
|
|
import sd.model.MessageType;
|
|
import sd.model.Vehicle;
|
|
import sd.model.VehicleType;
|
|
|
|
import java.util.Arrays;
|
|
import java.util.List;
|
|
|
|
/**
|
|
* Demonstration of JSON serialization usage in the traffic simulation system.
|
|
*
|
|
* This class shows practical examples of how to use JSON (Gson) serialization
|
|
* for network communication between simulation processes.
|
|
*/
|
|
public class SerializationExample {
|
|
|
|
public static void main(String[] args) {
|
|
System.out.println("=== JSON Serialization Example ===\n");
|
|
|
|
// Create a sample vehicle
|
|
List<String> route = Arrays.asList("Cr1", "Cr2", "Cr5", "S");
|
|
Vehicle vehicle = new Vehicle("V001", VehicleType.LIGHT, 10.5, route);
|
|
vehicle.addWaitingTime(2.3);
|
|
vehicle.addCrossingTime(1.2);
|
|
|
|
// Create a message containing the vehicle
|
|
Message message = new Message(
|
|
MessageType.VEHICLE_TRANSFER,
|
|
"Cr1",
|
|
"Cr2",
|
|
vehicle
|
|
);
|
|
|
|
// ===== JSON Serialization =====
|
|
demonstrateJsonSerialization(message);
|
|
|
|
// ===== Factory Usage =====
|
|
demonstrateFactoryUsage(message);
|
|
|
|
// ===== Performance Test =====
|
|
performanceTest(message);
|
|
}
|
|
|
|
private static void demonstrateJsonSerialization(Message message) {
|
|
System.out.println("--- JSON Serialization ---");
|
|
|
|
try {
|
|
// Create JSON serializer with pretty printing for readability
|
|
MessageSerializer serializer = new JsonMessageSerializer(true);
|
|
|
|
// Serialize to bytes
|
|
byte[] data = serializer.serialize(message);
|
|
|
|
// Display the JSON
|
|
String json = new String(data);
|
|
System.out.println("Serialized JSON (" + data.length + " bytes):");
|
|
System.out.println(json);
|
|
|
|
// Deserialize back
|
|
Message deserialized = serializer.deserialize(data, Message.class);
|
|
System.out.println("\nDeserialized: " + deserialized);
|
|
System.out.println("✓ JSON serialization successful\n");
|
|
|
|
} catch (SerializationException e) {
|
|
System.err.println("❌ JSON serialization failed: " + e.getMessage());
|
|
}
|
|
}
|
|
|
|
private static void demonstrateFactoryUsage(Message message) {
|
|
System.out.println("--- Using SerializerFactory ---");
|
|
|
|
try {
|
|
// Get default serializer (JSON)
|
|
MessageSerializer serializer = SerializerFactory.createDefault();
|
|
System.out.println("Default serializer: " + serializer.getName());
|
|
|
|
// Use it
|
|
byte[] data = serializer.serialize(message);
|
|
Message deserialized = serializer.deserialize(data, Message.class);
|
|
|
|
System.out.println("Message type: " + deserialized.getType());
|
|
System.out.println("From: " + deserialized.getSenderId() +
|
|
" → To: " + deserialized.getDestinationId());
|
|
System.out.println("✓ Factory usage successful\n");
|
|
|
|
} catch (SerializationException e) {
|
|
System.err.println("❌ Factory usage failed: " + e.getMessage());
|
|
}
|
|
}
|
|
|
|
private static void performanceTest(Message message) {
|
|
System.out.println("--- Performance Test ---");
|
|
|
|
int iterations = 1000;
|
|
|
|
try {
|
|
MessageSerializer compactSerializer = new JsonMessageSerializer(false);
|
|
MessageSerializer prettySerializer = new JsonMessageSerializer(true);
|
|
|
|
// Warm up
|
|
for (int i = 0; i < 100; i++) {
|
|
compactSerializer.serialize(message);
|
|
}
|
|
|
|
// Test compact JSON
|
|
long compactStart = System.nanoTime();
|
|
byte[] compactData = null;
|
|
for (int i = 0; i < iterations; i++) {
|
|
compactData = compactSerializer.serialize(message);
|
|
}
|
|
long compactTime = System.nanoTime() - compactStart;
|
|
|
|
// Test pretty JSON
|
|
byte[] prettyData = prettySerializer.serialize(message);
|
|
|
|
// Results
|
|
System.out.println("Iterations: " + iterations);
|
|
System.out.println("\nJSON Compact:");
|
|
System.out.println(" Size: " + compactData.length + " bytes");
|
|
System.out.println(" Time: " + (compactTime / 1_000_000.0) + " ms total");
|
|
System.out.println(" Avg: " + (compactTime / iterations / 1_000.0) + " μs/operation");
|
|
|
|
System.out.println("\nJSON Pretty-Print:");
|
|
System.out.println(" Size: " + prettyData.length + " bytes");
|
|
System.out.println(" Size increase: " +
|
|
String.format("%.1f%%", ((double)prettyData.length / compactData.length - 1) * 100));
|
|
|
|
} catch (SerializationException e) {
|
|
System.err.println("❌ Performance test failed: " + e.getMessage());
|
|
}
|
|
}
|
|
}
|