in iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/utils/SerializeUtils.java [137:229]
public static BatchData deserializeBatchData(ByteBuffer buffer) {
if (buffer == null || (buffer.limit() - buffer.position()) == 0) {
return null;
}
int length = buffer.getInt();
TSDataType dataType = TSDataType.values()[buffer.get()];
BatchData batchData = BatchDataType.deserialize(buffer.get(), dataType);
switch (dataType) {
case DATE:
case INT32:
for (int i = 0; i < length; i++) {
batchData.putInt(buffer.getLong(), buffer.getInt());
}
break;
case TIMESTAMP:
case INT64:
for (int i = 0; i < length; i++) {
batchData.putLong(buffer.getLong(), buffer.getLong());
}
break;
case BLOB:
case STRING:
case TEXT:
for (int i = 0; i < length; i++) {
long time = buffer.getLong();
int len = buffer.getInt();
byte[] bytes = new byte[len];
buffer.get(bytes);
batchData.putBinary(time, new Binary(bytes));
}
break;
case FLOAT:
for (int i = 0; i < length; i++) {
batchData.putFloat(buffer.getLong(), buffer.getFloat());
}
break;
case DOUBLE:
for (int i = 0; i < length; i++) {
batchData.putDouble(buffer.getLong(), buffer.getDouble());
}
break;
case BOOLEAN:
for (int i = 0; i < length; i++) {
batchData.putBoolean(buffer.getLong(), buffer.get() == 1);
}
break;
case VECTOR:
for (int i = 0; i < length; i++) {
long time = buffer.getLong();
int valuesLength = buffer.getInt();
TsPrimitiveType[] values = new TsPrimitiveType[valuesLength];
for (int j = 0; j < valuesLength; j++) {
boolean notNull = (buffer.get() == 1);
if (notNull) {
switch (TSDataType.values()[buffer.get()]) {
case BOOLEAN:
values[j] = new TsPrimitiveType.TsBoolean(buffer.get() == 1);
break;
case DOUBLE:
values[j] = new TsPrimitiveType.TsDouble(buffer.getDouble());
break;
case FLOAT:
values[j] = new TsPrimitiveType.TsFloat(buffer.getFloat());
break;
case BLOB:
case STRING:
case TEXT:
int len = buffer.getInt();
byte[] bytes = new byte[len];
buffer.get(bytes);
values[j] = new TsPrimitiveType.TsBinary(new Binary(bytes));
break;
case TIMESTAMP:
case INT64:
values[j] = new TsPrimitiveType.TsLong(buffer.getLong());
break;
case DATE:
case INT32:
values[j] = new TsPrimitiveType.TsInt(buffer.getInt());
break;
default:
break;
}
}
}
batchData.putVector(time, values);
}
break;
}
batchData.resetBatchData();
return batchData;
}