我需要在Scala中编写一个函数,它返回一个用AvroOutputStream序列化的字节数组,但是在scala中,我无法获得传入输入的通用对象的类。 这是我的util类:
class AvroUtils {
def createByteArray[T](obj: T): Array[Byte] = {
val byteArrayStream = new ByteArrayOutputStream()
val output = AvroOutputStream.binary[T](byteArrayStream)
output.write(obj)
output.close()
byteArrayStream.toByteArray()
}
}
正如您所看到的,如果测试此代码,AvroOutputStream无法识别T类,因此无法为其生成架构。 希望你能帮忙!感谢
PS:已经尝试使用TypeTag和ClassTag,没有任何作用。
答案 0 :(得分:1)
您需要为T
添加正确的含义,即SchemaFor
和ToRecord
:
def createByteArray[T : SchemaFor : ToRecord](obj: T): Array[Byte] = {
val byteArrayStream = new ByteArrayOutputStream()
val output = AvroOutputStream.binary[T](byteArrayStream)
output.write(obj)
output.close()
byteArrayStream.toByteArray()
}