繁体   English   中英

在FileReader和InputStreamReader之间进行选择

[英]Choosing between FileReader and InputStreamReader

我有两种方法来读取文本文件在java中使用FileReader和其他文件InputStream

FileReader fr=new FileReader("C:\\testq\\test.txt");
BufferedReader br=new BufferedReader(fr);
String s;
while((s=br.readLine())!=null){
    System.out.println("value are "+s);
}

和其他是

FileInputStream fstream = new FileInputStream("C:\\testnew\\out.text");
DataInputStream in = new DataInputStream(fstream);
BufferedReader br = new BufferedReader(new InputStreamReader(in));
String strLine;
while ((strLine = br.readLine()) != null){
   System.out.println (strLine);
}

虽然两者都给我输出......我只是想知道哪种方法最好。

强烈建议使用InputStreamReader而不是FileReader ,但显式指定字符编码。 这确实是使用InputStreamReader的最大好处(并且缺乏为FileReader指定编码的能力是API中的一个主要漏洞,即IMO)。

我还使用DataInputStream删除“图层” - 只需将FileInputStream传递给InputStreamReader构造函数。

在Java 8之前

或者,考虑使用Guava中的一些便利方法,这可以使这种事情变得更加简单。 例如:

File file = new File("C:\\testnew\\out.text");
List<String> lines = Files.readLines(file, Charsets.UTF_8));

来自Java 8

Java 8在java.nio.files引入了一堆新的类和方法,其中许多默认(合理地)为UTF-8:

Path path = Paths.get("C:\\testnew\\out.text");
List<String> lines = Files.readAllLines(path);

这两种方法都可以,因为您使用BufferedReader,它可以通过无缓冲方法大大提高性能。 在第二种情况下,不需要将DataInputStream包装在DataInputStream中。 最后一种方法,让我们通过InputStreamReader指定文件编码,这通常是一件很重要的事情。

这取决于,如果你想读取一个只包含文本的文件(我的意思是文本文件),那么你应该使用第一种情况。

如果你想读一些代表二进制数据的文件(我的意思是图像文件或视频文件等),你应该使用第二种情况。

好吧,你最初从FileInputStream创建一个BufferedReader 你应该这样做:

FileInputStream fstream = new FileInputStream("C:\\testnew\\out.text");
BufferedInputStream bstream = new BufferedInputStream(fstream);

获得适当的流相关方法。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM