基本类型转换,高性能

package util;

import java.io.UnsupportedEncodingException;
import java.nio.ByteBuffer;
import java.util.Arrays;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
public class TypeCase {
	private TypeCase(){}
	private static  Log logger=LogFactory.getLog(TypeCase.class);
	
	    public static  byte[] stringTobytes(String cs,int len) {
	    	byte[] bs2 = new byte[len];
	    	  for(int i = 0; i < cs.length(); i++) {
	    		  bs2[i] = (byte) cs.charAt(i);
	    	   }
			return bs2;
	    	 }
		  public static  String bytesToString(byte[] b) {  
			  char[] str = new char[b.length];
				 for (int j = 0; j <b.length; j++) {
					 str[j]=(char)b[j];
					}
				 return  new String(str).trim();
			} 
		  public static  byte[] stringToBytesCharset(String str,int len,String code) {   
			  ByteBuffer buffer = ByteBuffer.allocate(len);
			  try {
				return buffer.put(str.getBytes(code)).array();
			} catch (UnsupportedEncodingException e) {
				logger.info(e);
			}
			return new byte[0]; 
			} 
		  public static String bytesToStringCharset(byte[] b,String code) {   
			  try {
				return new String(b,code).trim();
			} catch (UnsupportedEncodingException e) {
				logger.info(e);
			}
			return null; 
			} 
		  public static byte[] stringsToBytesSUM(String[] str,int sumlen){
				byte[] bs2 = new byte[sumlen];
				int k=0;
				for(int j = 0;j<str.length;j++){
					  for(int i = 0; i < str[j].length(); i++) {
			    		  bs2[k++] = (byte) str[j].charAt(i);
			    	   }
				}
				return bs2;
			}
		  public static byte[] stringsToBytesAVG(String[] str,int avglen){
			byte[] bs2 = new byte[avglen*str.length];
			for(int j = 0;j<str.length;j++){
				  for(int i = 0; i < str[j].length(); i++) {
		    		  bs2[avglen*j+i] = (byte) str[j].charAt(i);
		    	   }
			}
			return bs2;
		   }
		  public static String[] bytesToStrings(byte[] b,int avglen){
			  String[] str = new String[b.length/avglen];
			    int k=0;
				for(int j = 0;j<b.length/avglen;j++){
					 str[j] = bytesToString(Arrays.copyOfRange(b,k,k+avglen));
					 k+=avglen;
				}
				return str;
			}
		  public static byte intToByte(int x) {  
			    return (byte) x;  
			}  
			public static int byteToInt(byte b) {  
			    return b & 0xFF;  
			}  
		  public static int bytesToInt(byte[] b) {   
		     return    b[3] & 0xFF |   
		              (b[2] & 0xFF) << 8 |   
		              (b[1] & 0xFF) << 16 |   
		              (b[0] & 0xFF) << 24;   
			  } 
		  public static byte[] intToBytes(int a) {   
			  return new byte[] {   
		          (byte) ((a >> 24) & 0xFF),   
		          (byte) ((a >> 16) & 0xFF),      
		          (byte) ((a >> 8) & 0xFF),      
		          (byte) (a & 0xFF)   
			      };   
			  }
		  public static int[] bytesToInts(byte[] b) {  
			  int [] bs2=new int[b.length/4];
			  for(int i=0;i<b.length/4;i++){
				  bs2[i]=b[i*4+3] & 0xFF | 
			      (b[i*4+2] & 0xFF) << 8 |   
	              (b[i*4+1] & 0xFF) << 16|   
	              (b[i*4] & 0xFF) << 24; 
			  }
			return bs2;
				  } 
		  public static byte[] intsToBytes(int[] a) { 
			  byte[] bs2=new byte[4*a.length];
			  int k=0;
			  for(int i=0;i<a.length;i++){
					  bs2[k++]=(byte) ((a[i] >> 24) & 0xFF);
					  bs2[k++]=(byte) ((a[i] >> 16) & 0xFF);
					  bs2[k++]=(byte) ((a[i] >> 8) & 0xFF);
					  bs2[k++]=(byte) (a[i] & 0xFF);
			  }
			return bs2;
		  }  
		   public static char byteToChar(byte bt) {  
		        return (char) bt;  
		    }  
		    public static byte charToByte(char ch) {  
		        return (byte) ch;  
		    }  
		    public static char[] bytesToChars(byte[] b) { 
		    	char[] bs2=new char[b.length];
		    	for(int i=0;i<b.length;i++){
		    		bs2[i]=(char)b[i];
		    	}
		        return bs2;  
		    }  
		    public static byte[] charsToBytes(char[] cs) {
		    	 byte[] bs2 = new byte[cs.length];
		    	  for(int i = 0; i < cs.length; i++) {
		    	   bs2[i] = (byte) cs[i];
		    	   }
				return bs2;
		    	 }
		    public static byte[] charToBytes(char ch) {  
		        byte[] bytes = new byte[2];  
		        bytes[0] = (byte) (ch >> 8 & 0xff);  
		        bytes[1] = (byte) (ch & 0xff);  
		        return bytes;  
		    }
		    public static char bytesToChar(byte[] b) {  
		        return (char) ((b[0] << 8 & 0xff00) | (b[1] & 0xff));  
		    } 
		    
