Я пытаюсь записать значение (base64) из входного потока в JsonWriter, используя base64.Но я получаю сообщение об ошибке "Причина: android.util.Base64DataException: bad base-64".Где может быть проблема?Если я напишу целую base64 в один момент, у меня не будет этой ошибки
fun getGsonFromOrderModel(orderMainModel: OrderMainModel): String {
val gson = GsonBuilder().registerTypeAdapter(InputStream::class.java, Adapter()).create()
return gson.toJson(orderMainModel)
}
class Adapter : TypeAdapter<InputStream>() {
override fun write(out: JsonWriter, value: InputStream) {
Base64InputStream(value, 0).use {
out.writeFromStream(it)
}
}
override fun read(`in`: JsonReader): InputStream {
throw UnsupportedOperationException()
}
// JsonWriter only offers value(String), which would need you to load the whole file to the memory.
private fun JsonWriter.writeFromStream(inputStream: InputStream) {
val declaredField = javaClass.getDeclaredField("out")
val deferredName = javaClass.getDeclaredMethod("writeDeferredName")
val beforeValue = javaClass.getDeclaredMethod("beforeValue")
declaredField.isAccessible = true
deferredName.isAccessible = true
beforeValue.isAccessible = true
val actualWriter = declaredField.get(this) as Writer
deferredName.invoke(this)
beforeValue.invoke(this)
val base64 = Base64.encodeToString(inputStream.readBytes(), Base64.DEFAULT)
actualWriter.write(base64)
}
}
Ошибка
Caused by: android.util.Base64DataException: bad base-64
at android.util.Base64InputStream.refill(Base64InputStream.java:148)
at android.util.Base64InputStream.read(Base64InputStream.java:121)
at java.io.FilterInputStream.read(FilterInputStream.java:107)
at kotlin.io.ByteStreamsKt.copyTo(IOStreams.kt:106)
at kotlin.io.ByteStreamsKt.copyTo$default(IOStreams.kt:103)
at kotlin.io.ByteStreamsKt.readBytes(IOStreams.kt:136)
at com.strangelove.cadastre.data.Adapter.writeFromStream(Adapter.kt:46)
at com.strangelove.cadastre.data.Adapter.write(Adapter.kt:23)
at com.strangelove.cadastre.data.Adapter.write(Adapter.kt:20)