1
所以說我有一個從套接字連接返回的流。流被返回以'\ 0'結尾,但在kotlin中我似乎無法得到這個以相同的方式工作。下面的代碼是用Java編寫的,我可能只是看起來很簡單。從套接字響應中按字符讀取Kotlin字符中的空字符
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 to 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()
}
的可能的複製[在科特林,我怎麼讀的InputStream的全部內容爲一個字符串? ](https://stackoverflow.com/questions/39500045/in-kotlin-how-do-iread-the-entire-contents-of-an-inputstream-into-a-string) –
我們不知道數據的格式是什麼。如果您正在讀取,直到您收到零*字節*,然後以字節讀取並檢查此零字節。如果您正在讀取特定字符集的編碼字節流,請爲該字符集創建適當的讀取器並讀入並檢查單個字符。 –
我正在閱讀流的空字符。流從UTF-8服務器返回爲UTF-8。 –