从DataInputStream读取单个字符时,我试图在DataInputStream中写入String,但是出现错误。
我期望readChar()
返回'q',但是方法是:
assertEquals('q', DataInputStream("q".byteInputStream(Charsets.UTF_8)).readChar())
引发异常:
java.io.EOFException at java.io.DataInputStream.readChar(DataInputStream.java:365)
最佳答案
请查看 DataInput.readChar()
,其中指出:
Reads two input bytes and returns a char value. Let
a
be the first byte read andb
be the second byte. The value returned is:(char)((a << 8) | (b & 0xff))
This method is suitable for reading bytes written by the
writeChar
method of interfaceDataOutput
.
最后一句话基本上也是解决方案。如果您使用
writeChar
写入数据,则读取将按预期进行,即以下内容将为您提供成功的测试用例:assertEquals('q', DataInputStream(ByteArrayOutputStream().apply {
DataOutputStream(this).use {
it.writeChars("q")
}
}.toByteArray().inputStream())
.readChar())
即使在界面中未提及,以下内容也可以解决:
assertEquals('q', DataInputStream("q".byteInputStream(Charsets.UTF_16BE)).readChar())
关于kotlin - 为什么DataInputStream无法正确读取char?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58488192/