Ошибка bad-base64 при попытке записать информацию из inputStream - PullRequest
0 голосов
/ 21 сентября 2019

Я пытаюсь записать значение (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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...