java基础之byte转换工具类

这篇具有很好参考价值的文章主要介绍了java基础之byte转换工具类。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1、Byte[] 转 byte[] 

public static byte[] toPrimitives(Byte[] oBytes) {
        byte[] bytes = new byte[oBytes.length];
        for (int i = 0; i < oBytes.length; i++) {
            bytes[i] = oBytes[i];
        }
        return bytes;
}

2、byte[] 转 Byte[]

public static Byte[] toObjects(byte[] bytesPrim) {
    Byte[] bytes = new Byte[bytesPrim.length];
    int i = 0;
    for (byte b : bytesPrim) bytes[i++] = b; // Autoboxing
    return bytes;
} 

3、byte转十六进制字符

public static String byteToHex(byte b) {
    String hex = Integer.toHexString(b & 0xFF);
    if (hex.length() == 1) {
        hex = '0' + hex;
    }
    return hex.toUpperCase(Locale.getDefault());
}

4、byte[] 转 字符串的bit

public static String byteToBit(byte[] bs) {
    String result = "";
    for (byte b : bs) {
        result = result
                + (byte) ((b >> 7) & 0x1) + (byte) ((b >> 6) & 0x1)
                + (byte) ((b >> 5) & 0x1) + (byte) ((b >> 4) & 0x1)
                + (byte) ((b >> 3) & 0x1) + (byte) ((b >> 2) & 0x1)
                + (byte) ((b >> 1) & 0x1) + (byte) ((b >> 0) & 0x1);
    }
    return result;
}

5、String 转 byte[]

public static byte[] stringToByteArr(String value, String decode) {
    try {
        return value.getBytes(decode);
    } catch (UnsupportedEncodingException e) {
        logger.error("String转化为byte数组", e);
    }
    return null;
}

6、byte[] 转 String

public static String byteArrToString(byte[] arr, String decode) {
    try {
        if (arr.length == 0) {
            return null;
        }
        return new String(arr, decode);
    } catch (UnsupportedEncodingException e) {
        logger.error("byte[] 数组转为 String", e);
    }
    return null;
}

7、byte[] 转 数值

/**
 * byte[] 转为一个数值
 *
 * @param arr   byte数组
 * @param isBig 是否大端模式
 * @param trim  字节长度(long=8, int=4, short=2, byte=1)
 * @return
*/
public static Number byteArrToNumber(byte[] arr, boolean isBig, int trim) {
    if (arr == null || arr.length == 0) {
        return null;
    }
    // 舍弃掉数组长度超过8的部分
    if (arr.length > trim) {
        for (int i = trim; i < arr.length; i++) {
            arr[i] = 0;
        }
    }
    long total = 0;
    for (int i = 0; i < arr.length; i++) {
        long arrVal = arr[i] & 0xFF;
        arrVal = isBig ? arrVal << ((arr.length - i - 1) * 8) : arrVal << ((i) * 8);
        total |= arrVal;
    }
    return total;
}

8、数值 转 byte[]

public static byte[] numberToByteArr(Number number, boolean isBig, int trim) {
    if (number == null) {
        return null;
    }
    if (trim <= 0) {
        return null;
    }
    long value = number.longValue();
    byte[] arr = new byte[trim];
    for (int i = 0; i < trim; i++) {
        long val = value >> (i * 8);
        val &= 0xff;
        if (isBig) {
            arr[trim - i - 1] = (byte) val;
        } else {
            arr[i] = (byte) val;
        }
    }
    return arr;
}

9、多个数组合并一个数组

public static byte[] arrayCopy(byte[]...arrays) {
    //数组长度
    int arrayLength = 0;
    //目标数组的起始位置
    int startIndex = 0;
    for (byte[] bytes: arrays) {
        arrayLength = arrayLength + bytes.length;
    }
    byte[] byteArray = new byte[arrayLength];
    for (int i = 0; i < arrays.length; i++) {
        if (i > 0) {
            //i为0时,目标数组的起始位置为0 ,i为1时,目标数组的起始位置为第一个数组长度
            //i为2时,目标数组的起始位置为第一个数组长度+第二个数组长度
            startIndex = startIndex + arrays[i - 1].length;
        }
        System.arraycopy(arrays[i], 0, byteArray, startIndex, arrays[i].length);
    }
    return byteArray;
}
public static byte[] arrayCopy(List<byte[]> list) {
    //数组长度
    int arrayLength = 0;
    //目标数组的起始位置
    int startIndex = 0;
    for (byte[] bytes: list) {
        arrayLength = arrayLength + bytes.length;
    }
    byte[] byteArray = new byte[arrayLength];
    for (int i = 0; i < list.size(); i++) {
        if (i > 0) {
            //i为0时,目标数组的起始位置为0 ,i为1时,目标数组的起始位置为第一个数组长度
            //i为2时,目标数组的起始位置为第一个数组长度+第二个数组长度
            startIndex = startIndex + list.get(i - 1).length;
        }
        System.arraycopy(list.get(i), 0, byteArray, startIndex, list.get(i).length);
    }
    return byteArray;
}

