有没有一种方法来做这个gzip没有先去字符串,然后回到ByteArray?
suspend fun gzip(content: ByteArray): ByteArray = withContext(Dispatchers.IO) {
ByteArrayOutputStream().apply {
GZIPOutputStream(this).writer(UTF_8).use { it.write(String(content)) }
}.toByteArray()
}
suspend fun ungzip(content: ByteArray): ByteArray = withContext(Dispatchers.IO) {
GZIPInputStream(content.inputStream()).bufferedReader(UTF_8).use { it.readText() }.toByteArray()
}
您需要确保在通过toByteArray()
使用GZIPOutputStream
之前关闭它。当正确关闭缓冲区时,缓冲区将被写入输出流,并且不存在截断的数据。
suspend fun gzip(content: ByteArray): ByteArray = withContext(Dispatchers.IO) {
ByteArrayOutputStream().apply {
GZIPOutputStream(this)
.write(content)
.close()
}.toByteArray()
}
你可以通过
使用你的数据suspend fun ungzip(content: ByteArray) = withContext(Dispatchers.IO) {
GZIPInputStream(zipped.inputStream()).readAllBytes()
}