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();
FileReader
とFileWriter
を使用してmp4ファイルを読み書きすると、output.mp4
ファイルを適切にレンダリングできません。しかし、代わりにFileInputStream
とFileOutputStream
を使用するとうまくいきました。
FileReader
とFileWriter
はテキストの読み取りと書き込み専用であると結論付けることはできますか?
はい、あなたの結論はReader
とWriter
の正しいサブクラスはテキストコンテンツの読み書きのためです。 InputStream
/OutputStream
はバイナリコンテンツ用です。ドキュメントを見ると:
Reader
-文字ストリームを読み取るための抽象クラス
InputStream
-抽象クラスは、バイトの入力ストリームを表すすべてのクラスのスーパークラスです。
FileReader
(そして確かにanythingReaderを拡張する)は確かにtext用です。 Reader
のドキュメント から:
文字ストリームを読み取るための抽象クラス。
(Emphasis mine。)APIを見ると、テキストに関係していることがわかります-char
ではなくbyte
が至る所にあります。
InputStream
およびOutputStream
は、mp4ファイルなどのバイナリデータ用です。
個人的には、システムのデフォルトの文字エンコーディングを常に使用するので、FileReader
は完全に避けます。代わりに、InputStreamReader
...の周りにFileInputStream
を使用します。ただし、テキストを処理したい場合のみです。
余談ですが、これは入力から出力にコピーする非常に非効率的な方法です...バッファに読み書きするread
とwrite
のオーバーロードを使用します-byte[]
またはchar[]
。それ以外の場合は、ファイル内のすべてのバイト/文字に対して読み取りと書き込みを呼び出しています。
また、また、close IO finally
ブロック内のストリームなので、あなたがいる間に例外がスローされても閉じられますそれらを処理します。
FileInputStream
は、生の画像など、生のデータバイトのストリームを読み取るために使用されます。一方、FileReaders
は、文字のストリームの読み取りに使用されます
FileInputStream
とFileReader
の違いは、FileInputStream
はファイルをバイト単位で読み取り、FileReader
はファイルを文字単位で読み取ります。
したがって、"Č"
のFileInputStream
値は196 140
であるため、文字Č
を含むファイルを読み取ろうとすると、ASCII
の結果は268
になります。
FileReader
では、結果が268
として返されます。これは、char Č
のASCII
値です。
「FileWriterは文字のストリームを書き込むためのものです。生バイトのストリームを書き込む場合は、FileOutputStreamの使用を検討してください。」
http://download.Oracle.com/javase/1.4.2/docs/api/Java/io/FileWriter.html
FileWriterとFileReaderは、文字のストリーム用に設計されています...
宜しくお願いします。
フルカン
テキストファイルはfileReader
とfileInputStream
の両方を使用して読み取ることができますが、mp3とpngはfileInputStream
を使用してのみ読み取ることができます
fileReader
は文字ごとに文字を読み取ります
fileInputStream
はバイト単位で読み取ります