ByteArrayMaker-字节数组构造类

package com.zxt.basic.util;

import java.io.ByteArrayOutputStream;

/**
 * 
 * 类名称:ByteArrayMaker  
 * 类描述: 字节数组构造类 
 * 创建人:  
 * 创建时间:Sep 17, 2012 1:46:10 PM  
 * 修改人:  
 * 修改时间:Sep 17, 2012 1:46:10 PM  
 * 修改备注:  
 * @version 1.0.0  
 *
 */
public class ByteArrayMaker extends ByteArrayOutputStream {

 static boolean collect = false;

 static {
  String collectString = System.getProperty(MakerStats.class.getName());

  if (collectString != null) {
   if (collectString.equals("true")) {
    collect = true;
   }
  }
 }

 static MakerStats stats = null;

 static {
  if (collect) {
   stats = new MakerStats(ByteArrayMaker.class.toString());
  }
 }

 static int defaultInitSize = 8000;

 static {
  String defaultInitSizeString = System.getProperty(
   ByteArrayMaker.class.getName() + ".initial.size");

  if (defaultInitSizeString != null) {
   try {
    defaultInitSize = Integer.parseInt(defaultInitSizeString);
   }
   catch (Exception e) {
    e.printStackTrace();
   }
  }
 }

 public static MakerStats getStatistics() {
  return stats;
 }

 public ByteArrayMaker() {
  super(defaultInitSize);

  if (collect) {
   _getInfo(new Throwable());
  }
 }

 public ByteArrayMaker(int size) {
  super(size);

  if (collect) {
   _getInfo(new Throwable());
  }
 }

 public byte[] toByteArray() {
  if (collect) {
   stats.add(_caller, _initSize, count);
  }

  return super.toByteArray();
 }

 public String toString() {
  return super.toString();
 }

 private void _getInfo(Throwable t) {
  _initSize = buf.length;

  StackTraceElement[] elements = t.getStackTrace();

  if (elements.length > 1) {
   StackTraceElement el = elements[1];

   _caller =
    el.getClassName() + StringPool.PERIOD + el.getMethodName() +
     StringPool.COLON + el.getLineNumber();
  }
 }

 private int _initSize;
 private String _caller;

}

 

posted @ 2013-11-09 16:49  霍哥  阅读(260)  评论(0编辑  收藏  举报