从DataInputStream单个字符读取数据时,我试图在DataInputStream中写入String,但是出现错误。
我希望readChar()
返回'q',但是方法:
assertEquals('q', DataInputStream("q".byteInputStream(Charsets.UTF_8)).readChar())
引发异常:
java.io.EOFException 在java.io.DataInputStream.readChar(DataInputStream.java:365)
答案 0 :(得分:1)
请查看DataInput.readChar()
,其中指出:
读取两个输入字节并返回一个char值。令
a
为读取的第一个字节,b
为第二个字节。返回的值为:(char)((a << 8) | (b & 0xff))
此方法适合于读取由接口
writeChar
的DataOutput
方法写入的字节。
最后一句话基本上也是解决方案。如果您使用writeChar
写入数据,则读取将按预期进行,即以下内容将为您提供成功的测试用例:
assertEquals('q', DataInputStream(ByteArrayOutputStream().apply {
DataOutputStream(this).use {
it.writeChars("q")
}
}.toByteArray().inputStream())
.readChar())
以下内容,即使在界面中未提及,也可以解决:
assertEquals('q', DataInputStream("q".byteInputStream(Charsets.UTF_16BE)).readChar())