Понимание потоков данных и обработка их исключений
Вот как я записываю свой файл.
BufferedReader read = new BufferedReader(new FileReader(filetoreadfrom));
FileOutputStream fileStream = new FileOutputStream(filetowriteto);
DataOutputStream dataStream = new DataOutputStream(fileStream);
String temp;
while((temp = read.readLine()) != null){
String[]arrayTemp = temp.split("\\|");
dataStream.writeInt(Integer.parseInt(arrayTemp[0]));
dataStream.writeInt(Integer.parseInt(arrayTemp[1]));
dataStream.writeUTF(arrayTemp[2]); }
Поэтому я пытаюсь записать двоичный файл, и он, кажется, работает нормально. Но когда я пытаюсь прочитать его обратно, я получаю IOExceptions.
Вот как я читаю в моем файле.
DataInputStream in = new DataInputStream(new BufferedInputStream(new FileInputStream("data.bin")));
int one,two,eight;
String three,
while(true){
one = in.readInt();
two = in.readInt();
three = in.readUTF();}
Я смотрел на страницу учебника для потоков данных в
http://docs.oracle.com/javase/tutorial/essential/io/datastreams.html
и из того, что я понимаю в примере, который он показывает, перехватывает условие конца файла, перехватывая исключение EOFException? И из того, что я вижу из API, это подкласс IOException, который помогает мне понять, почему я это получаю.
Чего я не понимаю, так это как справиться с этим без возникновения исключений. Я попытался сделать что-то вроде in.read() == -1, а затем сломаться, но безрезультатно, я все еще получаю исключение.
1 ответ
API уже разработан. Вы не можете изменить, как это работает. Получите исключение EOFException отдельно от IOException, закройте поток и прервите его. Когда вы ловите IOException, зарегистрируйте ошибку, закройте поток и прервите работу.