Hi everyone,

I'm looking for some guidance on what I may be doing wrong.
I'm serializing (unpacked) multiple MessageBuilder to FileChannel via a 
BufferedOutputStreamWrapper

Here is a snippet of the code in Kotlin

val partitionFileInputStream = FileOutputStream(filename, true).channel
val buffered = BufferedOutputStreamWrapper(partitionFileInputStream)

val recordIterator = RecordIterator(dataSource)
recordIterator.asSequence().map { row ->
    converter(row)
}.forEach {  message ->
    Serialize.write(buffered, message)
}

buffered.flush()
buffered.close()



I'm writing millions of records to a file which is several GB in size at the 
end.

I then try to read the file:


val fileChannel = RandomAccessFile(filePath.toFile(), "r").getChannel()

for(message in SerializedIterator(fileChannel)) {
    val record = message.getRoot(SomeClass.Object.factory)
}


here is the iterator implementation:


class SerializedIterator(readChan: ReadableByteChannel) : 
AbstractIterator<MessageReader>(), AutoCloseable {

    val buffer = BufferedInputStreamWrapper(readChan)

    override fun close() {
        buffer.close()
    }

    override fun computeNext() {
        try {
            setNext(Serialize.read(buffer))
        } catch (e : Error) {
            close()
            done()
        }
    }

}



It seems to go fine for several million records and then I get hit with:


java.lang.NegativeArraySizeException: null
        at org.capnproto.Serialize.read(Serialize.java:91) 
~[runtime-0.1.1.jar:0.1.1]
        at org.capnproto.Serialize.read(Serialize.java:51) 
~[runtime-0.1.1.jar:0.1.1]
        at SerializedIterator.computeNext(SerializedIterator.kt:18)





-- 
You received this message because you are subscribed to the Google Groups 
"Cap'n Proto" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
Visit this group at https://groups.google.com/group/capnproto.

Reply via email to