最全面的Java字节byte操作,处理Java基本数据的转换及进制转换操作工具,流媒体及java底层开发项目常用工具类

前言:用于处理Java基本数据的转换及进制转换操作工具

一、实现功能

1、int预byte互转

2、int与byte[]互转

3、short与byte互转

4、short与byte[]互转

5、16位short与byte[]互转

6、long预byte[]互转

7、byte[]与inputstream互转

8、byte与String互转

9、16进制字符转int

10、十进制转2进制

11、byte[]转16进制字符

12、byte[]数组指定位置抽取byte[]

二、代码实现

package cc.eguid.util;

import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.UnsupportedEncodingException;
import java.nio.ByteBuffer;
/**
 * 基本数据互转工具
 * @author eguid
 * eguid的官网:www.eguid.cc
 * eguid的csdn博客:http://blog.csdn.net/eguid_1,博客园:http://www.cnblogs.com/eguid
 */
public class ByteUtil {
	private static ByteBuffer buffer = ByteBuffer.allocate(8);
	 /**
	  * int转byte
	  * @param x
	  * @return
	  */
    public static byte intToByte(int x) {
        return (byte) x;
    }
    /**
     * byte转int
     * @param b
     * @return
     */
    public static int byteToInt(byte b) {
        //Java的byte是有符号,通过 &0xFF转为无符号
        return b & 0xFF;
    }  

    /**
     * byte[]转int
     * @param b
     * @return
     */
    public static int byteArrayToInt(byte[] b) {
        return   b[3] & 0xFF |
                (b[2] & 0xFF) << 8 |
                (b[1] & 0xFF) << 16 |
                (b[0] & 0xFF) << 24;
    }
    public static int byteArrayToInt(byte[] b, int index){
    	  return   b[index+3] & 0xFF |
                  (b[index+2] & 0xFF) << 8 |
                  (b[index+1] & 0xFF) << 16 |
                  (b[index+0] & 0xFF) << 24;
    }
    /**
     * int转byte[]
     * @param a
     * @return
     */
    public static byte[] intToByteArray(int a) {
        return new byte[] {
            (byte) ((a >> 24) & 0xFF),
            (byte) ((a >> 16) & 0xFF),
            (byte) ((a >> 8) & 0xFF),
            (byte) (a & 0xFF)
        };
    }
    /**
     * short转byte[]
     *
     * @param b
     * @param s
     * @param index
     */
    public static void byteArrToShort(byte b[], short s, int index) {
        b[index + 1] = (byte) (s >> 8);
        b[index + 0] = (byte) (s >> 0);
    }
    /**
     * byte[]转short
     *
     * @param b
     * @param index
     * @return
     */
    public static short byteArrToShort(byte[] b, int index) {
        return (short) (((b[index + 0] << 8) | b[index + 1] & 0xff));
    }
    /**
     * 16位short转byte[]
     *
     * @param s
     *            short
     * @return byte[]
     * */
    public static byte[] shortToByteArr(short s) {
        byte[] targets = new byte[2];
        for (int i = 0; i < 2; i++) {
            int offset = (targets.length - 1 - i) * 8;
            targets[i] = (byte) ((s >>> offset) & 0xff);
        }
        return targets;
    }
    /**
     * byte[]转16位short
     * @param b
     * @return
     */
    public static short byteArrToShort(byte[] b){
    	return byteArrToShort(b,0);
    }

    /**
     * long转byte[]
     * @param x
     * @return
     */
    public static byte[] longToBytes(long x) {
        buffer.putLong(0, x);
        return buffer.array();
    }
    /**
     * byte[]转Long
     * @param bytes
     * @return
     */
    public static long bytesToLong(byte[] bytes) {
        buffer.put(bytes, 0, bytes.length);
        buffer.flip();//need flip
        return buffer.getLong();
    }
    /**
     * 从byte[]中抽取新的byte[]
     * @param data - 元数据
     * @param start - 开始位置
     * @param end - 结束位置
     * @return 新byte[]
     */
    public static byte[] getByteArr(byte[]data,int start ,int end){
		byte[] ret=new byte[end-start];
		for(int i=0;(start+i)<end;i++){
			ret[i]=data[start+i];
		}
		 return ret;
	}

	/**
	 * 流转换为byte[]
	 * @param inStream
	 * @return
	 */
	public static byte[] readInputStream(InputStream inStream) {
		ByteArrayOutputStream outStream = null;
		try {
			outStream = new ByteArrayOutputStream();
			byte[] buffer = new byte[1024];
			byte[] data = null;
			int len = 0;
			while ((len = inStream.read(buffer)) != -1) {
				outStream.write(buffer, 0, len);
			}
			data = outStream.toByteArray();
			return data;
		}catch (IOException e) {
			return null;
		} finally {
			try {
				if (outStream != null) {
					outStream.close();
				}
				if (inStream != null) {
					inStream.close();
				}
			} catch (IOException e) {
				return null;
			}
		}
	}
	/**
	 * byte[]转inputstream
	 * @param b
	 * @return
	 */
	public static InputStream readByteArr(byte[] b){
		return new ByteArrayInputStream(b);
	}
	/**
	 * byte数组内数字是否相同
	 * @param s1
	 * @param s2
	 * @return
	 */
	public static boolean isEq(byte[] s1,byte[] s2){
		int slen=s1.length;
		if(slen==s2.length){
			for(int index=0;index<slen;index++){
				if(s1[index]!=s2[index]){
					return false;
				}
			}
			return true;
		}
		return  false;
	}
	/**
	 * byte数组转换为Stirng
	 * @param s1 -数组
	 * @param encode -字符集
	 * @param err -转换错误时返回该文字
	 * @return
	 */
	public static String getString(byte[] s1,String encode,String err){
		try {
			return new String(s1,encode);
		} catch (UnsupportedEncodingException e) {
			return err==null?null:err;
		}
	}
	/**
	 * byte数组转换为Stirng
	 * @param s1-数组
	 * @param encode-字符集
	 * @return
	 */
	public static String getString(byte[] s1,String encode){
		return getString(s1,encode,null);
	}
	//测试
	public static void main(String []args){
		System.err.println(isEq(new byte[]{1,2},new byte[]{1,2}));
	}
	/**
	 * 字节数组转16进制字符串
	 * @param b
	 * @return
	 */
	public static String byteArrToHexString(byte[] b){
		  String result="";
		  for (int i=0; i < b.length; i++) {
		    result += Integer.toString( ( b[i] & 0xff ) + 0x100, 16).substring(1);
		  }
		  return result;
	}

	/**
	 * 16进制字符创转int
	 * @param hexString
	 * @return
	 */
	public static int hexStringToInt(String hexString){
		return Integer.parseInt(hexString,16);
	}
	/**
	 * 十进制转二进制
	 * @param i
	 * @return
	 */
	public static String intToBinary(int i){
		return Integer.toBinaryString(i);
	}
}
时间: 2024-09-30 06:45:17

最全面的Java字节byte操作,处理Java基本数据的转换及进制转换操作工具,流媒体及java底层开发项目常用工具类的相关文章

java 13-4 Integer和String、int之间的转换,进制转换

