Es gibt einige ähnliche Fragen auf der Website, aber alle wurden in verschiedenen Szenarien verwendet. Also, ich frage es hier:Warum liest die FileInputStream read() -Methode ein Fragezeichen falsch (ascii: 63), wenn sie in die Endlosschleife gesetzt wird?
package Assign6B;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
public class FileOpsDemo {
public static void main(String[] args) throws IOException
{
FileInputStream inputFile = null;
FileOutputStream outputFile = null;
try
{
inputFile = new FileInputStream("s:/inputFile.txt");
outputFile = new FileOutputStream("s:/outputFile.txt");
char c;
while((c = (char) inputFile.read()) != -1)
{
System.out.println((char)c);
outputFile.write(c);
}
System.out.println("File transfer complete!");
}
finally
{
if (inputFile != null)
inputFile.close();
if (outputFile != null)
outputFile.close();
}
}
}
Das ist mein Code. In der while-Schleife-Bedingung, zuerst hatte ich es gesetzt, um die int-Ausgabe von read() in ein char typisieren. Das Ergebnis war, dass es in eine Endlosschleife ging und alle Zeichen in "?" (ascii: 63). Dann habe ich meinen Fehler bei der Kohle-Konvertierung erkannt und geändert.
Aber wenn ich meine while-Bedingung zu "= -2" (ohne die Char-Konvertierung) geändert hat (diese Bedingung wird nie auftreten und damit in die Endlosschleife). Auch hier werden die ersten (z. B. 10) gültigen Zeichen der Datei noch in "?" Umgewandelt, selbst wenn keine Konvertierung stattfindet. (Nach dem Erreichen von EOF werden alle ungültigen Zeichen zu '?' - ich gehe davon aus, dass dies gegeben ist).
Warum passiert das? Zumindest die gültigen Zeichen der Datei sollten richtig gelesen werden, bis sie auf den EOF stoßen und sich mit ungültigen Zeichen versorgen!
* "ein das Ergebnis der in.read typecasting() zu char ist schlechter Stil. "* - Nicht nur schlechter Stil. Abhängig von der tatsächlichen Dateicodierung kann es einfach falsch sein. –
Auch das Schreiben von UTF-8 ist wahrscheinlich eine schlechte Idee. Eine sicherere Annahme wäre, den Plattform-Standardzeichensatz zum Lesen und Schreiben zu verwenden. –