文章来源地址https://www.toymoban.com/news/detail-617249.html

到了这里,关于java基础之byte转换工具类的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Java中字符串与byte数组之间的转换方法

    在Java编程中,我们常常需要对字符串和byte数组进行转换。字符串一般是用来表示文本信息,而byte数组则是用来表示二进制数据,如图片、音频等。本文将详细介绍Java中字符串和byte数组之间的转换方法,包括将字符串转换为byte数组和将byte数组转换为字符串。 Java中字符串与

    2024年02月09日
    浏览(47)
  • 【面试题】JDK(工具包)、JRE(运行环境和基础库)、JVM(java虚拟机)之间的关系?

    【面试题】JDK、JRE、JVM之间的关系? JDK (Java Development Kit):Java开发工具包,提供给Java程序员使用,包含了JRE,同时还包含了编译器javac与自带的调试工具Jconsole、jstack等。 JRE (Java Runtime Environment):Java运行时环境,包含了JVM,Java基础类库。是使用Java语言编写程序运行的所需环境

    2024年02月11日
    浏览(60)
  • JVM基础(4)——JVM存活判定算法

    作者简介:大家好,我是smart哥,前中兴通讯、美团架构师,现某互联网公司CTO 联系qq:184480602,加我进群,大家一起学习,一起进步,一起对抗互联网寒冬 学习必须往深处挖,挖的越深,基础越扎实! 阶段1、深入多线程 阶段2、深入多线程设计模式 阶段3、深入juc源码解析

    2024年02月02日
    浏览(42)
  • JVM基础(5)——JVM垃圾回收算法

    作者简介:大家好,我是smart哥,前中兴通讯、美团架构师,现某互联网公司CTO 联系qq:184480602,加我进群,大家一起学习,一起进步,一起对抗互联网寒冬 学习必须往深处挖,挖的越深,基础越扎实! 阶段1、深入多线程 阶段2、深入多线程设计模式 阶段3、深入juc源码解析

    2024年02月02日
    浏览(48)
  • 【byte类型数据转换16进制字符串】

    1.byte类型数据长度为8bit(8位), 例如00101110。 2.16进制字符长度4bit(4位), 例如1101,表示D。 3.那么一个byte可以用2(8bit/4bit=2)个16进制字符表示。 4. 1中的00101110可分为0010和1110两部分。 5. 0010可以由00101110右移动4位获得,即001011104。注意,在java中byte是无符号的,全为正的,所有应该做

    2024年02月16日
    浏览(55)
  • JVM之jmap java内存映射工具

    jdk安装后会自带一些小工具, jmap 命令( Memory Map for Java )是其中之一。主要用于打印指定Java进程(或核 心文件、远程调试服务器)的共享对象内存映射或堆内存细节。 jmap命令可以获得运行中的jvm的堆的快照,从而可以离线分析堆,以检查内存泄漏,检查一些严重影响性能的 大

    2024年02月04日
    浏览(43)
  • JAVA基础JVM讲解

      主要包括两个子系统和两个组件: Class loader(类装载器) 子系统(用来装载.class文件); Execution engine(执行引擎) 子系统(执行字节码,或者执行本地方法); Runtime data area (运行时数据区域)组件(方法区、堆、java栈、PC寄存器、本地方法栈); Native interface(本地接口)组件。

    2024年02月07日
    浏览(48)
  • python中str、bytes、十六进制字符串的相互转换

    python中str、bytes、十六进制字符串的介绍 str是python的内置函数,str字符串在python中使用 \\\'\\\' 或者 \\\"\\\" 括起来的字符串,比如: bytes也是python的内置函数,bytes字符串通常以b开头,比如: 十六进制字符串是指字符串中每个字符表示一个十六进制数,两个字符组成一个字节,比如

    2024年02月21日
    浏览(54)
  • Java虚拟机(JVM):引用计数算法

    我们学习了Java内存运行时区域的各个部分,其中程序计数器、虚拟机栈、本地方法栈3个区域随线程而生,随线程而灭。栈中的栈帧随着方法的进入和退出而有条不紊地执行着出栈和入栈操作。每一个栈帧中分配多少内存基本上是在类结构确定下来就已知的,因此这几个区域

    2024年02月12日
    浏览(42)
  • Java虚拟机(JVM):垃圾收集算法

    目录 一、分代收集理论 二、标记-清除算法 三、标记-复制算法  四、标记-整理算法 分代收集理论建立在两个分代假说之上: 1、弱分代假说:绝大多数对象都是朝生夕灭的。 2、强分代假说:熬过越多次垃圾收集过程的对象就越难以消亡。 这两个分代假说共同奠定了多款垃

    2024年02月12日
    浏览(51)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包