Ich arbeite an I/O-Klassen in Java. Ich verstehe, dass es zwei wichtige Arten von Streams gibt: Byte-Stream und Zeichen-Stream. Aber ... Ich habe versucht, Textdatei mit Byte-Stream zu lesen und zu schreiben, und es hat funktioniert. Hier ist der Code:Byte Stream vs Zeichen Stream in 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();
}
Und dann habe ich das gleiche mit Zeichenstrom:
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();
}
Diese beiden das gleiche Ergebnis. Also, ich möchte wissen, warum sollte ich nicht Byte-Stream hier aber Zeichenstrom verwenden? (Ich habe einige Artikel sowie verwandte Fragen hier auf stackoverflow gelesen und sie sagen es) Ich weiß, dass der Zeichenstrom Zeichen für Zeichen lesen wird, aber welchen Vorteil hat das für mich? Oder welche Probleme könnten auftreten, wenn ich Zeichen mit Byte-Stream lese? Ich hoffe meine Frage ist klar. Ich würde gerne Fallbeispiele schätzen.
mit erwarte ich bin verwirrt: nicht alle die Zeichen, die durch zwei Bytes dargestellt werden? Was meinen Sie mit "wenn alle Zeichen in der Datei durch einzelne Bytes dargestellt werden können?" Ich habe es mit kyrillischem "Привет!" versucht und es hat auch funktioniert! Plus, ich habe habe die Codierung der Quelldatei "UTF-8" beibehalten und die Kodierung der Zieldatei in "ANSI" geändert, es hat trotzdem funktioniert. –
@AdemTepe - In UTF-8, Codepunkte bis zu 0x7F werden durch ein einzelnes Byte dargestellt. (Siehe [this thread] (https://stackoverflow.com/questions/7136421/why-does-utf-8-use-more-than-one-byte-to-represent-some-characters), zum Beispiel.) Ihr Byte-orientierter Code eignet sich gut, um eine Datei byteweise zu kopieren, aber dies behandelt nicht, was passieren würde, wenn Sie versuchen würden, diese Bytes als Zeichen zu interpretieren oder wenn Sie versuchten, Zeichen in ein Byte zu schreiben -orientierten Strom. Ich werde meine Antwort aktualisieren, um diesen Punkt zu klären. –