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();
Run Code Online (Sandbox Code Playgroud)
我对这部分特别好奇
while(bytesRead = in.read(buffer))
Run Code Online (Sandbox Code Playgroud)
我们知道,在kotlin中,asigements被视为语句,而在java中,它们被视为表达式,因此这种结构只能在java中使用.
将这个java代码翻译成kotlin的最佳方法是什么?
Kir*_*man 10
不是按字面翻译代码,而是使用Kotlin的stdlib,它提供了许多有用的扩展功能.这是一个版本
val text = URL(urlSpec).openConnection().inputStream.bufferedReader().use { it.readText() }
Run Code Online (Sandbox Code Playgroud)
回答原始问题:你是对的,作业不被视为表达.因此,您需要将分配和比较分开.看一下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
}
Run Code Online (Sandbox Code Playgroud)
资料来源:https://github.com/JetBrains/kotlin/blob/a66fc9043437d2e75f04feadcfc63c61b04bd196/libraries/stdlib/src/kotlin/io/ReadWrite.kt#L114
| 归档时间: |
|
| 查看次数: |
365 次 |
| 最近记录: |