1.int类型和String类型的相互转换 A.int -- String 推荐用: public static String valueOf(int i) 返回 int 参数的字符串表示形式. B.String -- int 推荐用: public static int parseInt(String s) 将字符串参数作为有符号的十进制整数进行解析 1 public class IntegerDemo { 2 public static void main(String[] args) {

Java基础笔记(3) 进制与进制转换

---恢复内容开始--- 进制 在一般生活中,我们一直在应用的十进制,就是逢十进一,而今天我们要接触的是,计算机编程常用的进制!首先我们要知道,计算机内部运算采用的是二进制,也就是逢二进制! 1.什么是二进制? 就是只有0 和 1  每当遇到值为2 就向前进一位. 2.为什么计算机内部是二进制? 这就要从硬件说起,计算机是如何储存数据的,要知道我们网络传输,就是你要和别人一起聊天,你们隔着很远,到底是怎样才能让他收到你的聊天内容? 有一根网线还能说过去,毕竟网线链接终端我们也不知道连到哪,保不齐

Java基础复习之一篇:关健字,标识符,注释,常量,进制转换,变量,数据类型,数据类型转换

1.关健字 1.1.被Java语言赋予特定意义的单词(如:class,interface,public ,static) 1.2.全部是小写 1.3.注意事项(goto和const作为关健字保留起来) 2.标识符 2.1.给类,接口,方法,变量起名字的字符 2.2.组成规则(A:英文大小写,B:数据,C:$ _) 2.3.注意事项(不能为数字开头,不能是java中的关健字,区分大小写) 2.4.常见的命名规则(见名知意) A:包   全部是小写 单级包:小写 如:peng,com 多级包:小写

Java字节码操作开源框架简介

avassist  Javassist是一个开源的分析.编辑和创建Java字节码的类库.是由东京技术学院的数学和计算机科学系的 Shigeru Chiba 所创建的.它已加入了开放源代码JBoss 应用服务器项目,通过使用Javassist对字节码操作为JBoss实现动态AOP框架. BCEL  Byte Code Engineering Library (BCEL),这是Apache Software Foundation 的Jakarta 项目的一部分.BCEL是 Java classwor

第五篇 java字节码操作

java动态性的两种常见的实现方式: ①字节码操作 ②反射 运行时操作字节码可以让我们实现如下功能: ①动态生成新的类 ②动态改变某个类的结构(添加.删除.修改  新的属性或方法) 优点: 比反射的开销小,性能高 Javassist性能高于反射,低于ASM BCEL(Byte Code Engineering Library): 是java classworking 广泛使用的一种框架,它可以让你深入JVM汇编语言进行类操作的细节.BCEL与Javassist有不同的处理字节码的方法,BCEL在

java中Integer包装类的详细讲解(java二进制操作,所有进制转换)

程序员都很懒,你懂的! 今天为大家分享的是Integer这个包装类.在现实开发中,我们往往需要操作Integer,或者各种进制的转换等等.我今天就为大家详细讲解一下Integer的使用吧.看代码: package com.herman.test; public class IntegerTest { public static void main(String[] args) { System.out.println("Integer中的常量***************************

java中Integer包装类的具体解说(java二进制操作,全部进制转换)

程序猿都非常懒,你懂的! 今天为大家分享的是Integer这个包装类.在现实开发中,我们往往须要操作Integer,或者各种进制的转换等等.我今天就为大家具体解说一下Integer的使用吧.看代码: package com.herman.test; public class IntegerTest { public static void main(String[] args) { System.out.println("Integer中的常量**************************

java byte 16进制转换

整型转16进制: int devIdInt = Integer.parseInt(devId); String devIdString = Integer.toHexString(devIdInt); 16进制转为字节: byte devBin = (byte) Integer.parseInt(devIdString, 16); byte devBin =Integer.valueOf(devIdString, 16).byteValue(); byte devBin =Byte.parseB

Java的进制转换操作(十进制、十六进制、二进制)

2014-05-06 17:34 吴文付 最近由于工作上的需要,遇到进制转换的问题.涉及到的进制主要是 十进制,十六进制,二进制中间的转换. 这里整理一下.具体的计划为:封装一个转换类,一个测试类. 1.十进制 转 十六进制: 2.十进制 转 二进制 3.十六进制 转 十进制: 4.十六进制 转 二进制: 5.二进制转 十进制: 6.二进制转十六进制: Java的进制转换操作(十进制.十六进制.二进制),布布扣,bubuko.com