![]() |
Модераторы: LSD, AntonSaburov |
![]() ![]() ![]() |
|
Goliath |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 246 Регистрация: 1.3.2005 Репутация: 1 Всего: 5 |
Доброго времени суток есть вопрос по чтению файлов. Есть ли в Java возможность читать файл как в Delphi или С++ ниже привожу пример.
--------------------
Наша жизнь растрачивается на мелочи… Упрощайте, упрощайте. [Генри Торо] |
|||
|
||||
powerOn |
|
|||
![]() software saboteur ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 4367 Регистрация: 7.10.2005 Репутация: 47 Всего: 159 |
В Java нет структур. В Java есть классы, и хотя по смыслу и похожие вещи, но реализованны по разному.
В Dephi и C++ так можно делать поскольку в памяти структура представляет собой непрерывный диапазон ячеек. Чтобы туда данные записать достаточно знать начальный адрес. Поля потом читываться будут по смещению от начального адреса структуры. Java более высокоуровневый язык и не оперирует указателями. Поэтому, думаю, что способов подобного чтения нет. ![]() ![]() Это сообщение отредактировал(а) MoonCat - 18.4.2006, 08:21 |
|||
|
||||
ALKS |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 354 Регистрация: 22.3.2006 Репутация: 1 Всего: 11 |
Не понимаю сути вопроса. какая разница как читать фаил? тебе нужно прочитать фаил в память? - в ява есть море способов это сделать. да по другому. ну и что? главное ведь результат.
|
|||
|
||||
COVD |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1655 Регистрация: 26.7.2005 Репутация: 17 Всего: 43 |
Не совсем так. Сериализация пишет в виде пар: параметр=значение. Чем длинней имена переменных, тем длинней файл. Структура - это одни голые значения. Поэтому такой файл придется читать по байтам или использовать методы типа readInt(), readFloat(). Фактически вручную выковыривать данные. |
|||
|
||||
garm |
|
|||
Новичок Профиль Группа: Участник Сообщений: 39 Регистрация: 23.3.2006 Репутация: 2 Всего: 2 |
На самом деле там всё немножко хитрее устроено. Когда мы первый раз пишем объект в поток, сохраняются данные о классе, в том числе и имена полей. А потом идут значения этих полей, в том же порядке, в каком шли их имена. Если же мы пишем ещё один объект того же класса, то там ставится ссылка на уже записанное определение, а потом идут значения полей. Так что если мы сохраняем много объектов одного и того же класса, накладные расходы будут не очень велики. Хотя, конечно, будут. |
|||
|
||||
Goliath |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 246 Регистрация: 1.3.2005 Репутация: 1 Всего: 5 |
Всем спасибо. Просто удобно так считывать данные. Придется самому писать.
--------------------
Наша жизнь растрачивается на мелочи… Упрощайте, упрощайте. [Генри Торо] |
|||
|
||||
LSD |
|
|||
![]() Leprechaun Software Developer ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 15718 Регистрация: 24.3.2004 Где: Dublin Репутация: 210 Всего: 538 |
На самом деле там еще хитрей все устроено ![]() Имена полей не пишутся вообще. Вначале идет заголовок потока (он один на всю сессию записи), потом полное имя класса или указание что это примитивный тип или строка, затем SerialVersionUID (прописанный явно или вычисленный), а затем поля (поля при записи сортируются). Goliath, на самом деле накладные расходы на объект составляют порядка 10-30 байт. Если это приемлемо, то сериализация неплохой вариант. И еще есть вариант, реализовать интерфейс Externalizable и самому управлять процессом сохранения. -------------------- 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. |
|||
|
||||
COVD |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1655 Регистрация: 26.7.2005 Репутация: 17 Всего: 43 |
по идее не должны, однако видел я эти имена, когда обьект писался в ObjectOutputStream и выводился байтовый массив. Это сообщение отредактировал(а) COVD - 18.4.2006, 21:18 |
|||
|
||||
Bozo |
|
|||
Новичок Профиль Группа: Участник Сообщений: 32 Регистрация: 5.4.2006 Репутация: нет Всего: нет |
|
|||
|
||||
ALKS |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 354 Регистрация: 22.3.2006 Репутация: 1 Всего: 11 |
у нас один процесс гдузит в память данные сериализациeй. сериализрованный заранее в фаил объект весьма не простой структуры. фаил около 300Mb. грузиться в памявть за пару десятков секунд на довольно средней машине. вы будете смеяться но после ряда эксперементов это оказался самый быстрый способ загрузки... |
|||
|
||||
garm |
|
|||
Новичок Профиль Группа: Участник Сообщений: 39 Регистрация: 23.3.2006 Репутация: 2 Всего: 2 |
||||
|
||||
![]() ![]() ![]() |
Правила форума "Java" | |
|
Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Java: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |