Для x86, по крайней мере, возвращаемое значение этой функции должно быть в регистре eax
. Все, что было там, будет считаться возвращаемым значением вызывающего абонента.
Поскольку eax
используется как регистр возврата, он часто используется как регистр «царапины» по вызову, потому что его не нужно сохранять. Это означает, что очень возможно, что он будет использоваться как любая из локальных переменных. Поскольку оба они равны в конце, более вероятно, что правильное значение останется в eax
.
Мне нужно хранить данные в файлах внутри .jar-файла и читать его снова
blockquote>Нет, вы этого не делаете.
Вместо этого сохраните 'default 'файл внутри Jar. Если он изменен, сохраните измененный файл в другом месте. Одно общее место - подкаталог
user.home
. При проверке файла сначала проверьте наличие измененного файла в файловой системе, а если он не существует, загрузите файл по умолчанию.
Обратите внимание, что, как правило, лучше описывать а не стратегии. «Сохранить измененный файл в Jar» является стратегией, тогда как «Сохранить настройки между запусками» может быть целью.
Связано: Что является проблемой XY?
Class.getResource()
возвращает URL-адрес. Теоретически вы можете использовать этот URL для создания своих InputStream
и OutputStream
. Но в большинстве случаев сгенерированный JAR является файлом, доступным только для чтения (или архивом). Таким образом, ваше приложение может отключиться при попытке его использовать.
Вы можете манипулировать любым файлом jar с помощью пакета java.util.jar
(или действительно только java.util.zip
). Поскольку файлы внутри банки будут сжаты, это не самый эффективный способ time для хранения данных.
Вероятно, вы должны использовать каталог где-нибудь еще (например, System.getProperty("user.home") + "/.myProgram"
) или см. java.util.prefs
.
Вряд ли вы можете безопасно изменить загруженную банку. Изменение его во время его использования не является хорошей идеей.
Если вы хотите это сделать, используйте простой файловый системный каталог и добавьте / удалите из него файлы. Даже это может не работать так, как вы ожидаете.
Это не поддерживается. В принципе, вы можете работать с файлом jar, но нет гарантии, что новое содержимое будет правильно загружено. Пусть ваши инструменты сборки управляют файлом jar - и выберите что-то еще для постоянной памяти, управляемой вашей программой. Как файл.