		    public static byte shortToByte(short s) {  
		        return (byte) s;  
		    }
		    public static short byteToShort(byte b) {  
		        return (short) b;  
		    } 
		    public static byte[] shortToByteArray(short[] s) {  
		    	byte[] bs2 = new byte[s.length];
		    	  for(int i = 0; i < s.length; i++) {
		    	   bs2[i] = (byte) s[i];
		    	   }
				return bs2; 
		    }
		    public static short[] byteToShortArray(byte[] b) {  
		    	short[] bs2=new short[b.length];
		    	for(int i=0;i<b.length;i++){
		    		bs2[i]=(short)b[i];
		    	}
		        return bs2;    
		    } 
		    public static short bytesToShort(byte[] b) {  
		        short rt = 0;  
		        rt += (b[0] << 8 & 0xff00);  
		        rt += (b[1] & 0xff);  
		        return rt;  
		    }  
		    public static byte[] shortToBytes(short s) {  
		        byte[] bytes = new byte[2];  
		        bytes[0] = (byte) (s >> 8 & 0xff);  
		        bytes[1] = (byte) (s & 0xff);  
		        return bytes;  
		    } 
		    public static byte[] shorstToBytes(short[] a) { 
		    	  byte[] bs2=new byte[2*a.length];
				  int k=0;
				  for(int i=0;i<a.length;i++){
						  bs2[k++]=(byte) (a[i] >> 8 & 0xff);
						  bs2[k++]=(byte) (a[i] & 0xff);
				  }
				return bs2;
		    }
		    public static short[] bytesToShorts(byte[] b) {  
		    	short [] bs2=new short[b.length/2];
				  for(int i=0;i<b.length/2;i++){
					  bs2[i] += (b[i*2] << 8 & 0xff00);  
					  bs2[i] += (b[i*2+1] & 0xff);  
				  }
				return bs2;
		    } 
		    public static float bytesToFloat(byte[] b)
		    {
		      return Float.intBitsToFloat(bytesToInt(b));
		    }
		    public static byte[] floatTobytes(float f) {  
		        return intToBytes(Float.floatToIntBits(f));  
		    } 
		    public static float[] bytesToFloats(byte[] b)
		    {
		    	float [] bs2=new float[b.length/4];
			  for(int i=0;i<b.length/4;i++){
				  bs2[i]=Float.intBitsToFloat(b[i*4+3] & 0xFF | 
			      (b[i*4+2] & 0xFF) << 8 |   
	              (b[i*4+1] & 0xFF) << 16|   
	              (b[i*4] & 0xFF) << 24); 
			  }
			return bs2;
		    }
		    public static byte[] floatsTobytes(float[] a) {  
		    	  byte[] bs2=new byte[4*a.length];
				  int k=0;
				  for(int i=0;i<a.length;i++){
				  int kl=Float.floatToIntBits(a[i]);
				  bs2[k++]=(byte) ((kl >> 24) & 0xFF);
				  bs2[k++]=(byte) ((kl >> 16) & 0xFF);
				  bs2[k++]=(byte) ((kl >> 8) & 0xFF);
				  bs2[k++]=(byte) (kl & 0xFF);
				  }
				return bs2;  
		    } 
		    
