Compressed Serialization
Jump to navigation
Jump to search
If you ever want to store several somewhat large objects, this is probably the best way - (aside from carefully using the transient key word) - feel free to insert this code into your robots if you find yourself using up your disk space for your robot:
import java.io.*; import java.util.zip.*; public Object readCompressedObject(String filename) { try { ZipInputStream zipin = new ZipInputStream(new FileInputStream(getDataFile(filename + ".zip"))); zipin.getNextEntry(); ObjectInputStream in = new ObjectInputStream(zipin); Object obj = in.readObject(); in.close(); return obj; } catch (FileNotFoundException e) { System.out.println("File not found!"); } catch (IOException e) { System.out.println("I/O Exception"); } catch (ClassNotFoundException e) { System.out.println("Class not found! :-("); e.printStackTrace(); } return null; //could not get the object } public void writeObject(Serializable obj, String filename) { try { ZipOutputStream zipout = new ZipOutputStream( new RobocodeFileOutputStream(getDataFile(filename + ".zip"))); zipout.putNextEntry(new ZipEntry(filename)); ObjectOutputStream out = new ObjectOutputStream(zipout); out.writeObject(obj); out.flush(); zipout.closeEntry(); out.close(); } catch (IOException e) { System.out.println("Error writing Object:" + e); } }
What this basically does is compresses your serialized objects in zip files. I can't remember exactly what degree of compression I got from doing this, but it seems like it was on the order of 1/10th the file size.