OpenMisArchive.java

00001 
00004 package org.openmobileis.common.util.file;
00005 
00006 import java.io.ByteArrayInputStream;
00007 import java.io.ByteArrayOutputStream;
00008 import java.io.DataInputStream;
00009 import java.io.DataOutputStream;
00010 import java.io.IOException;
00011 
00012 import org.openmobileis.common.util.collection.Array;
00013 
00018 public class OpenMisArchive {
00019         private Array entryList;
00023         public OpenMisArchive() {
00024                 entryList = new Array();
00025         }
00026         
00027         public void addEntry(OpenMisArchiveEntry entry) {
00028                 entryList.add(entry);
00029         }
00030         
00031         public void addEntry(String name, byte[] data)  {
00032                 entryList.add(new OpenMisArchiveEntry(name, data));
00033         }
00034         
00035         public OpenMisArchiveEntry getEntry(int index){
00036                 if (index < this.entryList.size()){
00037                         return (OpenMisArchiveEntry)this.entryList.get(index);
00038                 }
00039                 return null;
00040         }
00041         
00042         public int getEntryCount()      {
00043                 return entryList.size();
00044         }
00045         
00046         public byte[] encodeArchive() throws IOException        {
00047                 ByteArrayOutputStream bout = new ByteArrayOutputStream();
00048                 DataOutputStream dout = new DataOutputStream(bout);
00049                 dout.writeInt(entryList.size());
00050                 int size = this.entryList.size();
00051                 for (int i=0; i<size; i++)      {
00052                         OpenMisArchiveEntry entry = (OpenMisArchiveEntry)this.entryList.get(i);
00053                         dout.writeUTF(entry.getName());
00054                         dout.writeInt(entry.getData().length);
00055                         dout.write(entry.getData());
00056                 }
00057                 dout.flush();
00058                 dout.close();
00059                 return bout.toByteArray();
00060         }
00061         
00062         public static OpenMisArchive decodeArchive(byte[] archive) throws IOException   {
00063                 ByteArrayInputStream bin = new ByteArrayInputStream(archive);
00064                 DataInputStream din = new DataInputStream(bin);
00065                 OpenMisArchive newarchive = new OpenMisArchive();
00066                 int nbEntry = din.readInt();
00067                 for (int i=0; i<nbEntry; i++){
00068                         String name = din.readUTF();
00069                         int length = din.readInt();
00070                         byte[] entry = new byte[length];
00071                         din.read(entry, 0, length);
00072                         newarchive.addEntry(name, entry);
00073                 }
00074                 return newarchive;
00075         }
00076 
00077 }

Generated on Mon Jan 11 21:19:15 2010 for OpenMobileIS by  doxygen 1.5.4