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(使用前将#替换为@)