Development Android

/*
 *
 * Copyright (C) 2011 Pierre Malarme
 *
 * Authors: Pierre Malarme 
 *
 * Institution: Laboratory of Image Synthesis and Analysis (LISA)
 *              Faculty of Applied Science
 *              Universite Libre de Bruxelles (U.L.B.)
 *
 * Website: http://lisa.ulb.ac.be
 *
 * This file  is part of Droid Dicom Viewer.
 *
 * Droid Dicom Viewer is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * Droid Dicom Viewer is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with Droid Dicom Viewer. If not, see .
 *
 * Released date: 17-02-2011
 *
 * Version: 1.0
 *
 */
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.ObjectOutputStream;
/**
 * Implements functions useful to check
 * Memory usage.
 * 
 * @author Pierre Malarme
 * @version 1.0
 *
 */
class Memory {
  /**
   * Function that get the size of an object.
   * 
   * @param object
   * @return Size in bytes of the object or -1 if the object
   * is null.
   * @throws IOException
   */
  public static final int sizeOf(Object object) throws IOException {
    
    if (object == null)
      return -1;
    
    // Special output stream use to write the content
    // of an output stream to an internal byte array.
    ByteArrayOutputStream byteArrayOutputStream =
      new ByteArrayOutputStream();
    
    // Output stream that can write object
    ObjectOutputStream objectOutputStream =
      new ObjectOutputStream(byteArrayOutputStream);
    
    // Write object and close the output stream
    objectOutputStream.writeObject(object);
    objectOutputStream.flush();
    objectOutputStream.close();
    
    // Get the byte array
    byte[] byteArray = byteArrayOutputStream.toByteArray();
    
    // TODO can the toByteArray() method return a
    // null array ?
    return byteArray == null ? 0 : byteArray.length;
    
    
  }
}