假设有2个人安装了2个电话,并且安装了相同的程序:
-人员A
-人B
人员A的程序希望在不通过互联网的情况下共享大约6个信息变量。
-选项1:QR码。有效。
-选项2:COMPRESSED(又名尽可能短)编码字符串。可行,但看起来很糟糕。 这个问题与选项2有关。
由于我缺乏知识(愚蠢),我向您道歉:
我想到了压缩变量(我只是在变量之间加了一个定界符,以便接收者可以读取它),然后使用Deflator()/ Inflator()发送结果OUTPUT:
val output = ByteArray(512)
val compresser = Deflater(9)
compresser.setInput(encodedText)
compresser.finish()
val compressedDataLength = compresser.deflate(output)
compresser.end()
code.text = output**.toString()** + "°" + compressedDataLength.toString()
如果我使用output.toString(charset(“ UTF-8”))打印输出,则得到的字符串很长,带有“?Unknown”字符。不好。
如果我使用output.toString()打印输出,则会得到一个非常简短的字符串,但是当我尝试使用以下命令将其解压缩时:
val rawCode = code.text.toString() //user pastes "Coded String"
val tokensRaw = StringTokenizer(code.text.toString(), "°") // Separate length and data
val CompressedData = tokensRaw.nextToken()
val dataLength = tokensRaw.nextToken()
decompresser = Inflater()
decompresser.setInput(CompressedData.toByteArray(), 0, dataLength.toInt())
val result = ByteArray(512)
val resultLength = decompresser.inflate(result)
decompresser.end()
解压缩数据时出现ArrayIndexOutOfBounds错误。
现在,这是在使用简短的“字符串”时。如果我发送长未知字符串,则可以正常工作。但是字符串又长又丑,我不妨使用Base64来“加扰”数据。
我猜.toString()会破坏数据,而.toString(charset(“ UTF-8”))会保留数据,但是会很长。