将 java 代码翻译成 kotlin 的最佳方法

2023-11-23

URL url = new URL(urlSpec);
HttpURLConnection connection = (HttpURLConnection)url.openConnection();
InputStream in = connection.getInputStream();
int bytesRead = 0;
byte[] buffer = new byte[1024];
while ((bytesRead = in.read(buffer)) > 0) {
    out.write(buffer, 0, bytesRead);
}
out.close();

我对这部分特别好奇

while(bytesRead = in.read(buffer))

我们知道,asigements 在 kotlin 中被视为语句,而在 java 中它们被视为表达式,因此这种构造只能在 java 中使用。

将这个 java 代码翻译成 kotlin 的最佳方法是什么?


不要直接翻译代码,而是使用 Kotlin 的 stdlib,它提供了许多有用的扩展函数。这是一个版本

val text = URL(urlSpec).openConnection().inputStream.bufferedReader().use { it.readText() }

回答原来的问题:你是对的,赋值不被视为表达式。因此,您需要将分配和比较分开。看一下 stdlib 中的实现示例:

public fun Reader.copyTo(out: Writer, bufferSize: Int = DEFAULT_BUFFER_SIZE): Long {
    var charsCopied: Long = 0
    val buffer = CharArray(bufferSize)
    var chars = read(buffer)
    while (chars >= 0) {
        out.write(buffer, 0, chars)
        charsCopied += chars
        chars = read(buffer)
    }
    return charsCopied
}

Source: https://github.com/JetBrains/kotlin/blob/a66fc9043437d2e75f04feadcfc63c61b04bd196/libraries/stdlib/src/kotlin/io/ReadWrite.kt#L114

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将 java 代码翻译成 kotlin 的最佳方法 的相关文章

随机推荐