Remove use of direct Input to ByteArray conversions due to bugs in kotlinx.io.

This commit is contained in:
Alexander Nozik 2019-11-13 18:24:33 +03:00
parent 41d0cdb2b1
commit d10bd40763
4 changed files with 10 additions and 8 deletions

View File

@ -6,7 +6,7 @@ plugins {
id("scientifik.publish") version "0.2.2" apply false id("scientifik.publish") version "0.2.2" apply false
} }
val dataforgeVersion by extra("0.1.5-dev-2") val dataforgeVersion by extra("0.1.5-dev-3")
val bintrayRepo by extra("dataforge") val bintrayRepo by extra("dataforge")
val githubProject by extra("dataforge-core") val githubProject by extra("dataforge-core")

View File

@ -79,8 +79,10 @@ inline fun buildPacketWithoutPool(headerSizeHint: Int = 0, block: BytePacketBuil
} }
fun <T : Any> IOFormat<T>.writePacket(obj: T): ByteReadPacket = buildPacket { writeObject(obj) } fun <T : Any> IOFormat<T>.writePacket(obj: T): ByteReadPacket = buildPacket { writeObject(obj) }
//TODO Double buffer copy. fix all that with IO-2
@Deprecated("Not to be used outside tests due to double buffer write")
fun <T : Any> IOFormat<T>.writeBytes(obj: T): ByteArray = buildPacket { writeObject(obj) }.readBytes() fun <T : Any> IOFormat<T>.writeBytes(obj: T): ByteArray = buildPacket { writeObject(obj) }.readBytes()
@Deprecated("Not to be used outside tests due to double buffer write")
fun <T : Any> IOFormat<T>.readBytes(array: ByteArray): T = buildPacket { writeFully(array) }.readObject() fun <T : Any> IOFormat<T>.readBytes(array: ByteArray): T = buildPacket { writeFully(array) }.readObject()
object DoubleIOFormat : IOFormat<Double>, IOFormatFactory<Double> { object DoubleIOFormat : IOFormat<Double>, IOFormatFactory<Double> {

View File

@ -38,15 +38,15 @@ class TaggedEnvelopeFormat(
override fun Output.writeEnvelope(envelope: Envelope, metaFormatFactory: MetaFormatFactory, formatMeta: Meta) { override fun Output.writeEnvelope(envelope: Envelope, metaFormatFactory: MetaFormatFactory, formatMeta: Meta) {
val metaFormat = metaFormatFactory.invoke(formatMeta, io.context) val metaFormat = metaFormatFactory.invoke(formatMeta, io.context)
val metaBytes = metaFormat.writeBytes(envelope.meta) val metaBytes = metaFormat.writePacket(envelope.meta)
val actualSize: ULong = if (envelope.data == null) { val actualSize: ULong = if (envelope.data == null) {
0u 0u
} else { } else {
envelope.data?.size ?: ULong.MAX_VALUE envelope.data?.size ?: ULong.MAX_VALUE
} }
val tag = Tag(metaFormatFactory.key, metaBytes.size.toUInt() + 2u, actualSize) val tag = Tag(metaFormatFactory.key, metaBytes.remaining.toUInt() + 2u, actualSize)
writePacket(tag.toBytes()) writePacket(tag.toBytes())
writeFully(metaBytes) writePacket(metaBytes)
writeText("\r\n") writeText("\r\n")
envelope.data?.read { copyTo(this@writeEnvelope) } envelope.data?.read { copyTo(this@writeEnvelope) }
flush() flush()

View File

@ -37,10 +37,10 @@ class TaglessEnvelopeFormat(
//Printing meta //Printing meta
if (!envelope.meta.isEmpty()) { if (!envelope.meta.isEmpty()) {
val metaBytes = metaFormat.writeBytes(envelope.meta) val metaBytes = metaFormat.writePacket(envelope.meta)
writeProperty(META_LENGTH_PROPERTY, metaBytes.size) writeProperty(META_LENGTH_PROPERTY, metaBytes.remaining)
writeText(metaStart + "\r\n") writeText(metaStart + "\r\n")
writeFully(metaBytes) writePacket(metaBytes)
writeText("\r\n") writeText("\r\n")
} }