gpt4 book ai didi

java - 从套接字响应中逐字符读取 Kotlin 中的空字符

转载 作者:行者123 更新时间:2023-11-30 06:40:02 26 4
gpt4 key购买 nike

假设我有一个从套接字连接返回的流。返回的流以 '\0' 终止,但在 kotlin 中我似乎无法让它以同样的方式工作。下面的代码是用 Java 编写的,我可能只是忽略了一些简单的东西。

public final String readUpToNull(InputStream inputStream) throws IOException {
StringBuilder builder = new StringBuilder();
char ch;
while ((ch = (char) inputStream.read()) != '\0') {
builder.append(ch);
}
return builder.toString();
}

如果有人知道如何在 Kotlin 中使用流与套接字通信时执行此操作。这里的另一篇文章涵盖了阅读完整的文本字符串。套接字返回由“\0”分隔的较长字符串。所以问题是我需要能够加载第一个字符串,然后加载第二个字符串。

Example

Server : hello\0 xml stuff all right here\0
Client: read hello
Client: read xml stuff all right here

来自 kotlinlang.org 的示例代码将此展示为使用 Java 到 Kotlin 转换器的解决方案。请注意,由于 while 语句中的赋值,此代码无法编译。

@Throws(IOException::class)
fun readUpToNull(inputStream:InputStream):String {
val builder = StringBuilder()
val ch:Char
while ((ch = inputStream.read() as Char) != '\u0000')
{
builder.append(ch)
}
return builder.toString()
}

这是我到目前为止所做的,但这个实现只是挂起进程并锁定 API 调用的单元测试。

fun readUpToNull(stream: InputStream): String {
val reader = BufferedReader(InputStreamReader(stream))
val builder = StringBuilder()
while (true) {
val characters = reader.readText().toCharArray()
characters.takeWhile { it != '\u0000' }.forEach { builder.append(it) }
break
}
return builder.toString()
}

最佳答案

以下是 Java 代码到 Kotlin 的或多或少的直接转换:

fun readUpToNull(inputStream: InputStream): String {
return buildString {
while (true) {
val ch = inputStream.read().toChar()
if (ch == '\u0000') break
append(ch)
}
}
}

关于java - 从套接字响应中逐字符读取 Kotlin 中的空字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44525033/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com