在压缩时避免先使用String



有没有一种方法来做这个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()
}

相关内容

  • 没有找到相关文章

最新更新