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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Файл читать побайтно 
V
    Опции темы
DissDoc
Дата 9.6.2007, 09:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Всем привет!
Возникла проблема такого характера. Я читаю файл побайтно. В результате возникает куча вопросов и проблем.
1 проблема: читаю я файл, а он бывает больше заданного ограничения (ну например не вмещается в int). Тут как сделать так: в случает заполнения int - int  обнуляю и продолжаю читать побайтно в файл и писать в обнуленный int
2 проблема: могу читать текстовые файлы, а бинарные не могу. Хочу читать все файлы побайтно. Как?

Вот код:
Код

// Метод перевода байта в hex строку
    public static String byteToHex(byte data)
    {
        StringBuffer buf = new StringBuffer();
        buf.append(toHexChar((data >>> 4) & 0x0F));
        buf.append(toHexChar(data & 0x0F));
                
        return buf.toString();
    }
    
    // Метод перевода int в символ hex
    public static char toHexChar(int i)
    {
        if ((0 <= i) && (i <= 9)) return (char) ('0'+i);
        else return (char) ('a' + (i - 10));
    }

// и само чтение побайтно
InputStream is = new FileInputStream(file);
        System.out.println("\nDEBUG: FileInputStream is: "+file);
        
        // Возьмем размер файла
        long length = file.length();
        System.out.println("DEBUG: Length of file <"+file+"> is "+length);
        
        // ВОТ ТУТ ГРАМОТНО ОБРАБОТАТЬ НЕ МОГУ
        if (length > Integer.MAX_VALUE) {
            System.out.println("File id too large to process");
            return null;
        }

        
        byte[] bytes = new byte[(int)length];
        
        // Прочитаем данные побайтово
        int offset = 0;
        int numread = 0;
        
        while ((offset < bytes.length) &&
                ((numread = is.read(bytes, offset, bytes.length - offset)) >= 0))
            offset += numread;
        
        if (offset < bytes.length)
            throw new IOException("Could not completely read file " + file.getName());
        
        is.close();

PM MAIL WWW   Вверх
w1nd
Дата 9.6.2007, 22:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вертилятор
***


Профиль
Группа: Завсегдатай
Сообщений: 1077
Регистрация: 22.3.2006
Где: Москва

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



Ниасилил smile

Вы хотите считывать весь файл в память? Почему вы не можете считывать какие-либо другие файлы, кроме "текстовых"? Что вообще хотите сделать?


--------------------
user posted imageuser posted image
PM MAIL ICQ   Вверх
v2v
Дата 9.6.2007, 23:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1620
Регистрация: 20.9.2006
Где: Киев

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



как то всё у вас слишком сложно  smile 
Код

InputStream  is = FileInputStream("file_read");
OutputStream os = new FileOutputStream("file_write");
for (int b = is.read(); b >= 0; b = is.read()) {
    os.write(b);
}
os.close();

вот это мы побайтно читаем один файл и сохраняем его в другой.
Работает. и для бинарніх и наверное для текстовых. ( я такой код для сохранения рисунков использовал).


--------------------
PM   Вверх
nornad
Дата 10.6.2007, 15:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1079
Регистрация: 16.2.2007
Где: в Караганде

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



Я так подозреваю, что DissDoc подсчитывает CRC32 файла. Вывод это я делаю на основе ранее заданного им вопроса - Работа с 16ричной системой счисления.
В таком случае нужно в примере v2v всего лишь заменить строку 4 на такое:
Код

    res += b;

заранее объявив res как int.
Если подсчитывается действительно CRC32, то обнулять при переполнении не требуется. Если же автор считает что-то другое, то пусть, в конце концов, нормально и понятно объяснит, чего же он хочет.


--------------------
Три достоинства программиста: Леность, Нетерпение и Гордость
Ларри Уолл
PM MAIL WWW ICQ Skype MSN   Вверх
DissDoc
Дата 10.6.2007, 18:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Спасибо всем, я уже сам разобрался )))
nornad, а вы телепат ) Я пожалуй в следующий раз буду только название темы писать. Вопрос просто не нужен. 
Я сделал собственно как раньше и писалось - через FileInputStream.read()
А вот эмуляцию хеш-функции я сделал изощренное через количесво проходов и т.п. Нужно заметить, что число получается красивое )
PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
javastic
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: Общие вопросы | Следующая тема »


 




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


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

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