kotlin - 为什么DataInputStream无法正确读取char?

标签 kotlin eofexception

从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 and b 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 interface 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())

关于kotlin - 为什么DataInputStream无法正确读取char?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58488192/

相关文章:

generics - Kotlin 是否有等效于 C#'s "default"的关键字?

android - 使用 Retrofit 将 JsonArray 转换为 Kotlin 数据类(预期为 BEGIN_OBJECT 但为 BEGIN_ARRAY)

java - ObjectInputStream.readObject 上的文件结尾异常

java - EOFExceptionon 读取 UDP

java - 使用 ObjectOutputStream 读取自定义类时出现 EOFException

android - 在 Kotlin Lambda 中调用 RxJava Single

kotlin - 我如何更改它以使用 "for loop"而不是 `forEach`

kotlin - 抛弃Kotlin箭头中的嵌套选项

java - 为什么会收到 java.io.EOFException 和 ArrayOutOfBounds 错误?帮助?

hibernate - org.hibernate.type.SerializationException : could not deserialize java. io.EOFException 在 java.io.ObjectInputStream$PeekInputStream.readFully