Модераторы: javastic, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> EOFException при чтении файла 
:(
    Опции темы
antoniobanderas
Дата 22.5.2009, 00:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 28
Регистрация: 4.10.2006

Репутация: нет
Всего: нет



Столкнулся со странной ситуацией smile
Читаю через jsr75 два бинарных файла, сначала один, потом второй. При чтении второго файла возникает следующее:
сначала прочитываю сигнатуру (4 байта), все нормально, потом далее идет int и остальные данные. Так вот при чтении этого инта
возникает откуда-то исключение конца файла (EOFException), и это при том что с первого файла считывалось все нормально. 
Такая беда пока только на телефоне, в эмуляторе все норм. Кто-нибудь может сказать что это за прикол? smile
PM MAIL   Вверх
eugine_s
Дата 22.5.2009, 01:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 581
Регистрация: 14.11.2007
Где: Киев

Репутация: 17
Всего: 17



А какие тут собственно варианты? 
DataInputStream: 

readInt() 

Throws:
    EOFException - if this input stream reaches the end before reading four bytes. 

Нужно чтобы было 4-ре байта, а у тебя нет их
PM MAIL   Вверх
antoniobanderas
Дата 22.5.2009, 01:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 28
Регистрация: 4.10.2006

Репутация: нет
Всего: нет



как это нет, в том то все и дело что есть, файл который я открываю имет размер 11 кб, там не только 4 байта есть. И на эмуляторе все открывается, файлы те же.

и кстати только что проверил на другом телефоне (SE), там все считалось правильно. По-видимому пробелма в телефоне, но почему он с первого файла считывает тогда не понятно...

Это сообщение отредактировал(а) antoniobanderas - 22.5.2009, 02:32
PM MAIL   Вверх
eugine_s
Дата 22.5.2009, 09:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 581
Регистрация: 14.11.2007
Где: Киев

Репутация: 17
Всего: 17



Сложно сказать, в чем причина - нужны исходники.

Цитата(antoniobanderas @  22.5.2009,  01:57 Найти цитируемый пост)
и кстати только что проверил на другом телефоне (SE)

Какой был первый телефон, на котором не работало? 


PM MAIL   Вверх
antoniobanderas
Дата 22.5.2009, 17:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 28
Регистрация: 4.10.2006

Репутация: нет
Всего: нет



Не работает на Samsung E200 и D900i
Вот основыне методы. 
Метод openBook() вызывается из файлового браузера, в отдельном потоке.

Код

public void openBook(String path)
    {
        disp.setCurrent(form);
            
        try
        {
            // Устанавливаем соединение    
            FileConnection fc = (FileConnection)Connector.open(path);
            DataInputStream is = fc.openDataInputStream();
            
            // Читаем сигнатуру
            byte[] bSign = new byte[4];
            is.readFully(bSign);
            String sSign = new String(bSign);
            if (!sSign.equals("BOOK")) return;
            
            // Настраиваем ридер на чтение little-endian данных
            AdvancedInputStream ais = new AdvancedInputStream(is);
            ais.setLittleEndian();
            
            // Читаем кол-во страниц
            numPages = ais.readInt();
            
            int num = is.readUnsignedByte();
            byte[] buf = new byte[num];
            is.readFully(buf);
            pagePrefix = new String(buf);
            
            is.close();
            fc.close();
        }
        catch (EOFException e)
        {
            appendToForm("EOFException");
        }
        catch (IOException e)
        {    
            e.printStackTrace();
        }
        
        // Копируем путь к директории
        int index = path.lastIndexOf('/');
        String dir = path.substring(0, index + 1);
        
        // Загружаем страницу
        BookPage page = new BookPage(this);
        page.load(dir + pagePrefix + 1 + ".pge");        
    }

В нем все читается нормально. AdvancedInputStream это просто обертка над DataInputStream, 
который просто в зависимости от режима переворачивает байты или не переворачивает.

Вот метод BookPage.load() в котором возникает исключение:
Код

public boolean load(String path)
    {
        manager.appendToForm("Reading " + path + "...");
        try
        {
            // Устанавливаем соединение
            fc = (FileConnection)Connector.open(path);
            // Открываем поток для чтения сложных данных
            is = fc.openDataInputStream();    
            ais = new AdvancedInputStream(is);
            ais.setLittleEndian();
            
            int avail = ais.is.available();
            manager.appendToForm("Avail : " + String.valueOf(avail)); //На телефоне здесь пишет что доступно 11 кб, на эмуляторе 0 ))
            
            // Читаем сигнатуру
            byte[] bSign = new byte[4];
            is.readFully(bSign);
            String sSign = new String(bSign);
            if (!sSign.equals("PAGE")) return false;
            
            manager.appendToForm("Signature is good");
            
            // Читаем ширину и высоту
            width = ais.readInt(); // Вот ЗДЕСЬ ИСКЛЮЧЕНИЕ EOFException

            manager.appendToForm("Width : " + String.valueOf(width));
            height = ais.readInt();
            manager.appendToForm("Height: " + String.valueOf(height));
            
            // Читаем представление цвета
            colorInterpretation = ais.readShort();
            manager.appendToForm("Color: " + String.valueOf(colorInterpretation));
            
            // Читаем кол-во байт данных изображения
            numImageBytes = ais.readInt();
            manager.appendToForm(String.valueOf(numImageBytes));
            
            try
            {
                compressedImage = new byte[numImageBytes];
                
                manager.appendToForm("Memory was allocated successfully");
                
                // Читаем само изображение
                is.readFully(compressedImage);
                manager.appendToForm("Image was read");
            }
            catch (OutOfMemoryError e)
            {
                manager.appendToForm("Out of memory");
            }
            
            
            
            
            manager.appendToForm("ok");
            
            is.close();
            fc.close();
        }
        catch (EOFException e) 
        {
            manager.appendToForm("EOFException: " + e.getMessage());
        }
        catch (IOException e)
        {
            manager.appendToForm("IOException");
        }
        
        return true;
    }




Это сообщение отредактировал(а) antoniobanderas - 22.5.2009, 17:18
PM MAIL   Вверх
antoniobanderas
Дата 25.5.2009, 11:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 28
Регистрация: 4.10.2006

Репутация: нет
Всего: нет



Вообщем, я пока еще надеюсь что когда-нибудь сюда заглянет человек, который может сказать в чем может быть проблема, поэтому:
когда гружу другой файл заместо этого, такого же формата, те 4 байта стали считываться smile но почему то перестали считываться след 4 байта, выскакивает то же исключение. Очень странно...

Это сообщение отредактировал(а) antoniobanderas - 25.5.2009, 11:42
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса

  • Прежде чем задать вопрос прочтите это!
  • Литература по Java находится здесь.
  • Литературу по Java обсуждаем здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит" (возле кнопок кодов) если у Вас нет русских шрифтов.
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда

  • FAQ раздела лежит здесь!
 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java ME (J2ME) | Следующая тема »


 




[ Время генерации скрипта: 0.1098 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.