Adding the serializer/deserializer for the entire signature.
authorrtrimana <rtrimana@uci.edu>
Wed, 26 Sep 2018 18:58:03 +0000 (11:58 -0700)
committerrtrimana <rtrimana@uci.edu>
Wed, 26 Sep 2018 18:58:03 +0000 (11:58 -0700)
Code/Projects/SmartPlugDetector/src/main/java/edu/uci/iotproject/Main.java
Code/Projects/SmartPlugDetector/src/main/java/edu/uci/iotproject/util/PrintUtils.java

index 4e1c5655c911ad21485325dc7ce23cc521a92aed..00b0b9b748c43c303a853a25cf7e4140cef3f67f 100644 (file)
@@ -300,7 +300,7 @@ public class Main {
         count = 0;
         for (List<List<PcapPacket>> ll : ppListOfListListOn) {
             PrintUtils.serializeClustersIntoFile("./onSignature" + ++count + ".sig", ll);
-            ppListOfListReadOn.add(PrintUtils.serializeClustersFromFile("./onSignature" + count + ".sig"));
+            ppListOfListReadOn.add(PrintUtils.deserializeClustersFromFile("./onSignature" + count + ".sig"));
         }
 
         System.out.println("========================================");
@@ -324,7 +324,7 @@ public class Main {
         count = 0;
         for (List<List<PcapPacket>> ll : ppListOfListListOff) {
             PrintUtils.serializeClustersIntoFile("./offSignature" + ++count + ".sig", ll);
-            ppListOfListReadOff.add(PrintUtils.serializeClustersFromFile("./offSignature" + count + ".sig"));
+            ppListOfListReadOff.add(PrintUtils.deserializeClustersFromFile("./offSignature" + count + ".sig"));
         }
         System.out.println("========================================");
         // ============================================================================================================
index ba782ea5ae8f830c55245c2e1e136eae962cd5c0..3d3a3beee61143adcbe351674fcb88bf1c0c079e 100644 (file)
@@ -64,6 +64,30 @@ public class PrintUtils {
         }
     }
 
+    /**
+     * Write the signature {@code List<List<List<PcapPacket>>>} into a file.
+     *
+     * After the DBSCAN algorithm derives the clusters from pairs, we save the signature in the form of list of
+     * packet pairs. We harvest the pairs and transform them back into a list of PcapPacket objects.
+     * We do not maintain the pairs in the form of {@code Cluster<PcapPacketPair>} objects because there might be
+     * a situation where we could combine multiple PcapPacketPair objects into a longer signature, i.e., a string of
+     * PcapPacket objects and not just a pair.
+     *
+     * @param fileName The path of the file in {@link String}. We could leave this one {@code null} if we wanted the
+     *                 default file name {@code SERIALIZABLE_FILE_PATH}.
+     * @param signature The {@link Cluster} objects in the form of list of {@code PcapPacket} objects.
+     */
+    public static void serializeSignatureIntoFile(String fileName, List<List<List<PcapPacket>>> signature) {
+        if (fileName == null)
+            fileName = SERIALIZABLE_FILE_PATH;
+        try (ObjectOutputStream oos =
+                     new ObjectOutputStream(new FileOutputStream(fileName))) {
+            oos.writeObject(signature);
+        } catch (Exception ex) {
+            ex.printStackTrace();
+        }
+    }
+
     /**
      * Read the list of list of packet pairs {@code List<List<PcapPacket>>} from a file.
      *
@@ -77,7 +101,7 @@ public class PrintUtils {
      *                 default file name {@code SERIALIZABLE_FILE_PATH}.
      * @return The list of list of {@link Cluster} objects ({@code List<List<PcapPacket>>}) that is read from file.
      */
-    public static List<List<PcapPacket>> serializeClustersFromFile(String fileName) {
+    public static List<List<PcapPacket>> deserializeClustersFromFile(String fileName) {
         if (fileName == null)
             fileName = SERIALIZABLE_FILE_PATH;
         List<List<PcapPacket>> ppListOfList = null;
@@ -91,6 +115,34 @@ public class PrintUtils {
         return ppListOfList;
     }
 
+    /**
+     * Read the list of list of packet pairs {@code List<List<List<PcapPacket>>>} from a file.
+     *
+     * After the DBSCAN algorithm derives the clusters from pairs, we save the signature in the form of list of
+     * packet pairs. We harvest the pairs and transform them back into a list of PcapPacket objects.
+     * We do not maintain the pairs in the form of {@code Cluster<PcapPacketPair>} objects because there might be
+     * a situation where we could combine multiple PcapPacketPair objects into a longer signature, i.e., a string of
+     * PcapPacket objects and not just a pair.
+     *
+     * @param fileName The path of the file in {@link String}. We could leave this one {@code null} if we wanted the
+     *                 default file name {@code SERIALIZABLE_FILE_PATH}.
+     * @return The list of list of list of {@link Cluster} objects ({@code List<List<List<PcapPacket>>>})
+     *         that is read from file.
+     */
+    public static List<List<List<PcapPacket>>> deserializeSignatureFromFile(String fileName) {
+        if (fileName == null)
+            fileName = SERIALIZABLE_FILE_PATH;
+        List<List<List<PcapPacket>>> ppListOfListOfList = null;
+        try (ObjectInputStream ois =
+                     new ObjectInputStream(new FileInputStream(fileName))) {
+            ppListOfListOfList = (List<List<List<PcapPacket>>>) ois.readObject();
+        } catch (Exception ex) {
+            ex.printStackTrace();
+        }
+
+        return ppListOfListOfList;
+    }
+
     /**
      * Converts a {@code PcapPacketPair} into a CSV string containing the packet lengths of the two packets in the pair.
      *