diff --git a/src/main/java/eu/omp/irap/vespa/votable/votabledata/BinaryStreamParser.java b/src/main/java/eu/omp/irap/vespa/votable/votabledata/BinaryStreamParser.java
index 4070fcb..91609e9 100644
--- a/src/main/java/eu/omp/irap/vespa/votable/votabledata/BinaryStreamParser.java
+++ b/src/main/java/eu/omp/irap/vespa/votable/votabledata/BinaryStreamParser.java
@@ -20,6 +20,7 @@ import java.nio.BufferUnderflowException;
 import java.nio.ByteBuffer;
 import java.util.ArrayList;
 import java.util.List;
+import java.util.StringJoiner;
 import java.util.logging.Level;
 import java.util.logging.Logger;
 
@@ -158,10 +159,6 @@ public final class BinaryStreamParser implements DataParser {
 		} else {
 			arraySize = Integer.parseInt(column.getArraysize()) * blockSize;
 		}
-		if (arraySize != blockSize && !(dataType.equals(DataType.CHAR)
-				|| dataType.equals(DataType.UNICODE_CHAR))) {
-			throw new UnsupportedOperationException("Numeric data as array are not supported.");
-		}
 		return arraySize;
 	}
 
@@ -172,16 +169,77 @@ public final class BinaryStreamParser implements DataParser {
 	 */
 	private Object processDataBlock(DataType dataType) {
 		Object dataBlock;
+		int blockSize = getBlockSize(dataType);
 		if (dataType.equals(DataType.BOOLEAN)) {
-			dataBlock = new Boolean(stream.getInt() == 0 ? false : true);
+			if (rowSize != blockSize) {
+				int nb = rowSize / blockSize;
+				if (nb == 0) { dataBlock = ""; }
+				else {
+					StringJoiner sj = new StringJoiner(" ", "", "");
+					for (int i = 0; i < nb; i++) {
+						sj.add(String.valueOf(new Boolean(stream.getInt() == 0 ? false : true)));
+					}
+					dataBlock = sj.toString();
+				}
+			} else {
+				dataBlock = new Boolean(stream.getInt() == 0 ? false : true);
+			}
 		} else if (dataType.equals(DataType.UNSIGNED_BYTE)) {
-			dataBlock = stream.get();
+			if (rowSize != blockSize) {
+				int nb = rowSize / blockSize;
+				if (nb == 0) { dataBlock = ""; }
+				else {
+					StringJoiner sj = new StringJoiner(" ", "", "");
+					for (int i = 0; i < nb; i++) {
+						sj.add(String.valueOf(stream.get()));
+					}
+					dataBlock = sj.toString();
+				}
+			} else {
+				dataBlock = stream.get();
+			}
 		} else if (dataType.equals(DataType.SHORT)) {
-			dataBlock = stream.getShort();
+			if (rowSize != blockSize) {
+				int nb = rowSize / blockSize;
+				if (nb == 0) { dataBlock = ""; }
+				else {
+					StringJoiner sj = new StringJoiner(" ", "", "");
+					for (int i = 0; i < nb; i++) {
+						sj.add(String.valueOf(stream.getShort()));
+					}
+					dataBlock = sj.toString();
+				}
+			} else {
+				dataBlock = stream.getShort();
+			}
 		} else if (dataType.equals(DataType.INT)) {
-			dataBlock = stream.getInt();
+			if (rowSize != blockSize) {
+				int nb = rowSize / blockSize;
+				if (nb == 0) { dataBlock = ""; }
+				else {
+					StringJoiner sj = new StringJoiner(" ", "", "");
+					for (int i = 0; i < nb; i++) {
+						sj.add(String.valueOf(stream.getInt()));
+					}
+					dataBlock = sj.toString();
+				}
+			} else {
+				dataBlock = stream.getInt();
+			}
 		} else if (dataType.equals(DataType.LONG)) {
-			dataBlock = stream.getLong();
+			if (rowSize != blockSize) {
+				int nb = rowSize / blockSize;
+				if (nb == 0) { dataBlock = ""; }
+				else {
+					StringJoiner sj = new StringJoiner(" ", "", "");
+					for (int i = 0; i < nb; i++) {
+						sj.add(String.valueOf(stream.getLong()));
+					}
+					dataBlock = sj.toString();
+				}
+			} else {
+				dataBlock = stream.getLong();
+			}
 		} else if (dataType.equals(DataType.CHAR)) {
 			String value = new String();
 			for (int i = 0; i < rowSize && cursor < stream.capacity()
@@ -196,9 +254,33 @@ public final class BinaryStreamParser implements DataParser {
 			}
 			dataBlock = value.trim();
 		} else if (dataType.equals(DataType.FLOAT)) {
-			dataBlock = stream.getFloat();
+			if (rowSize != blockSize) {
+				int nb = rowSize / blockSize;
+				if (nb == 0) { dataBlock = ""; }
+				else {
+					StringJoiner sj = new StringJoiner(" ", "", "");
+					for (int i = 0; i < nb; i++) {
+						sj.add(String.valueOf(stream.getFloat()));
+					}
+					dataBlock = sj.toString();
+				}
+			} else {
+				dataBlock = stream.getFloat();
+			}
 		} else if (dataType.equals(DataType.DOUBLE)) {
-			dataBlock = stream.getDouble();
+			if (rowSize != blockSize) {
+				int nb = rowSize / blockSize;
+				if (nb == 0) { dataBlock = ""; }
+				else {
+					StringJoiner sj = new StringJoiner(" ", "", "");
+					for (int i = 0; i < nb; i++) {
+						sj.add(String.valueOf(stream.getDouble()));
+					}
+					dataBlock = sj.toString();
+				}
+			} else {
+				dataBlock = stream.getDouble();
+			}
 		} else {
 			BinaryStreamParser.LOGGER.warning("Data type " + dataType + " is not supported.");
 			dataBlock = null;
--
libgit2 0.21.2