Java打印工具类,实现格式化输出以及二进制输出效果图如下:
package com.wiker; import java.io.PrintWriter; import java.io.StringWriter; import java.io.UnsupportedEncodingException; import java.text.SimpleDateFormat; import java.util.Date; public class Print { private static final String TAG = Print.class.getSimpleName(); public static boolean isDebug=true; static public void printStr(String tag, String body) { if(isDebug) System.out.println(tag+" "+body); // Log.i(tag, body); } public static void printStr(byte[] ba, int len) { printStr(TAG, ba, len); } public static void printStr(byte[] ba) { printStr(TAG, ba, ba.length); } public static void printStr(Object obj) { printStr(TAG, String.valueOf(obj)); } public static void printStr(String tag, Object obj) { printStr(tag, String.valueOf(obj)); } public static void printStr(String tag, byte[] ba, int len) { if(!isDebug) return; String s; try { s = new String(ba, 0, len, "utf-8"); printStr(tag, s); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } } public static void printHex(byte[] dataStr_cp, int dataLen_n) { printHex(TAG, dataStr_cp, dataLen_n); } public static void printHex(byte[] dataStr_cp) { printHex(TAG, dataStr_cp, dataStr_cp.length); } public static void printHex(String tag, byte[] dataStr_cp, int dataLen_n) { printHex(tag, dataStr_cp, 0, dataLen_n); } public static void printHex(String tag, byte[] dataStr_cp, int start, int dataLen_n) { if(!isDebug) return; int i=0, j=0; int lineCnt_n = 0; try { byte[] set=new String("0123456789ABCDEF").getBytes("utf-8"); if(dataLen_n==0) return; if(dataLen_n%16!=0) lineCnt_n = dataLen_n/16 + 1; else lineCnt_n = dataLen_n/16; String p=new String("--------------------------- Raw data ---------------------------"); printStr(tag, p.getBytes("utf-8"), p.length()); for(i=0; i<lineCnt_n; i++) { byte[] lineStr_ca=new byte[128]; for(j=0; j<16; j++) { if(i*16+j<dataLen_n) { if(dataStr_cp[start+i*16+j]<0) { lineStr_ca[j*3] = set[ (byte)((dataStr_cp[start+i*16+j]&0x7f+128) >> 4) ]; lineStr_ca[j*3+1] = set[ (byte)((dataStr_cp[start+i*16+j]&0x7f+128) & 0xF) ]; } else { lineStr_ca[j*3] = set[ ((byte)dataStr_cp[start+i*16+j]) >> 4 ]; lineStr_ca[j*3+1] = set[ ((byte)dataStr_cp[start+i*16+j]) & 0xF ]; } lineStr_ca[j*3+2] = ' '; } else { lineStr_ca[j*3] = ' '; lineStr_ca[j*3+1] = ' '; lineStr_ca[j*3+2] = ' '; } } lineStr_ca[16*3] = ';'; lineStr_ca[16*3+1] = ' '; //cursor pos 16*3+2= 50 for(j=0; j<16; j++) { if(i*16+j<dataLen_n) { if (dataStr_cp[start+i*16+j]>=0x20 && dataStr_cp[start+i*16+j] <= 0x7e && dataStr_cp[start+i*16+j]!='%') lineStr_ca[50+j] = (byte)dataStr_cp[start+i*16+j]; else lineStr_ca[50+j] = '.'; } else lineStr_ca[50+j] = ' '; } printStr(tag, lineStr_ca, 50+j); } } catch (Exception e) { } } public static void logException(Exception e) { StringWriter sw = new StringWriter(); PrintWriter pw = new PrintWriter(sw); e.printStackTrace(pw); printStr(sw.toString()); } public static void logException(String tag, Exception e) { StringWriter sw = new StringWriter(); PrintWriter pw = new PrintWriter(sw); e.printStackTrace(pw); printStr(tag, sw.toString()); } static public void printDate(String tag, long ms) { if(!isDebug) return; Date date = new Date(ms); SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss SSS"); printStr(tag, "printDate="+String.valueOf(ms)+";date="+simpleDateFormat.format(date)); } static public void printFunc() { StackTraceElement[] ste=new Exception().getStackTrace(); String methodName = ste[1].getMethodName(); String clsName = ste[1].getClassName(); clsName=clsName.substring(clsName.lastIndexOf('.')+1); printStr(clsName, methodName); } }