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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Поиск в файле 
:(
    Опции темы
can4ec
Дата 21.5.2007, 16:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Вопрос:
Можно ли в фале найти нужный объект например по ключу  и десериализовать его. Или как то по другому. Смысл найти объект в файле по значению. 
Мысли:
На скоко я понял каждый объект в файле лежит под каким то номером. Как этот номер можно заменить и как вернуть значение лежащие под этим номером? К примеру нужно вернуть объект у которого поле ключ равно 123456. Просто тогда эти номера можно было бы заменить на ключи и по ключу вернуть объект.
 
PM MAIL   Вверх
Maksym
Дата 21.5.2007, 16:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


.
***


Профиль
Группа: Участник Клуба
Сообщений: 1456
Регистрация: 19.8.2005
Где: Odessa, Black Sea

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



can4ec
Какой контекст задачи?
Можно положить все искомые объекты в Map и сериализовать и сохранить этот Map, а "находить объект в файле по значению" get'ом от Map'a после его десериализации.
PM MAIL   Вверх
can4ec
Дата 21.5.2007, 16:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата(Maksym @ 21.5.2007,  16:12)
can4ec
Какой контекст задачи?
Можно положить все искомые объекты в Map и сериализовать и сохранить этот Map, а "находить объект в файле по значению" get'ом от Map'a после его десериализации.

Контекст задачи поставлен так. Что в файле лежат объекты к примеру класса Фотография. Где то в программе мне понадобился объект файл с таким то именем. Мне нужно достать объект из файла  с таким именем (имя это поле в классе.). За сериализовать HashMap нельзя такое условие задачи. Надо именно среди объектов как-то найти нужный.
PM MAIL   Вверх
Maksym
Дата 21.5.2007, 16:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


.
***


Профиль
Группа: Участник Клуба
Сообщений: 1456
Регистрация: 19.8.2005
Где: Odessa, Black Sea

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



Странное ограничение... Чтобы эфективно находить нужный объект в наборе других -- объекты нужно как-то проиндексировать. Если уникальный идентификатор объекта хранится только в нем самом и никакой индексирующей структуры нет, то иначе как перебором по всему списку ты нужный не найдешь.
(зы. фотографии я бы в базе данных хранил, или в крайнем случае в виде файлов на диске)

Добавлено @ 16:56
перечитал все... как конкретно у тебя хранятся эти самый фотографии? все в одном файле, каждый в своем..? приведи какие нибудь фрагменты кода

Это сообщение отредактировал(а) Maksym - 21.5.2007, 16:59
PM MAIL   Вверх
can4ec
Дата 21.5.2007, 16:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата(Maksym @ 21.5.2007,  16:54)
Странное ограничение... Чтобы эфективно находить нужный объект в наборе других -- объекты нужно как-то проиндексировать. Если уникальный идентификатор объекта хранится в нем самом то иначе как перебором по всему списку ты нужный не найдешь.
(зы. фотографии я бы в базе данных хранил, или в крайнем случае в виде файлов на диске)

Я читал объекты хроняться в файле под номерами типа 1,2,3,.... И тогда можно ,как я понимаю,  было бы вынимать объект по номеру. Так можно? Это токо мысли.

Добавлено через 3 минуты и 40 секунд
Ну вот моя сериализация:
 
Код


 public void saveObject(Object object) throws MyException
    {
        ObjectOutputStream oos = null;

        try
        {
            FileOutputStream fos = new FileOutputStream(file, true);
            oos = new ObjectOutputStream(fos);
            oos.writeObject(object);
            

        }
        catch (IOException e)
        {
            throw new ErrFileException(ErrFileException.FILE_NOT_SAVE);
        }
        finally
        {
            try
            {
                oos.close();
            }
            catch (IOException ex)
            {
            }
        }

    }


а вот как вытащить объект например по ключу или по другому полю хз. Может что то с байтами сделать  я хз.
PM MAIL   Вверх
Maksym
Дата 21.5.2007, 17:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


.
***


Профиль
Группа: Участник Клуба
Сообщений: 1456
Регистрация: 19.8.2005
Где: Odessa, Black Sea

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



Цитата(can4ec @  21.5.2007,  16:58 Найти цитируемый пост)
И тогда можно ,как я понимаю,  было бы вынимать объект по номеру. Так можно?

Не думаю что можно непосредственно обратиться в нужное место файла (если используешь потоковый ввод\вывод, то точно нельзя), но если знаешь порядок в котором объекты писались в файл, то и извлекаться они будут в том же порядке. То есть если тебе нужен пятый записанный в файл объект, то можно пропустить из потока четыре и работать с пятым. Но эту самую информацию о порядке объектов нужно тоже где-то хранить. Вот тебе и индексация.

Это сообщение отредактировал(а) Maksym - 21.5.2007, 17:12
PM MAIL   Вверх
Samotnik
Дата 21.5.2007, 19:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Super star !
****


Профиль
Группа: Awaiting Authorisation
Сообщений: 7192
Регистрация: 4.11.2006
Где: Минск City

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



Не уверен на скока поможет, но попробуй просто прочитать файл(любым способом) и в условии поставь определенный символ(или значение) потом что найдет, то выдай на экран!!
PM MAIL   Вверх
LSD
Дата 21.5.2007, 22:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

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



can4ec, тебе нужно реализовать нечто наподобие ROWID в СУБД. Вопрос в том, имеет ли смысл изобретать свой велосипед или стоит использовать уже готовый типа Derby.

Цитата(Maksym @  21.5.2007,  18:10 Найти цитируемый пост)
если используешь потоковый ввод\вывод, то точно нельзя

Можно скипнуть нужное количество байт.



--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
shimopus
Дата 21.5.2007, 22:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



ну ты бы хоть вопрос правильно ставил на форуме, Сань ))

Ограничение возникает т.к. объектов много и все они разные. Каждый раз надо сохранять новые, изменять старые и удалять их. Но нужно, чтобы данные в файле были всегда актуальны. Хранить весь набор данных в одном файле - не гут, после первой сотни тысяч - время работы с любым объектом будет невыносимо большим. А ведь еще нужно время на отрисовку информации... Короче, нужно искать другое решение. 

Вот с этим вопросом к вам уважаемый can4ec и обратился....

Добавлено через 1 минуту и 27 секунд
Цитата(LSD @  21.5.2007,  23:37 Найти цитируемый пост)
Можно скипнуть нужное количество байт.



can4ec, обрати внимание. Это сделать можно!!
PM ICQ Skype GTalk   Вверх
Maksym
Дата 22.5.2007, 11:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


.
***


Профиль
Группа: Участник Клуба
Сообщений: 1456
Регистрация: 19.8.2005
Где: Odessa, Black Sea

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



Цитата(LSD @  21.5.2007,  22:37 Найти цитируемый пост)
Можно скипнуть нужное количество байт.

в чем отличие от "скипнуть нужное количество объектов"?
PM MAIL   Вверх
shimopus
Дата 22.5.2007, 12:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Цитата(Maksym @  22.5.2007,  12:51 Найти цитируемый пост)
в чем отличие от "скипнуть нужное количество объектов"? 

Можно пропустить нужное количество байт. Метод seek вроде называется, а чтобы пропустить нужное количество объектов, их надо сначала вытащить...
PM ICQ Skype GTalk   Вверх
Maksym
Дата 22.5.2007, 12:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


.
***


Профиль
Группа: Участник Клуба
Сообщений: 1456
Регистрация: 19.8.2005
Где: Odessa, Black Sea

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



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

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

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


 




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


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

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