filereader与bufferedreader或fileinputstream相结合

dluptydi  于 2021-07-13  发布在  Java
关注(0)|答案(3)|浏览(403)

我不知道什么时候应该使用 FileReaderBufferedReader 什么时候用 FileInputStream 用于读取文件(并输出到日志)?

/**
 * Created by mona on 3/26/16.
 */
import java.io.File;
import java.io.FileInputStream;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.BufferedReader;
public class FileExample {

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

        File newFile = new File("tweet.txt");

        FileWriter fileWriter = new FileWriter(newFile);
        fileWriter.write("Mona Jalal");
        fileWriter.append("\nMona Mona");
        fileWriter.close();
        /*FileReader fileReader = new FileReader(newFile);
        BufferedReader bufferedReader = new BufferedReader(fileReader);
        String line;
        while ((line = bufferedReader.readLine()) != null) {
            System.out.println(line);
        }
        fileReader.close();
        bufferedReader.close();
        */
        FileInputStream fis = new FileInputStream(newFile);
        System.out.println("fis");
        System.out.println(fis.read()); //prints 77
        int content;
        while ((content=fis.read())!=-1){
            System.out.print((char) content);
        }
        fis.close();

    }
}

我正在使用 Java 8 .

92vpleto

92vpleto1#

用于读取原始字节:fileinputstreamhttps://docs.oracle.com/javase/7/docs/api/java/io/fileinputstream.html
fileinputstream从文件系统中的文件获取输入字节。哪些文件可用取决于主机环境。fileinputstream用于读取原始字节流,如图像数据。要读取字符流,请考虑使用filereader。
用于高效读取字符、数组、行(使用缓冲区)https://docs.oracle.com/javase/7/docs/api/java/io/bufferedreader.html
从字符输入流中读取文本,对字符进行缓冲,以便有效地读取字符、数组和行。可以指定缓冲区大小,也可以使用默认大小。默认值对于大多数情况都足够大。
通常,读取器发出的每个读取请求都会导致对底层字符或字节流发出相应的读取请求。因此,建议将bufferedreader Package 在任何read()操作可能代价高昂的读取器(如filereaders和inputstreamreaders)周围。例如,
bufferedreader in=new bufferedreader(new filereader(“foo.in”));
将缓冲指定文件的输入。在没有缓冲的情况下,每次调用read()或readline()都可能导致从文件中读取字节,转换为字符,然后返回,这可能非常低效。
java有非常好的文档!

7bsow1i6

7bsow1i62#

Reader 它正在扩展类

java.io.Reader
    java.io.InputStreamReader
         java.io.FileReader

假设 input stream 是一个文本和做铸造 (char) 自动地。 InputStream 它是亚类

java.io.InputStream
    java.io.FileInputStream

不做任何假设,只读取字节。
如果你知道这是一个文本文件-使用 Reader ,如果你不能假设-使用 InputStream .

polhcujo

polhcujo3#

public class FileReader    extends InputStreamReader

用于读取字符文件的便利类。此类的构造函数假定默认字符编码和默认字节缓冲区大小是合适的。要自己指定这些值,请在fileinputstream上构造inputstreamreader。
filereader用于读取字符流。要读取原始字节流,请考虑使用fileinputstream。

public class BufferedReader extends Reader

从字符输入流中读取文本,对字符进行缓冲,以便有效地读取字符、数组和行。可以指定缓冲区大小,也可以使用默认大小。默认值对于大多数情况都足够大。
通常,读取器发出的每个读取请求都会导致对底层字符或字节流发出相应的读取请求。因此,建议将bufferedreader Package 在任何read()操作可能代价高昂的读取器(如filereaders和inputstreamreaders)周围。例如,

BufferedReader in  = new BufferedReader(new FileReader("foo.in"));

将缓冲指定文件的输入。在没有缓冲的情况下,每次调用read()或readline()都可能导致从文件中读取字节,转换为字符,然后返回,这可能非常低效。使用datainputstreams进行文本输入的程序可以通过用适当的bufferedreader替换每个datainputstream来本地化。

相关问题