FileInputStream vs FileReader

后端 未结 6 810
庸人自扰
庸人自扰 2020-11-28 04:32
FileReader rd=new FileReader(\"new.mp4\");
FileWriter wr=new FileWriter(\"output.mp4\");
int ch;
while((ch=rd.read())!=-1)
  wr.write(ch);

wr.flush();
wr.close();
<         


        
6条回答
  •  隐瞒了意图╮
    2020-11-28 04:58

    FileReader (and indeed anything extending Reader) is indeed for text. From the documentation of Reader:

    Abstract class for reading character streams.

    (Emphasis mine.) Look at the API and you'll see it's all to do with text - char instead of byte all over the place.

    InputStream and OutputStream are for binary data, such as mp4 files.

    Personally I would avoid FileReader altogether though, as it always uses the system default character encoding - at least before Java 11. Instead, use InputStreamReader around a FileInputStream... but only when you want to deal with text. (Alternatively, use Files.newBufferedReader.)

    As an aside, that's a very inefficient way of copying from an input to an output... use the overloads of read and write which read into or write from a buffer - either a byte[] or a char[]. Otherwise you're calling read and write for every single byte/character in the file.

    You should also close IO streams in finally blocks so they're closed even if an exception is thrown while you're processing them.

提交回复
热议问题