加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

尝试读取整个文件时出现MalformedInputException

发布时间:2020-12-16 09:01:00 所属栏目:安全 来源:网络整理
导读:我有一个132 kb的文件(你真的不能说它很大)而且我正在尝试从 Scala REPL中读取它,但我无法读取过去的2048 char,因为它给了我一个java.nio.charset.MalformedInputException例外 这些是我采取的步骤: val it = scala.io.Source.fromFile("docs/categorizer/u
我有一个132 kb的文件(你真的不能说它很大)而且我正在尝试从 Scala REPL中读取它,但我无法读取过去的2048 char,因为它给了我一个java.nio.charset.MalformedInputException例外

这些是我采取的步骤:

val it = scala.io.Source.fromFile("docs/categorizer/usig_calles.json") // this is ok
it.take(2048).mkString // this is ok too
it.take(1).mkString // BANG!

java.nio.charset.MalformedInputException: Input length = 1
at java.nio.charset.CoderResult.throwException(CoderResult.java:277)
at sun.nio.cs.StreamDecoder.implRead(StreamDecoder.java:338)
at sun.nio.cs.StreamDecoder.read(StreamDecoder.java:177)
at java.io.InputStreamReader.read(InputStreamReader.java:184)

知道什么可能是错的吗?

显然问题是该文件不是UTF编码的

我把它保存为UTF并且一切正常,我只是在迭代器上发出mkString并检索文件的全部内容

奇怪的是,这个错误只会引起前2048个字符的传递……

解决方法

如果没有该文件,则无法确定,但异常文档表明,当输入字节序列对于给定字符集不合法,或者输入字符序列不是合法的16位Unicode序列时,它将被抛出. ( MalformedInputException javadoc)

我怀疑在2049年遇到的第一个字符对于您环境中的默认JVM字符编码无效.考虑使用fromFile的重载之一明确说明文件的字符编码.

如果应用程序是跨平台的,您应该知道JVM上的默认字符编码确实因平台而异,因此如果您使用特定编码进行操作,则要么在启动应用程序时将其显式设置为命令行参数,或者使用适当的重载在每次调用时指定它.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读