На сайте есть похожие вопросы, но все они использовались в разных сценариях. Итак, я спрашиваю его здесь:Почему метод FileInputStream read() ошибочно читает знак вопроса (ascii: 63) при вводе в бесконечный цикл?
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();
}
}
}
Это мой код. В условии while while я сначала установил его для вывода вывода int через read() в char. В результате он перешел в бесконечный цикл со всеми символами, которые были преобразованы в '?' (ascii: 63). Затем я осознал свою ошибку преобразования символов и изменил ее.
Но когда я изменил условие while на «= -2» (без преобразования символов) (это условие никогда не произойдет и, следовательно, поместит его в бесконечный цикл). Здесь, даже если нет преобразования символов, первые (скажем, 10) действительные символы файла все еще преобразуются в '?'. (После того, как он достигнет EOF, все недопустимые символы становятся «?» - я предполагаю, что это дано).
Почему это происходит? По крайней мере, допустимые символы файла должны быть правильно прочитаны, пока не встретится с EOF и не начнет подавать недопустимые символы!
* "типажей а результат in.read() на char - это плохой стиль. "* - Не только плохой стиль. В зависимости от фактической кодировки файла это может быть просто неверно. –
Кроме того, трудно написать UTF-8, вероятно, плохая идея. Более безопасным предположением было бы использовать кодировку по умолчанию для чтения и записи. –