messageserializationtest2.java

来自「JGRoups源码」· Java 代码 · 共 248 行

JAVA
248
字号
package org.jgroups.tests;import org.jgroups.Message;import org.jgroups.conf.ClassConfigurator;import org.jgroups.protocols.*;import org.jgroups.stack.IpAddress;import org.jgroups.util.List;import org.jgroups.util.Buffer;import org.jgroups.util.ExposedByteArrayOutputStream;import java.io.*;import java.util.Enumeration;import java.util.LinkedList;/** * @author Bela Ban Feb 12, 2004 * @version $Id: MessageSerializationTest2.java,v 1.14 2005/07/15 09:35:00 belaban Exp $ */public class MessageSerializationTest2 {    Message msg;    Buffer buf;    long start, stop, total;    double msgs_per_sec, time_per_msg;    List my_list=new List();    int num=50000;    ObjectOutputStream out;    ExposedByteArrayOutputStream output;    ByteArrayInputStream input;    ObjectInputStream in;    DataOutputStream dos;    DataInputStream dis;    int msgs_read=0;    List l2=new List();    public void start(int num, boolean use_serialization, boolean use_streamable,                      boolean use_additional_data, boolean add_headers) throws Exception {        IpAddress dest=new IpAddress("228.8.8.8", 7500);        IpAddress src=new IpAddress("127.0.0.1", 5555);        if(use_additional_data)            src.setAdditionalData("bela".getBytes());        ClassConfigurator.getInstance(true);        this.num=num;        System.out.println("-- starting to create " + num + " msgs");        start=System.currentTimeMillis();        for(int i=1; i <= num; i++) {            msg=new Message(dest, src, ("Hello world from message #" +i).getBytes());            if(add_headers) {                addHeaders(msg);            }            my_list.add(msg);        }        stop=System.currentTimeMillis();        total=stop-start;        msgs_per_sec=num / (total/1000.0);        time_per_msg=total / (double)num;        System.out.println("\n-- total time for creating " + num +                " msgs = " + total + "ms \n(" + msgs_per_sec + " msgs/sec, time_per_msg=" + time_per_msg + " ms)");        LinkedList l_ser=null, l_stream=null;        if(use_streamable)            l_stream=marshalMessages();        if(use_serialization)            l_ser=serializeMessage();        if(l_ser != null && l_stream != null)            printDiffs(l_ser, l_stream);    }     void addHeaders(Message msg) {        msg.putHeader("UDP", new UdpHeader("MyGroup"));        msg.putHeader("PING", new PingHeader(PingHeader.GET_MBRS_REQ, null));        msg.putHeader("FD_SOCK", new FD_SOCK.FdHeader());        msg.putHeader("VERIFY_SUSPECT", new VERIFY_SUSPECT.VerifyHeader());        msg.putHeader("STABLE", new org.jgroups.protocols.pbcast.STABLE.StableHeader());        msg.putHeader("NAKACK", new org.jgroups.protocols.pbcast.NakAckHeader());        msg.putHeader("UNICAST", new UNICAST.UnicastHeader());        msg.putHeader("FRAG", new FragHeader());        msg.putHeader("GMS", new org.jgroups.protocols.pbcast.GMS.GmsHeader());    }    private void printDiffs(LinkedList l_ser, LinkedList l_stream) {        int size_ser, size_stream;        long write_ser, write_stream, read_ser, read_stream;        size_ser=((Integer)l_ser.get(0)).intValue();        size_stream=((Integer)l_stream.get(0)).intValue();        write_ser=((Long)l_ser.get(1)).longValue();        read_ser=((Long)l_ser.get(2)).longValue();        write_stream=((Long)l_stream.get(1)).longValue();        read_stream=((Long)l_stream.get(2)).longValue();        System.out.println("\n\nserialized size=" + size_ser + ", streamable size=" + size_stream +                           ", streamable is " + (100.0 / size_stream * size_ser -100) + " percent smaller");        System.out.println("serialized write=" + write_ser + ", streamable write=" + write_stream +                           ", streamable write is " + (100.0 / write_stream * write_ser -100) + " percent faster");        System.out.println("serialized read=" + read_ser + ", streamable read=" + read_stream +                           ", streamable read is " + (100.0 / read_stream * read_ser -100) + " percent faster");    }    /**     *     * @return LinkedList with 3 elements: size of serialized buffer, write time, read time     * @throws IOException     */    LinkedList serializeMessage() throws IOException {        LinkedList retval=new LinkedList();        System.out.println("-- starting to serialize " + num + " msgs");        start=System.currentTimeMillis();        output=new ExposedByteArrayOutputStream(65000);        out=new ObjectOutputStream(output);        my_list.writeExternal(out);        out.close();        stop=System.currentTimeMillis();        buf=new Buffer(output.getRawBuffer(), 0, output.size());        System.out.println("** serialized buffer size=" + buf.getLength() + " bytes");        retval.add(new Integer(buf.getLength()));        total=stop-start;        retval.add(new Long(total));        msgs_per_sec=num / (total/1000.0);        time_per_msg=total / (double)num;        System.out.println("\n-- total time for serializing " + num +                " msgs = " + total + "ms \n(" + msgs_per_sec + " msgs/sec, time_per_msg=" + time_per_msg + " ms)");        System.out.println("-- starting to unserialize msgs");        start=System.currentTimeMillis();        ByteArrayInputStream input2=new ByteArrayInputStream(buf.getBuf(), buf.getOffset(), buf.getLength());        ObjectInputStream in2=new ObjectInputStream(input2);        try {            l2.readExternal(in2);        }        catch(ClassNotFoundException e) {            e.printStackTrace();        }        stop=System.currentTimeMillis();        total=stop-start;        retval.add(new Long(total));        msgs_read=l2.size();        msgs_per_sec=msgs_read / (total/1000.0);        time_per_msg=total / (double)msgs_read;        System.out.println("\n-- total time for reading " + msgs_read +                " msgs = " + total + "ms \n(" + msgs_per_sec + " msgs/sec, time_per_msg=" + time_per_msg + ')');        l2.removeAll();        return retval;    }    LinkedList marshalMessages() throws IOException, IllegalAccessException, InstantiationException {        LinkedList retval=new LinkedList();        System.out.println("\n\n-- starting to marshal " + num + " msgs (using Streamable)");        start=System.currentTimeMillis();        output=new ExposedByteArrayOutputStream(65000);        dos=new DataOutputStream(output);        dos.writeInt(my_list.size());        for(Enumeration en=my_list.elements(); en.hasMoreElements();) {            Message tmp=(Message)en.nextElement();            tmp.writeTo(dos);        }        dos.close();        stop=System.currentTimeMillis();        buf=new Buffer(output.getRawBuffer(), 0, output.size());        System.out.println("** marshalled buffer size=" + buf.getLength() + " bytes");        retval.add(new Integer(buf.getLength()));        total=stop-start;        retval.add(new Long(total));        msgs_per_sec=num / (total/1000.0);        time_per_msg=total / (double)num;        System.out.println("\n-- total time for marshaling " + num +                           " msgs = " + total + "ms \n(" + msgs_per_sec + " msgs/sec, time_per_msg=" + time_per_msg + " ms)");        System.out.println("-- starting to unmarshal msgs (using Streamable)");        start=System.currentTimeMillis();        input=new ByteArrayInputStream(buf.getBuf(), buf.getOffset(), buf.getLength());        dis=new DataInputStream(input);        msgs_read=0;        int b=dis.readInt();        Message tmp;        for(int i=0; i < b; i++) {            tmp=new Message(false);            tmp.readFrom(dis);            l2.add(tmp);        }        stop=System.currentTimeMillis();        total=stop-start;        retval.add(new Long(total));        msgs_read=l2.size();        msgs_per_sec=msgs_read / (total/1000.0);        time_per_msg=total / (double)msgs_read;        System.out.println("\n-- total time for reading " + msgs_read +                           " msgs = " + total + "ms \n(" + msgs_per_sec + " msgs/sec, time_per_msg=" + time_per_msg + ')');        return retval;    }    public static void main(String[] args) {        int num=50000;        boolean use_serialization=true, use_streamable=true, use_additional_data=false, add_headers=true;        for(int i=0; i < args.length; i++) {            if(args[i].equals("-num")) {                num=Integer.parseInt(args[++i]);                continue;            }            if(args[i].equals("-use_serialization")) {                use_serialization=new Boolean(args[++i]).booleanValue();                continue;            }            if(args[i].equals("-use_streamable")) {                use_streamable=new Boolean(args[++i]).booleanValue();                continue;            }            if(args[i].equals("-use_additional_data")) {                use_additional_data=new Boolean(args[++i]).booleanValue();                continue;            }            if(args[i].equals("-add_headers")) {                add_headers=new Boolean(args[++i]).booleanValue();                continue;            }            help();            return;        }        try {            new MessageSerializationTest2().start(num, use_serialization, use_streamable, use_additional_data, add_headers);        }        catch(Exception e) {            e.printStackTrace();        }    }    static void help() {        System.out.println("MessageSerializationTest2 [-help] [-num <number>] " +                           "[-use_serialization <true|false>] [-use_streamable <true|false>] " +                           "[-use_additional_data <true|false>] [-add_headers <true|false>]");    }}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?