From 7e211b0a96b6e4541118f72a2bb6269a4c1553ea Mon Sep 17 00:00:00 2001 From: Nikolay Repin Date: Wed, 24 Jul 2024 19:36:33 +0700 Subject: [PATCH] [cocoemu] Rewrite `Image` IO using try-with-resources --- .../cocoemu/core/image/BinaryImageParser.java | 10 ++- .../org/cdm/cocoemu/core/image/Image.java | 28 ++++---- .../core/image/LogisimImageParser.java | 68 ++++++++++--------- 3 files changed, 53 insertions(+), 53 deletions(-) diff --git a/cocoemu/src/main/java/org/cdm/cocoemu/core/image/BinaryImageParser.java b/cocoemu/src/main/java/org/cdm/cocoemu/core/image/BinaryImageParser.java index a04b708..6130a85 100644 --- a/cocoemu/src/main/java/org/cdm/cocoemu/core/image/BinaryImageParser.java +++ b/cocoemu/src/main/java/org/cdm/cocoemu/core/image/BinaryImageParser.java @@ -27,12 +27,10 @@ public List parse(InputStream inputStream) throws IOException { @Override public void save(OutputStream outputStream, List values) throws IOException { - BufferedOutputStream bos = new BufferedOutputStream(outputStream); - - for (Integer value : values) { - bos.write(value.byteValue()); + try (BufferedOutputStream bos = new BufferedOutputStream(outputStream)) { + for (Integer value : values) { + bos.write(value.byteValue()); + } } - - bos.flush(); } } diff --git a/cocoemu/src/main/java/org/cdm/cocoemu/core/image/Image.java b/cocoemu/src/main/java/org/cdm/cocoemu/core/image/Image.java index 6918814..05cc90a 100644 --- a/cocoemu/src/main/java/org/cdm/cocoemu/core/image/Image.java +++ b/cocoemu/src/main/java/org/cdm/cocoemu/core/image/Image.java @@ -94,28 +94,28 @@ public int[] getIntegers() { } public static Image loadFromFile(String filename, ImageParser parser) throws IOException, ImageFormatException { - InputStream inputStream = Files.newInputStream(Paths.get(filename)); + try (InputStream inputStream = Files.newInputStream(Paths.get(filename))) { + List values = parser.parse(inputStream); - List values = parser.parse(inputStream); - - return new Image(values); + return new Image(values); + } } public static Image loadFromResources(String filename, ImageParser parser) throws IOException, ImageFormatException { - InputStream inputStream = Image.class.getResourceAsStream(filename); - - if (inputStream == null) { - throw new IOException("Resource not found: " + filename); - } + try (InputStream inputStream = Image.class.getResourceAsStream(filename)) { + if (inputStream == null) { + throw new IOException("Resource not found: " + filename); + } - List values = parser.parse(inputStream); + List values = parser.parse(inputStream); - return new Image(values); + return new Image(values); + } } public void saveToFile(String filename, ImageParser parser) throws IOException { - OutputStream outputStream = Files.newOutputStream(Paths.get(filename)); - - parser.save(outputStream, values); + try (OutputStream outputStream = Files.newOutputStream(Paths.get(filename))) { + parser.save(outputStream, values); + } } } diff --git a/cocoemu/src/main/java/org/cdm/cocoemu/core/image/LogisimImageParser.java b/cocoemu/src/main/java/org/cdm/cocoemu/core/image/LogisimImageParser.java index 43098eb..7eced80 100644 --- a/cocoemu/src/main/java/org/cdm/cocoemu/core/image/LogisimImageParser.java +++ b/cocoemu/src/main/java/org/cdm/cocoemu/core/image/LogisimImageParser.java @@ -9,55 +9,57 @@ public class LogisimImageParser implements ImageParser { @Override public List parse(InputStream inputStream) throws IOException, ImageFormatException { - InputStreamReader inputStreamReader = new InputStreamReader(inputStream); - BufferedReader reader = new BufferedReader(inputStreamReader); + try ( + InputStreamReader inputStreamReader = new InputStreamReader(inputStream); + BufferedReader reader = new BufferedReader(inputStreamReader) + ) { + List values = new ArrayList<>(); - List values = new ArrayList<>(); + String header = reader.readLine(); - String header = reader.readLine(); + if (!header.equals(LOGISIM_HEADER)) { + throw new ImageFormatException("Invalid logisim header: " + header); + } - if (!header.equals(LOGISIM_HEADER)) { - throw new ImageFormatException("Invalid logisim header: " + header); - } + while (true) { + String line = reader.readLine(); - while (true) { - String line = reader.readLine(); + if (line == null) { + break; + } - if (line == null) { - break; - } + if (line.startsWith("#")) { + continue; + } - if (line.startsWith("#")) { - continue; - } + int value; - int value; + try { + value = Integer.parseInt(line, 16); + } catch (NumberFormatException e) { + throw new ImageFormatException("Invalid hex number: " + line, e); + } - try { - value = Integer.parseInt(line, 16); - } catch (NumberFormatException e) { - throw new ImageFormatException("Invalid hex number: " + line, e); + values.add(value); } - values.add(value); + return values; } - - return values; } @Override public void save(OutputStream outputStream, List values) throws IOException { - OutputStreamWriter outputStreamWriter = new OutputStreamWriter(outputStream); - BufferedWriter writer = new BufferedWriter(outputStreamWriter); - - writer.write(LOGISIM_HEADER); - writer.newLine(); - - for (Integer value : values) { - writer.write(String.format("%x", value)); + try ( + OutputStreamWriter outputStreamWriter = new OutputStreamWriter(outputStream); + BufferedWriter writer = new BufferedWriter(outputStreamWriter) + ) { + writer.write(LOGISIM_HEADER); writer.newLine(); - } - writer.flush(); + for (Integer value : values) { + writer.write(String.format("%x", value)); + writer.newLine(); + } + } } }