开发者社区> 问答> 正文

java.nio.charset.MalformedInputException: Input le

"

package test;

import java.io.BufferedReader; import java.io.IOException; import java.nio.file.Files; import java.nio.file.Paths;

public class TestTest {

public static void main(String[] args) throws IOException {

// BufferedReader br=Files.newBufferedReader(Paths.get("data/tmp2.txt")); BufferedReader br=Files.newBufferedReader(Paths.get("/home/username/Documents/TokenizeThenSplitParallelDeletePatternLTZero.txt")); //BufferedReader br=Files.newBufferedReader(Paths.get("/home/username/Documents/temp.txt")); int cnt=0; while(br.ready()){ String text = br.readLine(); cnt++; if(cnt>=47334){ System.out.println(text); } System.out.println("cnt = "+cnt); } }

}
Exception in thread "main" java.nio.charset.MalformedInputException: Input length = 2
    at java.nio.charset.CoderResult.throwException(CoderResult.java:281)
    at sun.nio.cs.StreamDecoder.implRead(StreamDecoder.java:339)
    at sun.nio.cs.StreamDecoder.read(StreamDecoder.java:178)
    at java.io.InputStreamReader.read(InputStreamReader.java:184)
    at java.io.BufferedReader.fill(BufferedReader.java:161)
    at java.io.BufferedReader.readLine(BufferedReader.java:324)
    at java.io.BufferedReader.readLine(BufferedReader.java:389)
    at test.TestTest.main(TestTest.java:17)

百度之后的结果都是对java NIO Exception in thread "main" java.nio.charset.MalformedInputException: Input length = 1这种的回答。我的文件是utf-8编码的,文件很大,所以就没有上传了。但是当我将第一行到出错那行后面一点儿的所有内容,复制到一个新文件temp.txt中,再次运行,又不会出错了,不知道为什么。

"

展开
收起
因为相信,所以看见。 2020-05-27 12:58:56 939 0
1 条回答
写回答
取消 提交回答
  • 阿里,我所有的向往

    "

    public static void main(String[] args) throws IOException { File file = new File("/home/yangxiaohuan/Documents/TokenizeThenSplitParallelDeletePatternLTZero.txt"); InputStreamReader read = new InputStreamReader(new FileInputStream(file), "UTF-8");// 考虑到编码格式 BufferedReader br = new BufferedReader(read); int cnt=0; while(br.ready()){ String text = br.readLine(); cnt++; if(cnt>=47334){ System.out.println(text); } System.out.println("cnt = "+cnt); } } }

    原来的代码需要导入下面的类
    import java.nio.file.Files;
    import java.nio.file.Paths;
    但是换成这种形式
    import java.io.File;
    import java.io.FileInputStream;
    就是正常的,没有出错。
    而且还有朋友说,将原来的文本里面,将出错的那一行,删去一个字符也是不会报错的。很奇怪的问题。不知道为啥用nio.file.Files就是有问题的

    ######

    谢邀。你可能搞错了IO和NIO之间的区别,最基本的一点是IO是面向流的,NIO面向缓冲区的,而你的代码很明显是使用了BufferedReader以及InputStreamReader流,如果使用nio,readLine根本不能读取,NIO只能读取缓冲区,扫描缓冲区的大小,并且在解析数据时,比起阻塞IO流,NIO需要付出更大的代价。

    "
    2020-05-27 16:24:27
    赞同 展开评论 打赏
问答标签:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
Spring Cloud Alibaba - 重新定义 Java Cloud-Native 立即下载
The Reactive Cloud Native Arch 立即下载
JAVA开发手册1.5.0 立即下载