2010-06-25 3 views
1

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

Как бы это сделать, особенно если я хочу сохранить другие данные вместе с ним, возможно, объекты и т. Д. Я знаю, что вы можете использовать класс ObjectOutputStream, но я не уверен, как его интегрировать с изображениями.

В общем, я хочу, чтобы программа могла читать/записывать данные, объекты и изображения в/из одного файла.

Спасибо заранее.

[EDIT - Из ответов + комментарий о Zip Files]

молнии может быть в состоянии получить работу.

Но я хочу, чтобы это была только программа. (Вы думаете, что сделать его zip, изменение расширения файла будет работать, а затем, читая его просто chaing его обратно и чтение как zip ??) Я не хочу, чтобы пользователи могли видеть содержимое напрямую.

Подумайте о том, как немного говорить о своей игре, и пользователи могут создавать свой собственный контент, используя xml-файлы, изображения и т. Д. Но когда пользователь создает что-то, я не хочу, чтобы другие пользователи могли точно видеть, как они его создали, или то, что они использовали, только конечный результат.

+0

Будет ли это работать, чтобы упаковать их в ZIP-архив? (Вам не нужна Java, чтобы это сделать) –

+0

Спасибо за ответы ребята. Почтовый индекс может быть выполнен. Но я хочу, чтобы это была только программа. (Вы думаете, что сделать его zip, изменение расширения файла будет работать, а затем, читая его просто chaing его обратно и чтение как zip ??) Я не хочу, чтобы пользователи могли видеть содержимое напрямую. Искройте немного больше, говоря о своей игре, и пользователи могут создавать свой собственный контент, используя xml-файлы, изображения и т. Д. Но когда пользователь создает что-то, я не хочу, чтобы другие пользователи могли видеть, как именно он создан, только конечный результат. – Larry

ответ

1

Вы можете запрограммировать создание zip-файла и читать zip-файл с Java, не нужно раскрывать его как обычный .zip-файл.

См: java.io.zip Pacakge для получения дополнительной информации, а также другие these для образцов кода, о том, как read/write зип с помощью Java.

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

Вы можете прочитать больше о формате интернет сообщение here

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

Это может быть:

  • Заголовок с именами (и количество) файлов в этом пакете.
  • Вслед за списком разделителей (например limit.a.txt=yadayada некоторые идентификатору знать, что вы закончили с этим содержанием)
  • Фактическое содержание

Таким образом, вы создаете пакет с чем-то вроде следующего:

public void createBundle() { 
    ZipOutputStream out = .... 
    writeHeader(out); 
    writeLimits(out yourFiles); 
    for(File f : youFiles) { 
     writeFileTo(f, out); 
    } 
    out.close(); 
} 

Сортировать по ...

И результат будет архивный файл с чем-то вроде:

filenames =a.jpg, b.xml, c.ser, d.properties, e.txt 
limits.a.jpg =poiurqpoiurqpoeiruqeoiruqproi 
limits.b.xml =faklsdjfñaljsdfñalksjdfa 
limit.s.ser =sdf09asdf0as9dfasd09fasdfasdflkajsdfñlk 
limit.d.properties =adfa0sd98fasdf90asdfaposdifasdfklasdfkñm 
limit.e.txt =asdf9asdfaoisdfapsdfñlj 
attachments= 
<include binary data from a.jpg here> 
--poiurqpoiurqpoeiruqeoiruqproi 
<include binary data from b.xml here> 
--faklsdjfñaljsdfñalksjdfa 

и т.д.

Поскольку ваш формат файла вы можете сохранить его как можно более простым или осложнить вашу жизнь в бесконечности.

Если вам удастся включить в приложение MIME-библиотеку, это может сэкономить вам много времени.

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

Таким образом, в зависимости от ваших потребностей вы можете перейти от простого почтового индекса, почтового индекса с настраиваемым форматом, zip со сложным customformat или zip с помощью специального сложного зашифрованного формата.

Поскольку это расширительное вы можете спросить о конкретных частях здесь: https://stackoverflow.com/questions/ask

+0

Спасибо за подробный отклик, вам нужно некоторое время взглянуть на все это. – Larry

+0

Надеюсь, это поможет. BTW, Добро пожаловать в Stackoverflow. Если вы найдете ответ, который вам полезен, вы можете его перенести (щелкнув верхний треугольник рядом с вопросом) или понизите его, если что-то покажется неудачным.Кроме того, если вы найдете ответ, который точно ответит на ваши сомнения, вы можете пометить его как принятое (щелкнув зеленую стрелку под номерами) B-) – OscarRyz

2

В вашем случае я бы использовал ZIP-библиотеку для упаковки всех изображений в ZIP-файл. Для метаданных, которые вы хотите сохранить вместе с ними, используйте файлы XML. Сегодня XML и ZIP довольно де-факто стандартизированы, просты в обращении и хотя и гибкие, если вы хотите добавить новые файлы или метаданные. Существуют также сериализующие инструменты для сериализации ваших объектов в XML. (Я не знаю их точно на Java, но я уверен, что есть.)

+0

Проверьте второй комментарий (три похожих ответа сортируются, поэтому я просто разместил его там) – Larry

0

Да, просто упакуйте их/их распаковать с помощью java.util.zip. * Это довольно просто. Каждая версия Windows с XP имеет встроенную поддержку zip, поэтому вам хорошо. Существует много хороших (и более быстрых) бесплатных zip-библиотек для java/C#.

0

Я знаю, что вы можете использовать класс ObjectOutputStream, но я не уверен, как его интегрировать с изображениями.

Изображение двоичные данные, поэтому чтение его в byte[] и написании byte[] к ObjectOutputStream должен работать. Это, однако, только память, поскольку каждый byte питается как минимум одним байтом памяти JVM. Это нужно учитывать.

+0

Да, это то, что я использовал, когда задавал вопрос, но это были изображения, которые меня немного смутили. – Larry

Смежные вопросы