size.java
来自「JGRoups源码」· Java 代码 · 共 176 行
JAVA
176 行
// $Id: SIZE.java,v 1.16 2006/10/11 14:42:06 belaban Exp $package org.jgroups.protocols;import org.jgroups.Event;import org.jgroups.Message;import org.jgroups.util.Util;import org.jgroups.stack.Protocol;import java.io.ByteArrayOutputStream;import java.io.DataOutputStream;import java.util.Map;import java.util.Properties;import java.util.Vector;/** * Protocol which prints out the real size of a message. To do this, the message * is serialized into a byte buffer and its size read. Don't use this layer in * a production stack since the costs are high (just for debugging). * * @author Bela Ban June 13 2001 */public class SIZE extends Protocol { final Vector members=new Vector(); boolean print_msg=false; boolean raw_buffer=false; // just print size of message buffer /** Min size in bytes above which msgs should be printed */ long min_size=0; final ByteArrayOutputStream out_stream=new ByteArrayOutputStream(65535); /** * All protocol names have to be unique ! */ public String getName() { return "SIZE"; } public void init() { } /** * Setup the Protocol instance acording to the configuration string */ public boolean setProperties(Properties props) {super.setProperties(props); String str; str=props.getProperty("print_msg"); if(str != null) { print_msg=Boolean.valueOf(str).booleanValue(); props.remove("print_msg"); } str=props.getProperty("raw_buffer"); if(str != null) { raw_buffer=Boolean.valueOf(str).booleanValue(); props.remove("raw_buffer"); } str=props.getProperty("min_size"); if(str != null) { min_size=Integer.parseInt(str); props.remove("min_size"); } if(props.size() > 0) { log.error("the following properties are not recognized: " + props); return false; } return true; } public void up(Event evt) { Message msg; int payload_size=0, serialized_size; switch(evt.getType()) { case Event.MSG: msg=(Message)evt.getArg(); payload_size=msg.getLength(); if(raw_buffer) { if(trace) log.trace("size of message buffer is " + payload_size + ", " + numHeaders(msg) + " headers"); } else { serialized_size=sizeOf(msg); if(serialized_size > min_size) { if(trace) log.trace("size of serialized message is " + serialized_size + ", " + numHeaders(msg) + " headers"); } } if(print_msg) { if(trace) log.trace("headers are " + msg.getHeaders() + ", payload size=" + payload_size); } break; } passUp(evt); // pass up to the layer above us } public void down(Event evt) { Message msg; int payload_size=0, serialized_size; switch(evt.getType()) { case Event.MSG: msg=(Message)evt.getArg(); payload_size=msg.getLength(); if(raw_buffer) { if(trace) log.trace("size of message buffer is " + payload_size + ", " + numHeaders(msg) + " headers"); } else { serialized_size=sizeOf(msg); if(serialized_size > min_size) { if(trace) log.trace("size of serialized message is " + serialized_size + ", " + numHeaders(msg) + " headers"); } } if(print_msg) { if(trace) log.trace("headers are " + msg.getHeaders() + ", payload size=" + payload_size); } break; } passDown(evt); // Pass on to the layer below us } int sizeOf(Message msg) { DataOutputStream out=null; synchronized(out_stream) { try { out_stream.reset(); out=new DataOutputStream(out_stream); msg.writeTo(out); out.flush(); return out_stream.size(); } catch(Exception e) { return 0; } finally { Util.close(out); } } } int numHeaders(Message msg) { if(msg == null) return 0; Map hdrs=msg.getHeaders(); return hdrs !=null? hdrs.size() : 0; }}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?