X-Git-Url: https://gerrit.simantics.org/r/gitweb?p=simantics%2Fplatform.git;a=blobdiff_plain;f=bundles%2Forg.simantics.acorn%2Fsrc%2Forg%2Fsimantics%2Facorn%2FFileIO.java;h=305094f8315ac443ed75933219111e1deda8eb04;hp=aa71732855bab8a6108d9fa2d837ebb3798a2839;hb=0df63f38249cbbc584d3a130773680c309fb1f71;hpb=9b79343ca481f448a4bcdeb3c2b35af91c8dfb62 diff --git a/bundles/org.simantics.acorn/src/org/simantics/acorn/FileIO.java b/bundles/org.simantics.acorn/src/org/simantics/acorn/FileIO.java index aa7173285..305094f83 100644 --- a/bundles/org.simantics.acorn/src/org/simantics/acorn/FileIO.java +++ b/bundles/org.simantics.acorn/src/org/simantics/acorn/FileIO.java @@ -19,41 +19,32 @@ import java.util.Map; import java.util.Set; import org.simantics.databoard.file.RuntimeIOException; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; public class FileIO { - - private static final FileAttribute[] NO_ATTRIBUTES = new FileAttribute[0]; - + + private static final Logger LOGGER = LoggerFactory.getLogger(FileIO.class); + + private static final FileAttribute[] NO_ATTRIBUTES = {}; + private static final Set CREATE_OPTIONS = new HashSet<>(2); private static final Set APPEND_OPTIONS = new HashSet<>(1); - + static { CREATE_OPTIONS.add(StandardOpenOption.WRITE); CREATE_OPTIONS.add(StandardOpenOption.CREATE); - + APPEND_OPTIONS.add(StandardOpenOption.APPEND); } - + private Path path; private int writePosition = 0; - private FileIO(Path path) { + public FileIO(Path path) { this.path = path; } - - private static Map map = new HashMap(); - - public static FileIO get(Path path) { - synchronized(map) { - FileIO existing = map.get(path); - if(existing == null) { - existing = new FileIO(path); - map.put(path, existing); - } - return existing; - } - } - + //private static final boolean TRACE_SWAP = false; private static final boolean TRACE_PERF = false; @@ -66,15 +57,17 @@ public class FileIO { ByteBuffer bb = ByteBuffer.wrap(bytes, 0, length); try (FileChannel fc = FileChannel.open(path, options, NO_ATTRIBUTES)) { fc.write(bb); + + writePosition += length; + if(TRACE_PERF) { + long duration = System.nanoTime()-start; + double ds = 1e-9*duration; + LOGGER.info("Wrote " + bytes.length + " bytes @ " + 1e-6*bytes.length / ds + "MB/s"); + } + return result; + } catch (Throwable t) { + throw new IOException("An error occured file saving bytes for file " + path.toAbsolutePath().toString(), t); } - - writePosition += length; - if(TRACE_PERF) { - long duration = System.nanoTime()-start; - double ds = 1e-9*duration; - System.err.println("Wrote " + bytes.length + " bytes @ " + 1e-6*bytes.length / ds + "MB/s"); - } - return result; } public synchronized byte[] readBytes(int offset, int length) throws IOException { @@ -88,11 +81,11 @@ public class FileIO { } byte[] result = buf.array(); if (result.length != length) - System.err.println("faa"); + LOGGER.info("result length does not match expected {} {} {}", this, result.length, length); if (TRACE_PERF) { long duration = System.nanoTime() - start; double ds = 1e-9 * duration; - System.err.println("Read " + result.length + " bytes @ " + 1e-6 * result.length / ds + "MB/s"); + LOGGER.info("Read " + result.length + " bytes @ " + 1e-6 * result.length / ds + "MB/s"); } return result; } @@ -133,10 +126,10 @@ public class FileIO { syncPath(test); - long duration = System.nanoTime()-s; - System.err.println("Took " + 1e-6*duration + "ms."); - - + if (LOGGER.isDebugEnabled()) { + long duration = System.nanoTime()-s; + LOGGER.info("Took " + 1e-6*duration + "ms."); + } } }