将这个java代码翻译成kotlin的最佳方式
发布时间:2020-12-15 05:14:02 所属栏目:Java 来源:网络整理
导读: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.w
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,bytesRead); } out.close(); 我对这部分特别好奇 while(bytesRead = in.read(buffer)) 我们知道,在kotlin中,asigements被视为语句,而在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,chars) charsCopied += chars chars = read(buffer) } return charsCopied } 资料来源:https://github.com/JetBrains/kotlin/blob/a66fc9043437d2e75f04feadcfc63c61b04bd196/libraries/stdlib/src/kotlin/io/ReadWrite.kt#L114 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |