001    /*
002     * Copyright (C) 2008-2010 by Holger Arndt
003     *
004     * This file is part of the Universal Java Matrix Package (UJMP).
005     * See the NOTICE file distributed with this work for additional
006     * information regarding copyright ownership and licensing.
007     *
008     * UJMP is free software; you can redistribute it and/or modify
009     * it under the terms of the GNU Lesser General Public License as
010     * published by the Free Software Foundation; either version 2
011     * of the License, or (at your option) any later version.
012     *
013     * UJMP is distributed in the hope that it will be useful,
014     * but WITHOUT ANY WARRANTY; without even the implied warranty of
015     * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
016     * GNU Lesser General Public License for more details.
017     *
018     * You should have received a copy of the GNU Lesser General Public
019     * License along with UJMP; if not, write to the
020     * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
021     * Boston, MA  02110-1301  USA
022     */
023    
024    package org.ujmp.core.util;
025    
026    import java.io.ByteArrayInputStream;
027    import java.io.ByteArrayOutputStream;
028    import java.io.IOException;
029    import java.io.InputStream;
030    import java.io.ObjectInputStream;
031    import java.io.ObjectOutputStream;
032    import java.io.OutputStream;
033    import java.io.Serializable;
034    
035    public abstract class SerializationUtil {
036    
037            public static void serialize(Serializable obj, OutputStream outputStream) throws IOException {
038                    ObjectOutputStream out = null;
039                    try {
040                            out = new ObjectOutputStream(outputStream);
041                            out.writeObject(obj);
042                    } catch (IOException ex) {
043                            throw ex;
044                    } finally {
045                            try {
046                                    if (out != null) {
047                                            out.close();
048                                    }
049                            } catch (IOException ex) {
050                                    // ignore close exception
051                            }
052                    }
053            }
054    
055            public static Object deserialize(InputStream inputStream) throws ClassNotFoundException,
056                            IOException {
057                    ObjectInputStream in = null;
058                    try {
059                            // stream closed in the finally
060                            in = new ObjectInputStream(inputStream);
061                            return in.readObject();
062                    } catch (ClassNotFoundException ex) {
063                            throw ex;
064                    } catch (IOException ex) {
065                            throw ex;
066                    } finally {
067                            try {
068                                    if (in != null) {
069                                            in.close();
070                                    }
071                            } catch (IOException ex) {
072                                    // ignore close exception
073                            }
074                    }
075            }
076    
077            public static byte[] serialize(Serializable o) throws IOException {
078                    ByteArrayOutputStream bos = new ByteArrayOutputStream();
079                    serialize(o, bos);
080                    return bos.toByteArray();
081            }
082    
083            public static Object deserialize(byte[] data) throws ClassNotFoundException, IOException {
084                    ByteArrayInputStream bis = new ByteArrayInputStream(data);
085                    Object o = deserialize(bis);
086                    return o;
087            }
088    
089            public static long sizeOf(Serializable o) throws IOException {
090                    return serialize(o).length;
091            }
092    
093    }