私はJavaのI/Oクラスで作業しています。私は、2つの重要なタイプのストリームがあることを理解しています:バイトストリームと文字ストリーム。しかし...私はバイトストリームでテキストファイルを読み書きしようとしました。バイトストリームとJavaの文字ストリーム
File klasor = new File("C:\\Java");
if(!klasor.exists()) klasor.mkdirs();
File kaynakDosya = new File("C:\\Java\\kaynak.txt");
if(!kaynakDosya.exists()) kaynakDosya.createNewFile();
File hedefDosya = new File("C:\\Java\\hedef.txt");
if(!hedefDosya.exists()) hedefDosya.createNewFile();
FileInputStream kaynak = new FileInputStream(kaynakDosya);
FileOutputStream hedef = new FileOutputStream(hedefDosya);
int c;
while((c = kaynak.read()) != -1) {
hedef.write(c);
}
if(kaynak != null) {
kaynak.close();
}
if(hedef != null) {
hedef.close();
}
そして私は、文字ストリームと同じことをやった:ここでは、コードです
File klasor = new File("C:\\Java");
if(!klasor.exists()) klasor.mkdirs();
File kaynakDosya = new File("C:\\Java\\kaynak.txt");
if(!kaynakDosya.exists()) kaynakDosya.createNewFile();
File hedefDosya = new File("C:\\Java\\hedef.txt");
if(!hedefDosya.exists()) hedefDosya.createNewFile();
FileReader kaynak = new FileReader(kaynakDosya);
FileWriter hedef = new FileWriter(hedefDosya);
int c;
while((c = kaynak.read()) != -1) {
hedef.write(c);
}
if(kaynak != null) {
kaynak.close();
}
if(hedef != null) {
hedef.close();
}
これらの2つが同じ結果を生成しました。だから、私は知りたいのですが、なぜここではバイトストリームを使うべきではないのですか? (私はいくつかの記事だけでなく、stackoverflow上の関連する質問を読んで、彼らはそう言う)私は文字ストリームは文字で文字を読むことを知っているが、これは私にどのような利点を与えるのですか?バイトストリームを使用して文字を読み込むと、どのような問題が発生する可能性がありますか?私の質問がはっきりしていることを願っています私は実際の事例を感謝します。
を使用して期待するものが含まれている場合
String
とテストにバイト指向の入力ストリームを使用してそのテキストを読んでみてください、私は混乱しています:。すべてではありません2バイトで表現された文字?ファイル内のすべての文字を1バイトで表すことができますか?キリル文字 "Привет!"で試してみました。ソースファイル "UTF-8"のエンコーディングを維持し、ターゲットファイルのエンコーディングを "ANSI"に変更したとにかく動作しました。 –@AdemTepe - In UTF-8、0x7Fまでのコードポイントは1バイトで表されます。 (たとえば、[this thread](https://stackoverflow.com/questions/7136421/why-does-utf-8-use-more-than-one-byte-to-represent-some-characters)を参照してください)。あなたのバイト指向のコードはバイト単位でファイルをコピーするだけでうまく動作しますが、これらのバイトを文字(入力時)として解釈しようとした場合やバイトに文字を書き込もうとした場合方向付けられた流れ。私はこの点を明確にするために私の答えを更新します。 –