package com.fourinone; import java.io.ByteArrayOutputStream; import java.io.OutputStream; import java.io.ObjectOutputStream; import java.io.ByteArrayInputStream; import java.io.InputStream; import java.io.ObjectInputStream; import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.EOFException; import java.util.zip.GZIPInputStream; import java.util.zip.GZIPOutputStream; import java.util.zip.CRC32; import java.net.URLEncoder; import java.net.URLDecoder; final class ObjectBytes //nopub { static private char[] alphabet="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=".toCharArray(); static private byte[] codes=new byte[256]; static{ for(int i=0;i<256;i++) codes[i]=-1; for(int i='A';i<='Z';i++) codes[i]=(byte)(i-'A'); for(int i='a';i<='z';i++) codes[i]=(byte)(26+i-'a'); for(int i='0';i<='9';i++) codes[i]=(byte)(52+i-'0'); codes['+']=62; codes['/']=63; } static byte[] toBytes(Object o){ byte[] gbt = null; try{ ByteArrayOutputStream baos = new ByteArrayOutputStream(); ObjectOutputStream oout =new ObjectOutputStream(baos);//gzout oout.writeObject(o); byte[] objgbt = baos.toByteArray(); //System.out.println(objgbt.length); baos.close(); oout.close(); gbt = getByteFromIs(new ByteArrayInputStream(objgbt),true); }catch(Exception e){ LogUtil.info("[ObjectBytes]", "[toBytes]", "[Error Exception:]", e); } return gbt; } static byte[] getByteFromIs(InputStream gis, boolean GZIPFlag) { byte[] gbt = null; try { BufferedInputStream is = new BufferedInputStream(gis); ByteArrayOutputStream baos = new ByteArrayOutputStream(); OutputStream gzout = GZIPFlag?(new GZIPOutputStream(baos)):baos; BufferedOutputStream os = new BufferedOutputStream(gzout); int ch; try { while((ch=is.read())!=-1) os.write(ch); } catch(EOFException eofex){/*for end the stream*/} is.close(); os.close(); gbt = baos.toByteArray(); } catch(Exception e){ LogUtil.info("[ObjectBytes]", "[getByteFromIs]", "[Error Exception:]", e); } return gbt; } static Object toObject(byte[] bts){ ByteArrayOutputStream sbos = new ByteArrayOutputStream(); setByteToOs(bts, sbos, true); byte[] unzipbts = sbos.toByteArray(); Object obj = null; try { ByteArrayInputStream bais = new ByteArrayInputStream(unzipbts); ObjectInputStream ois = new ObjectInputStream(bais); obj = ois.readObject(); bais.close(); ois.close(); } catch(Exception e){ LogUtil.info("[ObjectBytes]", "[toObject]", "[Error Exception:]", e); } return obj; } static void setByteToOs(byte[] sbt, OutputStream sos, boolean GZIPFlag) { try { ByteArrayInputStream bais = new ByteArrayInputStream(sbt); InputStream gzin = GZIPFlag?(new GZIPInputStream(bais)):bais; BufferedInputStream is = new BufferedInputStream(gzin); BufferedOutputStream os = new BufferedOutputStream(sos); int ch; try { while((ch=is.read())!=-1) os.write(ch); } catch(EOFException eofex){/*for end the stream*/} is.close(); os.close(); } catch(Exception e){ LogUtil.info("[ObjectBytes]", "[setByteToOs]", "[Error Exception:]", e); } } static String encode(String data){ return new String(encode(data.getBytes())); } static String encodeReplace(String data){ return encode(data,"\u003D","\u005F"); } static String encode(String data, String ostr, String rplstr){ return encode(data).replaceAll(ostr, rplstr); } static String encodeurl(String data){ return getUrlString(encode(data)); } static char[] encode(byte[] data){ char[] out = new char[((data.length+2)/3)*4]; for(int i=0,index=0;i<data.length;i+=3,index+=4){ boolean quad=false,trip=false; int val=(0xFF&(int)data[i]); val<<=8; if((i+1)<data.length){ val|=(0xFF&(int)data[i+1]); trip = true; } val<<=8; if((i+2)<data.length){ val|=(0xFF&(int)data[i+2]); quad = true; } out[index+3]=alphabet[(quad?(val&0x3F):64)]; val>>=6; out[index+2]=alphabet[(trip?(val&0x3F):64)]; val>>=6; out[index+1]=alphabet[val&0x3F]; val>>=6; out[index+0]=alphabet[val&0x3F]; } return out; } static String decode(String data){ return new String(decode(data.toCharArray())); } static String decodeReplace(String data){ return decode(data,"\u005F","\u003D"); } static String decode(String data, String ostr, String rplstr){ return decode(data.replaceAll(ostr,rplstr)); } static String decodeurl(String data){ return decode(getViewUrlString(data)); } static byte[] decode(char[] data){ int len=((data.length+3)/4)*3; if(data.length>0&&data[data.length-1]=='=') --len; if(data.length>1&&data[data.length-2]=='=') --len; byte[] out=new byte[len]; int shift=0,accum=0,index=0; for(int ix=0;ix<data.length;ix++){ int value=codes[data[ix]&0xFF]; if(value>=0){ accum<<=6; shift+=6; accum|=value; if(shift>=8){ shift-=8; out[index++]=(byte)((accum>>shift)&0xff); } } } if(index!=out.length) throw new Error("miscalculated data length!"); return out; } static byte[] getCharSequence(byte[] bts){ for(int i=0;i<bts.length;i++) bts[i]=(byte)~bts[i]; return bts; } static String getUrlString(String viewStr) { String urlStr = ""; if(viewStr!=null) urlStr = URLEncoder.encode(viewStr); return urlStr; } static String getViewUrlString(String urlStr) { String viewStr = ""; if(urlStr!=null) viewStr = URLDecoder.decode(urlStr);//aaa = java.net.URLDecoder.decode(aaa,"UTF-8"); return viewStr; } static String getUtf8UrlString(String viewStr) { String urlStr = ""; try { if(viewStr!=null) urlStr = URLEncoder.encode(viewStr,"UTF-8");//if default,can no langCode }catch(Exception e){ LogUtil.fine(e); } return urlStr; } static String getViewUtf8UrlString(String urlStr) { String viewStr = ""; try { if(urlStr!=null) viewStr = URLDecoder.decode(urlStr, "UTF-8");//new String(urlStr.getBytes("8859_1"),"UTF-8");//if default,can no langCode }catch(Exception e){ LogUtil.fine(e); } return viewStr; } static String getEscape(String fttpstr){ if(fttpstr==null) return null; char[] chararr = fttpstr.toCharArray(); StringBuffer sb = new StringBuffer(); for(int i=0;i<chararr.length;i++){ switch(chararr[i]){ case '%': sb.append("%25");break; case ' ': sb.append("%20");break; case '[': sb.append("%5B");break; case ']': sb.append("%5D");break; case '\\': sb.append("%5C");break; case '{': sb.append("%7B");break; case '}': sb.append("%7D");break; case '<': sb.append("%3C");break; case '>': sb.append("%3E");break; case '|': sb.append("%7C");break; case '^': sb.append("%5E");break; case '\"': sb.append("%22");break; default: sb.append(chararr[i]); } } return sb.toString(); } public static void main(String[] args) { java.util.ArrayList ls = new java.util.ArrayList(); java.util.HashMap<String,String> mp = new java.util.HashMap<String,String>(); mp.put("id","10168758145-1304254801723-2f222c633a82d97e3fa4766d54647604"); mp.put("buyer.writetotaircount","2"); mp.put("buyer.timespent","2394"); mp.put("request.buynowjhtml.client-ip","114.82.123.229"); mp.put("request.buynowjhtml.header.referer","http://buy.taobao.com/auction/buy_now.jhtml"); mp.put("request.buynowjhtml.content.skuId",""); mp.put("request.buynowjhtml.content._fma.b._0.pr","1.00"); mp.put("request.buynowhtml.client-ip","114.82.123.229"); mp.put("request.buynowhtml.header.referer","http://buy.taobao.com/auction/buy_now.html"); mp.put("request.buynowhtml.content.skuId",""); mp.put("request.buynowhtml.content._fma.b._0.pr","1.00"); //mp.put("meta","11"); ls.add(mp); byte[] objbts = toBytes(ls); System.out.println("objbts.length:"+objbts.length); byte[] objbts2 = toBytes(objbts); System.out.println("objbts2.length:"+objbts2.length); byte[] objbts3 = (byte[])toObject(objbts2); System.out.println("objbts3.length:"+objbts3.length); Object obj = toObject(objbts); System.out.println((java.util.ArrayList)obj); /*byte[] gzipbts = toGzipBytes(objbts); System.out.println(new String(gzipbts)); byte[] ungzipbts = toUnGzipBytes(gzipbts); System.out.println(ungzipbts.length); */ CRC32 crc = new CRC32(); crc.update(objbts); System.out.println(crc.getValue()); java.util.Hashtable arr = new java.util.Hashtable(); arr.put("a",1.1); java.util.Hashtable arr2 = new java.util.Hashtable(); arr2.put("a",1.1); class A implements java.io.Serializable{ private String a; public A(String a){ this.a = a;//arr2.get("a"); } } A a0 = new A("0"); A a1 = new A("0"); System.out.println(a0.equals(a1)); CRC32 crc2 = new CRC32(); crc2.update(toBytes(a0)); System.out.println(crc2.getValue()); CRC32 crc3 = new CRC32(); crc3.update(toBytes(a1)); System.out.println(crc3.getValue()); CRC32 crc4 = new CRC32(); crc4.update(toBytes(System.nanoTime())); System.out.println("crc4:"+crc4.getValue()); } }