繁体   English   中英

Kotlin 中的压缩字节 []。 Java 代码到 Kotlin

[英]Zip byte[] in Kotlin. Java code to Kotlin

我正在尝试使用此 Java 代码,但在 Android Studio 中将其转换为 Kotlin,但我在 Kotlin 中找不到setSize(..).length在 kotlin 中的等效项。 有人可以帮助我吗?

public static byte[] zipBytes(String filename, byte[] input) throws IOException {
    ByteArrayOutputStream baos = new ByteArrayOutputStream();
    ZipOutputStream zos = new ZipOutputStream(baos);
    ZipEntry entry = new ZipEntry(filename);
    entry.setSize(input.length);
    zos.putNextEntry(entry);
    zos.write(input);
    zos.closeEntry();
    zos.close();
    return baos.toByteArray();
}

阵列中科特林具有size字段,而不是Java数组lengthsize字段是Int在科特林,但ZipEntry.setSize(long size)只接受long 所以你可以做这样的事情:

entry.setSize(input.size.toLong())

或者以更符合 Kotlin 习惯的方式:

entry.size = input.size.toLong()

尝试使用此代码:

进口:

import java.io.IOException
import java.text.DecimalFormat
import java.util.zip.ZipEntry
import java.util.zip.ZipOutputStream

你在 kotlin 中编码:

@Throws(IOException::class)
fun zipBytes(filename: String?, input: ByteArray): ByteArray? {
    val baos = ByteArrayOutputStream()
    val zos = ZipOutputStream(baos)
    val entry = ZipEntry(filename)
    entry.size = input.size.toLong()
    zos.putNextEntry(entry)
    zos.write(input)
    zos.closeEntry()
    zos.close()
    return baos.toByteArray()
}

当您像这样在 kotlin 中编写 byteArray 时:

 val byteArray = ByteArray(1024)
 var length = byteArray.size

文件说

字节数组。 当面向 JVM 时,此类的实例表示为byte[] @constructor 创建一个指定 [size] 的新数组,所有元素都初始化为零。

为了证明这一点,检查创建的字节码是这样的:

 byte[] byteArray = new byte[1024];
 int test = byteArray.length;

因此,在您的情况下,可以这样编码。

entry.size = byteArray.size

但是size类型是int并且entry.size需要一个long值,只需将.toLong()添加到size解决此问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM