diff --git a/src/main/java/org/bioimageanalysis/icy/deeplearning/tensorflow/v1/tensor/MappedBufferToImgLib2.java b/src/main/java/org/bioimageanalysis/icy/deeplearning/tensorflow/v1/tensor/MappedBufferToImgLib2.java index 143358d0a9c50e0a49e3aec92ee853e725a6ea04..f6c84c8163e484c443f404364eb94e22dec3746d 100644 --- a/src/main/java/org/bioimageanalysis/icy/deeplearning/tensorflow/v1/tensor/MappedBufferToImgLib2.java +++ b/src/main/java/org/bioimageanalysis/icy/deeplearning/tensorflow/v1/tensor/MappedBufferToImgLib2.java @@ -32,9 +32,10 @@ public final class MappedBufferToImgLib2 * Pattern that matches the header of the temporal file for interprocess communication * and retrieves data type and shape */ - private static final Pattern HEADER_PATTERN = - Pattern.compile("\\{'dtype':'([a-zA-Z0-9]+)','axes':'([a-zA-Z0-9]+)'" - + ",'name':'(.+?)',shape':'\\[(\\d+(,\\d+)*)\\]'}"); + private static final Pattern HEADER_PATTERN = Pattern.compile("'dtype':'([a-zA-Z0-9]+)'" + + ",'axes':'([a-zA-Z]+)'" + + ",'name':'([^']*)'" + + ",'shape':'(\\[\\s*(?:(?:[1-9]\\d*|0)\\s*,\\s*)*(?:[1-9]\\d*|0)?\\s*\\])'"); /** * Key for data type info */ @@ -248,17 +249,19 @@ public final class MappedBufferToImgLib2 * @return */ public static HashMap<String, Object> getDataTypeAndShape(String infoStr) { - Matcher m = HEADER_PATTERN.matcher(infoStr); - if (!m.find()) { - throw new IllegalArgumentException("Cannot find datatype and dimensions " - + "info in file hader: " + infoStr); + Matcher matcher = HEADER_PATTERN.matcher(infoStr); + if (!matcher.find()) { + throw new IllegalArgumentException("Cannot find datatype, name, axes and dimensions " + + "info in file header: " + infoStr); } - String typeStr = m.group(1); - String axesStr = m.group(2); - String nameStr = m.group(3); - String shapeStr = m.group(4); + String typeStr = matcher.group(1); + String axesStr = matcher.group(2); + String nameStr = matcher.group(3); + String shapeStr = matcher.group(4); + long[] shape = new long[0]; if (!shapeStr.isEmpty() && !shapeStr.equals("[]")) { + shapeStr = shapeStr.substring(0, shapeStr.length() - 1); String[] tokens = shapeStr.split(", ?"); shape = Arrays.stream(tokens).mapToLong(Long::parseLong).toArray(); }