From d2ab45e7ecdfee71806eb0388527cd50ba96975d Mon Sep 17 00:00:00 2001 From: Matthias Jaros Date: Mon, 6 Jul 2026 11:05:31 +0200 Subject: Changing scanner from collecting all results to a stream of output. Saves RAM and is not necessary to first collect everything --- src/main/java/com/it_jaros/jscanner/Scanner.java | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) (limited to 'src/main/java/com/it_jaros/jscanner/Scanner.java') diff --git a/src/main/java/com/it_jaros/jscanner/Scanner.java b/src/main/java/com/it_jaros/jscanner/Scanner.java index 40c2e23..3e655a5 100644 --- a/src/main/java/com/it_jaros/jscanner/Scanner.java +++ b/src/main/java/com/it_jaros/jscanner/Scanner.java @@ -10,6 +10,7 @@ import java.util.concurrent.*; import java.util.concurrent.atomic.AtomicBoolean; import java.util.concurrent.atomic.AtomicInteger; import java.util.concurrent.atomic.AtomicLong; +import java.util.function.Consumer; import java.util.function.Function; public class Scanner implements AutoCloseable { @@ -54,9 +55,8 @@ public class Scanner implements AutoCloseable { * Starts a given scan. * * @param scan - * @return */ - public List runScan(final Scan scan) { + public void runScan(final Scan scan, final Consumer consumer) { if (scan == null) { throw new IllegalArgumentException("Scan argument cannot be null"); } @@ -88,9 +88,8 @@ public class Scanner implements AutoCloseable { // No matter what happens we have to free the resources after getting ScanResult try { ScanResult result = finishedHost.get(); - // we only want results that give value and not cost RAM for nothing - if (!result.openPorts().isEmpty() || !result.filteredPorts().isEmpty()) { - scan.addScanResult(result); + if (result != null) { + consumer.accept(result); } } finally { state.activeWorkers().release(); @@ -104,7 +103,6 @@ public class Scanner implements AutoCloseable { } scan.stop(); - return scan.getResults(); } /** @@ -155,6 +153,7 @@ public class Scanner implements AutoCloseable { try { PortResult portResult = portResultFuture.get(); + if (portResult == null) continue; switch (portResult.getState()) { case OPEN -> { // bitset is not thread-safe, so it is set -- cgit v1.3.1