从JSON对象kotlin

时间:2017-09-21 14:10:35

标签: android arrays kotlin fileoutputstream

我有一个包含字节数组的JSON对象。该字节数组应该创建一个文件。我已经在iOS中完成了这项工作,然而,它尝试在Android中执行相同的任务,生成的文件中的文本完全不同。我已经找到了很多关于将byteArray写入文件的问题和解决方案,并且在尝试了大约6种方法之后,到目前为止,这是我的解决方案(可能不是我尝试过的最好的方法,但它们都输出了相同的文件内容:< / p>

val bytes: ByteArray = (json["Data"] as JsonArray<Byte>).toByteArray()
val bufferedOut = BufferedOutputStream(FileOutputStream(file)) 
val output = DataOutputStream(bufferedOut)
output.write(bytes)
output.close()

我已经比较了byteArray(我在我的代码的这个公式中知道它是一个Int的列表,但它是一个从klaxon JsonObject安全地转换的简短方法)在工作的iOS版本和这个版本之间它们完全匹配。然而,它的输出完全不同,Android中有一堆乱码。

我一直认为编码必须不同,但是我已经阅读了类似问题的一些答案,其中有人说Java不使用编码,所以我哪里出错?

编辑:在对iOS和Android进程进行更深入的比较后,我注意到在iOS中它正在编写数据到文件,并且数据与Android文档中出现的文本相同。所以我尝试将该数据转换为DataOutputStream并通过它写入字节(更新的代码)。在我的脑海里,当我写它时它是有意义的,但结果是一样的。可能有助于查看“文本”,因此这是输出:

  

{\ rtf1 \ deff0 {\ fonttbl {\ f0 Calibri;}} {\ colortbl; \ red0 \ green0 \ blue255;} {* \ defchp \ fs22} {\ stylesheet {\ ql \ fs22 Normal;} {* \ cs1 \ fs22默认段落字体;} {* \ cs2 \ sbasedon1 \ fs22行号;} {* \ cs3 \ ul \ fs22 \ cf1超链接;} {* \ ts4 \ tsrowd \ fs22 \ ql \ tscellpaddfl3 \ tscellpaddl108 \ tscellpaddfb3 \ tscellpaddfr3 \ tscellpaddr108 \ tscellpaddft3 \ tsvertalt \ cltxlrtb正常表;} {* \ ts5 \ tsrowd \ sbasedon4 \ fs22 \ ql \ trbrdrt \ brdrs \ brdrw10 \ trbrdrl \ brdrs \ brdrw10 \ trbrdrb \ brdrs \ brdrw10 \ trbrdrr \ brdrs \ brdrw10 \ trbrdrh \ brdrs \ brdrw10 \ trbrdrv \ brdrs \ brdrw10 \ tscellpaddfl3 \ tscellpaddl108 \ tscellpaddfr3 \ tscellpaddr108 \ tsvertalt \ cltxlrtb表简单1;}} {* \ listoverridetable} {\ info {\ creatim \ yr2017 \ mo1 \ dy23 \ hr12 \ min44} {\ VERSION1}} \ nouicompat \ splytwnine \ htmautsp \ sectd \ PARD \平原\ QL \ FS22 \帕}

此外,这是用于将文件共享到文本编辑器的代码:

val shareIntent = Intent(Intent.ACTION_SEND)
shareIntent.putExtra(Intent.EXTRA_STREAM, Uri.fromFile(file))
shareIntent.type = "text/*"
startActivity(Intent.createChooser(shareIntent, "Save file in..."))

所有事情都是根据Kotlin Coroutines完成的,因此异步方面得到了解决,而不是问题的一部分。

0 个答案:

没有答案