		    public static byte[] doubleTobytes(double d) {  
		        return longToBytes(Double.doubleToLongBits(d));  
		    }  
		    public static double bytesToDouble(byte[] b) { 
		        long l; 
		        l = b[7]; 
		        l &= 0xff; 
		        l |= ((long) b[6] << 8); 
		        l &= 0xffff; 
		        l |= ((long) b[5] << 16); 
		        l &= 0xffffff; 
		        l |= ((long) b[4] << 24); 
		        l &= 0xffffffffl; 
		        l |= ((long) b[3] << 32); 
		        l &= 0xffffffffffl; 
		        l |= ((long) b[2] << 40); 
		        l &= 0xffffffffffffl; 
		        l |= ((long) b[1] << 48); 
		        l &= 0xffffffffffffffl; 
		        l |= ((long) b[0] << 56); 
		        return Double.longBitsToDouble(l); 
		    } 
		    public static byte[] doublesTobytes(double[] a) {  
		  	  byte[] bs2=new byte[8*a.length];
			  int k=0;
			  for(int i=0;i<a.length;i++){
			  long kl=Double.doubleToLongBits(a[i]);
			  bs2[k++] = (byte) (kl >>> 56);
			  bs2[k++] = (byte) (kl >>> 48);
			  bs2[k++] = (byte) (kl >>> 40);
			  bs2[k++] = (byte) (kl >>> 32);
			  bs2[k++] = (byte) (kl >>> 24);
			  bs2[k++] = (byte) (kl >>> 16);
			  bs2[k++] = (byte) (kl >>> 8); 
			  bs2[k++] = (byte) (kl); 
			  }
			return bs2; 
		    }  
		    public static double[] bytesToDoubles(byte[] b) { 
		    	double [] bs2=new double[b.length/8];
				  for(int i=0;i<b.length/8;i++){
					  long l; 
				        l = b[i*8+7]; 
				        l &= 0xff; 
				        l |= ((long) b[i*8+6] << 8); 
				        l &= 0xffff; 
				        l |= ((long) b[i*8+5] << 16); 
				        l &= 0xffffff; 
				        l |= ((long) b[i*8+4] << 24); 
				        l &= 0xffffffffl; 
				        l |= ((long) b[i*8+3] << 32); 
				        l &= 0xffffffffffl; 
				        l |= ((long) b[i*8+2] << 40); 
				        l &= 0xffffffffffffl; 
				        l |= ((long) b[i*8+1] << 48); 
				        l &= 0xffffffffffffffl; 
				        l |= ((long) b[i*8+0] << 56); 
					  bs2[i]=Double.longBitsToDouble(l);
				  }
				return bs2;
		    } 
		    public static long bytesToLong(byte[] b) {  
    	        return (((long) b[0] & 0xff) << 56)  
	             | (((long) b[1] & 0xff) << 48)  
	             | (((long) b[2] & 0xff) << 40)  
	             | (((long) b[3] & 0xff) << 32)  
	             | (((long) b[4] & 0xff) << 24)  
	             | (((long) b[5] & 0xff) << 16)  
	             | (((long) b[6] & 0xff) << 8)  
	             |  ((long) b[7] & 0xff);  
		    	}
		    public static byte[] longToBytes(long num) {
		    	  byte[] result = new byte[8];
		    	  result[0] = (byte) (num >>> 56);
		    	  result[1] = (byte) (num >>> 48);
		    	  result[2] = (byte) (num >>> 40);
		    	  result[3] = (byte) (num >>> 32);
		    	  result[4] = (byte) (num >>> 24);
		    	  result[5] = (byte) (num >>> 16);
		    	  result[6] = (byte) (num >>> 8); 
		    	  result[7] = (byte) (num); 
		    	  return result;
		    	 }
		    public static long[] bytesToLongs(byte[] b) {  
		    	long [] bs2=new long[b.length/8];
			  for(int i=0;i<b.length/8;i++){
				  bs2[i]=(((long) b[i*8+0] & 0xff) << 56)  
	             | (((long) b[i*8+1] & 0xff) << 48)  
	             | (((long) b[i*8+2] & 0xff) << 40)  
	             | (((long) b[i*8+3] & 0xff) << 32)  
	             | (((long) b[i*8+4] & 0xff) << 24)  
	             | (((long) b[i*8+5] & 0xff) << 16)  
	             | (((long) b[i*8+6] & 0xff) << 8)  
	             |  ((long) b[i*8+7] & 0xff);   
			  }
			return bs2;
		    	}
		    public static byte[] longsToBytes(long[] num) {
		    	  byte[] bs2=new byte[8*num.length];
				  int k=0;
				  for(int i=0;i<num.length;i++){
					  bs2[k++] = (byte) (num[i] >>> 56);
					  bs2[k++] = (byte) (num[i] >>> 48);
					  bs2[k++] = (byte) (num[i] >>> 40);
					  bs2[k++] = (byte) (num[i] >>> 32);
					  bs2[k++] = (byte) (num[i] >>> 24);
					  bs2[k++] = (byte) (num[i] >>> 16);
					  bs2[k++] = (byte) (num[i] >>> 8); 
					  bs2[k++] = (byte) (num[i]); 
				  }
				return bs2;
		    	 }
		    
		    public static byte booleanToByte(boolean b) {
		    	  return (byte) (b ? 0x01 : 0x00);
		    	 }
		    public static boolean byteToBoolean(byte b) {
		    	  return (b == 0x00) ? false : true;
		    	 }
		    public static byte[] booleansToByte(boolean[] s) {
		    	byte[] bs2 = new byte[s.length];
		    	  for(int i = 0; i < s.length; i++) {
		    	   bs2[i] = (byte) (s[i]? 0x01 : 0x00);
		    	   }
				return bs2; 
		    	 }
		    public static boolean[] byteToBooleans(byte[] b) {
		    	boolean[] bs2=new boolean[b.length];
		    	for(int i=0;i<b.length;i++){
		    		bs2[i]=(b[i] == 0x00) ? false : true;
		    	}
		        return bs2;  
		    	 }
}

  

posted @ 2018-03-06 15:23  杯子茶壶  阅读(82)  评论(0)    收藏  举报