我在数据结构分配(霍夫曼代码)中使用StringReader,并且正在测试是否已到达字符串的结尾。我发现StringReader.read()返回的int值不是-1,而是65535,因此将结果转换为字节可以解决我遇到的无限循环问题。

这是JDK中的错误,还是将Reader.read()调用返回的值转换为字节的常见做法?还是我错过了什么?

我的代码的要旨是这样的:

StringReader sr = new StringReader("This is a test string");
char c;
do {
    c = sr.read();
//} while (c != -1);     //<--Broken
} while ((byte)c != -1); //<--Works

最佳答案

实际上,它甚至不能编译。我得到:


  类型不匹配:无法从int转换为char


由于sr.read()调用返回一个int,因此建议您将其存储为此类。

这样可以编译(并按预期工作):

StringReader sr = new StringReader("This is a test string");
int i;               // <-- changed from char
do {
    i = sr.read();

    // ... and if you need a char...
    char c = (char) i;

} while (i != -1);   // <-- works :-)





  为什么StringReader.Read()不返回字节?


字符串由16位unicode字符组成。这些将不适合8位字节。有人可能会说char就足够了,但是没有空间提供达到EOF的迹象。

08-04 20:30