Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / java.io.IOException: Mark invalid / 13 сообщений из 13, страница 1 из 1
06.04.2005, 10:36
    #32999638
GMax
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
java.io.IOException: Mark invalid
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
 import  java.io.*;

 public   class  ReadSettings {

    // Потоки для чтения из файла настроек
     private  FileInputStream fi =  null ;
     private  InputStreamReader ii =  null ;
     private  BufferedReader inb =  null ;

    // Конструктор класса
     public  ReadSettings (String filePath) {
         try  {
            fi =  new  FileInputStream (filePath);
            ii =  new  InputStreamReader (fi);
            inb =  new  BufferedReader (ii);
            // Маркируем начало файла, чтобы потом была возможность читать файл сначала
            inb.mark(fi.available());
        }
         catch  (FileNotFoundException e) {
            System.out.println ("Exception in ReadSettings.class: " + e);
            System.exit( 1 );
        }
         catch  (IOException e) {
            System.out.println ("Exception in ReadSettings.class: " + e);
            System.exit( 1 );
        }
    }
}

При выполнении кода н одной из машин ловится исключение: Exception in ReadSettings.class: java.io.IOException: Mark invalid.
Из-за чего может быть?
...
Рейтинг: 0 / 0
06.04.2005, 11:13
    #32999799
GMax
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
java.io.IOException: Mark invalid
Сорри, исключение появляется в этом куске:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
         try  {
            String line;
             while  ((line = inb.readLine()) !=  null ) {
                 if  (line.length() !=  0 )
                      if  (parametr.equals(line.substring( 0 ,parametr.length()))) {
                         inb.reset();                       // Переходим в начало файла
                          return  (cutParametr(line));
                     }
              }
        }
         catch  (IOException e) {
            System.out.println ("Exception in ReadSettings.class: " + e);
            System.exit( 1 );
        }

P.S. inb.markSupported() выдает true.
У меня на машине работает. Ничего не понимаю.
...
Рейтинг: 0 / 0
06.04.2005, 11:19
    #32999815
А.Грасоff™ JE
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
java.io.IOException: Mark invalid
reset()
If the stream has not been marked, or if the mark has been invalidated, or if the stream does not support reset(), or if some other I/O error occurs

фиг знает..
...
Рейтинг: 0 / 0
06.04.2005, 11:19
    #32999817
А.Грасоff™ JE
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
java.io.IOException: Mark invalid
А.Грасоff™ JE reset()
If the stream has not been marked, or if the mark has been invalidated, or if the stream does not support reset(), or if some other I/O error occurs

фиг знает..это в каких случаях при reset() возникает IOException
...
Рейтинг: 0 / 0
06.04.2005, 11:22
    #32999832
GMax
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
java.io.IOException: Mark invalid
Эт я и сам прочитал. Но мне что-то это не особо помогло :(
...
Рейтинг: 0 / 0
06.04.2005, 11:42
    #32999900
wessen
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
java.io.IOException: Mark invalid
Из описания методо mark


Parameters:
readAheadLimit - Limit on the number of characters that may be read while still preserving the mark. After reading this many characters, attempting to reset the stream may fail. A limit value larger than the size of the input buffer will cause a new buffer to be allocated whose size is no smaller than limit. Therefore large values should be used with care.
...
Рейтинг: 0 / 0
06.04.2005, 11:48
    #32999926
wessen
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
java.io.IOException: Mark invalid
Может вместо fi.available(), указать точную длинну файла? А то хз, что там эта эваилабле возвращает.
...
Рейтинг: 0 / 0
06.04.2005, 11:56
    #32999972
GMax
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
java.io.IOException: Mark invalid
Ты знаешь, что интересно. Твой пост навел меня на мысль. Я просто взял файл с машины, на которой класс не работал и запустил у себя. И получил тоже самое исключение.
Методом научного тыка было установлено, что если после последнего символа в файле не стоит символ перевода строки, то вываливается исключение (available = 96), а если в файл поставить символ перевода строки, то все нормально (available - 98).
Вот только пока не въехал почему.

Всем спасибо. Буду копать почему так происходит, или опишу проблему у себя в KB и забью :)

P.S. А ты не мог бы название темы не менять, а то по NNTP читать не удобно (твое письмо вываливается из цепочки)
...
Рейтинг: 0 / 0
06.04.2005, 12:11
    #33000055
wessen
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
java.io.IOException: Mark invalid
Так, а чего думать то, теперь же ясно, что ексепшион вылетает из-зя того, что available() возвращает неправильную(меньше) длинну файла, этот метод кстати, для определения длинны файла и не преднозначен.
Надо делать так

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
 try {
            File file= new  File("fileName");
             if (file.exists()){
                FileInputStream fis= new  FileInputStream(file);
                BufferedReader buff= new  BufferedReader( new  InputStreamReader(fis));
                buff.mark(( int )file.length());
            }
        } catch (IOException e){
            
        }

зы не проверял, не знаю...
зыы просвети, что такое NNTP?
...
Рейтинг: 0 / 0
06.04.2005, 13:03
    #33000262
GMax
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
java.io.IOException: Mark invalid
wessenТак, а чего думать то, теперь же ясно, что ексепшион вылетает из-зя того, что available() возвращает неправильную(меньше) длинну файла, этот метод кстати, для определения длинны файла и не преднозначен.
Дык, возврщает то же, что и FAR пишет, ту же длинну.
wessenзыы просвети, что такое NNTP?
Система новостей. Для чтения форума по почте.
тынц
...
Рейтинг: 0 / 0
06.04.2005, 13:11
    #33000297
wessen
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
java.io.IOException: Mark invalid
Дык, возврщает то же, что и FAR пишет, ту же длинну.

Так, а мой способ работает, или то же ексепшион вылетает?
...
Рейтинг: 0 / 0
06.04.2005, 13:16
    #33000311
GMax
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
java.io.IOException: Mark invalid
Та же ошибка :(
...
Рейтинг: 0 / 0
06.04.2005, 13:28
    #33000348
GMax
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
java.io.IOException: Mark invalid
В общем если делать так:
Код: plaintext
inb.mark(fi.available()+ 1 );
то проблем нет, хотя метод available() выдает ровно ту длинну, которую имеет файл.
Почему так, я не догадался.
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / java.io.IOException: Mark invalid / 13 сообщений из 13, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]