从JSON对象kotlin中发送的Byte Array创建文件

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

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

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

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

编辑:在深入比较iOS和Android过程之后,我注意到在iOS中它将数据写入文件,并且数据与Android文档中出现的文本相同。 所以我试图将这些数据转换成DataOutputStream并通过它写入字节(更新的代码)。 在我的脑海中,当我写下它的时候是有道理的,但结果是一样的。 这可能有助于看到“文本”这样的输出:

{\ rtf1 \ deff0 {\ fonttbl {\ f0 Calibri;}} {\ colortbl; \ red0 \ green0 \ blue255;} {* \ defchp \ fs22} {\ stylesheet {\ ql \ fs22 Normal;} {* \ cs1 \ {* \ cs2 \ sbasedon1 \ fs22行号;} {* \ cs3 \ ul \ fs22 \ cf1超链接;} {* \ ts4 \ tsrowd \ fs22 \ ql \ tscellpaddfl3 \ tscellpaddl108 \ tscellpaddfb3 \ tscellpaddfr3 \ tscellpaddr108 \ tscellpaddft3 \ tsvertalt \ cltxlrtb Normal Table;} {* \ 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 Table Simple 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完成,所以异步方面是照顾而不是问题的一部分。