Java: Сохранить объекты в текстовом файле? Есть ли готовые решения?

В данный момент вы звоните $('#mainDiv').prop("scrollHeight"), #mainDiv скрыто с display: none;. Такой элемент имеет scrollHeight, равный 0.

Показать #mainDiv, прежде чем пытаться прокрутить его:

$(document).ready(function() {

  $('#openDiv').on('click', function() {
    $('#openDiv').hide();
    $('#closeDiv').show();

    $("#mainDiv").show();

    $("#mainDiv").animate({
      scrollTop: $('#mainDiv').prop("scrollHeight")
    }, 1000);
  });

  $('#closeDiv').on('click', function() {
    $('#closeDiv').hide();
    $("#mainDiv").hide();
    $('#openDiv').show();
  });

});
#mainDiv {
  height: 150px;
  background-color: #2A2A2A;
  overflow-y: auto;
  overflow-x: hidden;
  display: none;
}

#divText {
  color: #fff;
  background-color: #555555;
  height: 20px;
}

#divTextEnd {
  color: #fff;
  background-color: red;
  height: 20px;
}

#openDiv {
  background-color: green;
  border: none;
  color: #fff;
}

#closeDiv {
  display: none;
  background-color: red;
  border: none;
  color: #fff;
}
<button id="openDiv">Open div</button>
<button id="closeDiv">Close div</button>

<div id="mainDiv">

  <div id="divText">
    <h5>text</h5>
  </div>
  <div id="divText">
    <h5>text</h5>
  </div>
  <div id="divText">
    <h5>text</h5>
  </div>
  <div id="divText">
    <h5>text</h5>
  </div>
  <div id="divTextEnd">
    <h5>text</h5>
  </div>

</div>

<script src="https://code.jquery.com/jquery-3.3.1.min.js" integrity="sha256-FgpCb/KJQlLNfOu91ta32o/NMZxltwRo8QtmkMRdAu8=" crossorigin="anonymous"></script>

7
задан Jonas 24 June 2010 в 22:36
поделиться

7 ответов

Можно использовать DB Беркли PersistentMap класс для сохранения Вашего (Serializable) объекты в a Map реализация (кэш), который сохраняет их в файл. Это довольно просто в использовании и означает, что Вы не должны волноваться о том, что сохранить где.

Три вещи отметить о сериализации:

  1. Как Вы собирающийся справляться с изменениями схемы (т.е. изменяющийся, какие данные Ваши классы состоят из - добавление нового поля, например),
  2. Что происходит, если Ваш файл (файлы) становится поврежденным? В зависимости от того, насколько надежный устройство хранения данных Вашей программы должно быть, будет влиять на Ваше решение о том, как Вы сохраняете данные, которые неявно содержат Ваши объекты. Помните, можно всегда использовать реляционную базу данных, такую как MySQL и затем преобразовывать эти данные в объекты
  3. Необходимо ли смочь просмотреть или запросить данные за пределами программы? Что, если Вы хотите ответить на некоторый простой вопрос как, "Сколько объект имеет свойство X?" Легкий сделать, если Вы использовали (реляционную) базу данных; не настолько легкий, если Вы сериализировали материал в файлы!
4
ответ дан 6 December 2019 в 10:04
поделиться

Да, понятие, которое Вы ищете, называют сериализацией. Существует прекрасное учебное руководство в Sun здесь.

Идея состоит в том, что классы, которые Вы хотите сохранить, должны реализовать сериализуемый интерфейс. После этого Вы используете java.io. ObjectOutputStream.writeObject () для записи объекта в файл и java.io. ObjectInputStream.readObject () для чтения его назад.

Вы не можете сериализировать все, поскольку существуют вещи, которые не имеют смысла сериализировать, но можно работать вокруг них. Вот кавычка об этом:

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

С другой стороны, определенные классы системного уровня, такие как Поток, OutputStream и его подклассы и Сокет не являются сериализуемыми. Действительно, это не имело бы никакого смысла, если бы они были. Например, поток, работающий в моей JVM, использовал бы память моей системы. Сохранение его и попытка выполнить его в Вашей JVM не имели бы никакого смысла вообще. Другой важный момент о java.lang. Объект, которым не реализация сериализуемого интерфейса состоит в том, что любой класс Вы создаете, который расширяет только Объект (и никакие другие сериализуемые классы) не является сериализуемым, если Вы не реализуете интерфейс сами (как сделано с предыдущим примером).

Та ситуация представляет проблему: что, если у нас есть класс, который содержит экземпляр Потока? В этом случае мы можем когда-либо сохранять объекты того типа? Ответ да, пока мы говорим механизму сериализации наши намерения путем маркировки объекта Потока нашего класса как переходный процесс.

13
ответ дан 6 December 2019 в 10:04
поделиться

Можно хотеть проверить Эффективный Java для некоторых глюков относительно сериализации. Они обычно совершенствуются, но если этой функцией будет базовая часть Вашего приложения, то Вы захотите знать о них заранее.

В качестве примера можно привести проблемы безопасности, наследование и самое главное потенциал, чтобы публично 'заморозить' API с пониманием его (например, через версии программного обеспечения). Снова, они все совершенствуются и не должны удерживать Вас по сути.

2
ответ дан 6 December 2019 в 10:04
поделиться

Вы могли бы также хотеть рассмотреть использование кодирования XML, которое, кажется, мне имеет больше длительности, чем сериализация. Использовать java.beans.XMLEncoder/XMLDecoder классы.

0
ответ дан 6 December 2019 в 10:04
поделиться

java.io. Объект [ввод/вывод], Поток является этими двумя классами, на которые необходимо посмотреть.
Любой класс Вы хотите сохраниться для регистрации потребностей реализовать java.io. Сериализуемый интерфейс.

0
ответ дан 6 December 2019 в 10:04
поделиться

Я не использовал его, но Google Code недавно выпустил protobuf.

0
ответ дан 6 December 2019 в 10:04
поделиться

Я согласен с мнением, что Протокол буферизует из Google - лучший способ хранить объекты, чем исходный способ сериализации. Посмотрите, и вам понравится.

0
ответ дан 6 December 2019 в 10:04
поделиться
Другие вопросы по тегам:

Похожие вопросы: