write method
Implementation
Uint8List write() {
final output = _ByteWriter()..writeBytes(_arrowFileMagic);
output.align(8);
final writer = _ArrowIpcRecordBatchWriter(
schema: schema,
columns: const [],
);
writer._writeIpcMessage(
output,
_ArrowIpcSchemaWriter(schema)._writeMessage(),
);
final dictionaryBlocks = <_IpcBlock>[];
final recordBatchBlocks = <_IpcBlock>[];
for (final batch in batches) {
_validateRecordBatchColumns(schema, batch.columns);
final context = _ArrayEncoderContext();
final encoded = writer._encodeRecordBatch(
schema.fields,
batch.columns,
context,
);
for (final dictionary in context.dictionaries.values) {
final dictionaryBatch = writer._encodeDictionaryBatch(dictionary);
dictionaryBlocks.add(
writer._writeIpcMessage(
output,
writer._writeDictionaryBatchMessage(dictionary.id, dictionaryBatch),
body: dictionaryBatch.body,
),
);
}
recordBatchBlocks.add(
writer._writeIpcMessage(
output,
writer._writeRecordBatchMessage(encoded),
body: encoded.body,
),
);
}
output.writeInt32(-1);
output.writeUint32(0);
output.align(8);
final footer = _ArrowIpcFileFooterWriter(
schema: schema,
dictionaryBlocks: dictionaryBlocks,
recordBatchBlocks: recordBatchBlocks,
).write();
output.writeBytes(footer);
output.writeInt32(footer.length);
output.writeBytes(_arrowFileMagic);
return output.toBytes();
}