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<OpenOption> CREATE_OPTIONS = new HashSet<>(2);
private static final Set<OpenOption> 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<Path, FileIO> map = new HashMap<Path, FileIO>();
-
- 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;
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 {
}
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;
}
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.");
+ }
}
}