【发布时间】:2018-07-26 13:19:42
【问题描述】:
我正在尝试从 Socket 读取 UTF-16 字符串。关键是在读取字符串的前几个字符之前,我不知道它的字节长度。
所以我这样打开InputStreamReader:
InputStreamReader reader = new InputStreamReader(inputStream, "UTF-16");
然后我尝试逐个字符地读取它。
reader.read();
它在尝试读取第一个字符时挂起!
在调试过程中,我意识到InputStreamReader 有点试图读取整个InputStream,然后将其转换为UTF-16 字符序列。当然,它一直到字符串的末尾,它什么都没有,所以它只是等待客户端发送更多的字节。
InputStreamReader 真的是这样吗?如果是 - 我如何读取 UTF-16 InputStream 的一部分,或者更好的是单个字符,而不到达它的结尾?
【问题讨论】:
-
你可以试试 - new InputStreamReader(inputStream, Charset.forName("UTF-16"));
-
read()阻塞直到数据可用。因此,如果它阻塞,则流是空的。 -
“我假设您还没有阅读文档” - 我已经阅读了它,并且 InputStream 可以正常工作。返回直到字符串末尾的字节,然后挂起。
-
Charset.forName("UTF-16") - 试过了,没用。
-
“流是空的” - 不