Search in sources :

Example 1 with MessageMetadataResult

use of org.apache.arrow.vector.ipc.message.MessageMetadataResult in project flink by apache.

the class ArrowUtils method readNextBatch.

private static byte[] readNextBatch(ReadableByteChannel channel) throws IOException {
    MessageMetadataResult metadata = MessageSerializer.readMessage(new ReadChannel(channel));
    if (metadata == null) {
        return null;
    }
    long bodyLength = metadata.getMessageBodyLength();
    // Only care about RecordBatch messages and skip the other kind of messages
    if (metadata.getMessage().headerType() == MessageHeader.RecordBatch) {
        // Buffer backed output large enough to hold 8-byte length + complete serialized message
        ByteArrayOutputStreamWithPos baos = new ByteArrayOutputStreamWithPos((int) (8 + metadata.getMessageLength() + bodyLength));
        // Write message metadata to ByteBuffer output stream
        MessageSerializer.writeMessageBuffer(new WriteChannel(Channels.newChannel(baos)), metadata.getMessageLength(), metadata.getMessageBuffer());
        baos.close();
        ByteBuffer result = ByteBuffer.wrap(baos.getBuf());
        result.position(baos.getPosition());
        result.limit(result.capacity());
        readFully(channel, result);
        return result.array();
    } else {
        if (bodyLength > 0) {
            // Skip message body if not a RecordBatch
            Channels.newInputStream(channel).skip(bodyLength);
        }
        // Proceed to next message
        return readNextBatch(channel);
    }
}
Also used : WriteChannel(org.apache.arrow.vector.ipc.WriteChannel) MessageMetadataResult(org.apache.arrow.vector.ipc.message.MessageMetadataResult) ByteArrayOutputStreamWithPos(org.apache.flink.core.memory.ByteArrayOutputStreamWithPos) ByteBuffer(java.nio.ByteBuffer) ReadChannel(org.apache.arrow.vector.ipc.ReadChannel)

Aggregations

ByteBuffer (java.nio.ByteBuffer)1 ReadChannel (org.apache.arrow.vector.ipc.ReadChannel)1 WriteChannel (org.apache.arrow.vector.ipc.WriteChannel)1 MessageMetadataResult (org.apache.arrow.vector.ipc.message.MessageMetadataResult)1 ByteArrayOutputStreamWithPos (org.apache.flink.core.memory.ByteArrayOutputStreamWithPos)1