Понимание потоков данных и обработка их исключений

Вот как я записываю свой файл.

    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, зарегистрируйте ошибку, закройте поток и прервите работу.

Другие вопросы по тегам