Kotlin中的Zip字节[]。Kotlin的Java代码

Kotlin中的Zip字节[]。Kotlin的Java代码,java,android,kotlin,Java,Android,Kotlin,我试图使用这个Java代码,但在Android Studio中将其转换为Kotlin,但我在Kotlin中找不到与Kotlin中的setSize(…)和.length等效的代码。有人能帮我吗 public static byte[] zipBytes(String filename, byte[] input) throws IOException { ByteArrayOutputStream baos = new ByteArrayOutputStream(); ZipOut

我试图使用这个Java代码,但在Android Studio中将其转换为Kotlin,但我在Kotlin中找不到与Kotlin中的
setSize(…)
.length
等效的代码。有人能帮我吗

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();
}

Kotlin中的数组有
size
字段,而不是Java数组
length
size
字段在Kotlin中是
Int
,但是
ZipEntry.setSize(long size)
只接受
long
。所以你可以这样做:

entry.setSize(input.size.toLong())
或者用更通俗的方式:

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[]
。 @构造函数创建指定[size]的新数组,所有元素初始化为零

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

 byte[] byteArray = new byte[1024];
 int test = byteArray.length;
因此,在您的情况下,可以这样编写代码

entry.size = byteArray.size
但是
size
的类型是
int
entry。size
需要一个
long
值,只需将
.toLong()
添加到
size
中,就可以解决这个问题。

可能,它的答案可能会对您有所帮助。如果没有,请分享您是否在文档中搜索过。