From efede371cc5a039e934e82c7eeab56f2f61d14cf Mon Sep 17 00:00:00 2001 From: Eric Duminil <eric.duminil@gmail.com> Date: Thu, 29 Sep 2022 11:02:43 +0200 Subject: [PATCH] Write CityGml in buffer, not as a whole string. --- .../simstadt/regionchooser/RegionChooserBrowser.java | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/src/main/java/eu/simstadt/regionchooser/RegionChooserBrowser.java b/src/main/java/eu/simstadt/regionchooser/RegionChooserBrowser.java index 92bf767..2089403 100644 --- a/src/main/java/eu/simstadt/regionchooser/RegionChooserBrowser.java +++ b/src/main/java/eu/simstadt/regionchooser/RegionChooserBrowser.java @@ -10,7 +10,6 @@ import java.util.prefs.Preferences; import org.locationtech.jts.io.ParseException; import com.ximpleware.NavException; -import com.ximpleware.XPathEvalException; import com.ximpleware.XPathParseException; import eu.simstadt.regionchooser.fast_xml_parser.ConvexHullCalculator; import javafx.application.Platform; @@ -30,6 +29,7 @@ public class RegionChooserBrowser extends Region { private static final Logger LOGGER = Logger.getLogger(RegionChooserBrowser.class.getName()); + private static final int BUFFER = 1024; /** * JavaFX Backend for RegionChooser. Inside simstadt_openlayers.js frontend, this class is available as `fxapp`. @@ -70,15 +70,19 @@ public Void call() throws IOException { } public void downloadRegionFromCityGML(String wktPolygon, String project, String citygml, String srsName) - throws IOException, ParseException, XPathParseException, NavException, XPathEvalException { + throws IOException, ParseException, XPathParseException, NavException { StringBuilder sb = RegionExtractor.selectRegionDirectlyFromCityGML(wktPolygon, srsName, citygmlPath(project, citygml)); File buildingIdsFile = selectSaveFileWithDialog(project, citygml, "selected_region"); if (buildingIdsFile != null) { try (BufferedWriter writer = Files.newBufferedWriter(buildingIdsFile.toPath())) { - //NOTE: isn't there a better way?? - writer.write(sb.toString()); + char[] chars = new char[BUFFER]; + for (int aPosStart = 0; aPosStart < sb.length(); aPosStart += BUFFER) { + int chunk = Math.min(BUFFER, sb.length() - aPosStart); + sb.getChars(aPosStart, aPosStart + chunk, chars, 0); + writer.write(chars, 0, chunk); + } } } } -- GitLab