package java.io;





/**

 * Utility methods for packing/unpacking primitive values in/out of byte arrays

 * using big-endian byte ordering.

 */

class Bits {





    /*

     * Methods for unpacking primitive values from byte arrays starting at

     * given offsets.

     */





    static boolean getBoolean(byte[] b, int off) {

        return b[off] != 0;

    }





    static char getChar(byte[] b, int off) {

        return (char) ((b[off + 1] & 0xFF) +

                       (b[off] << 8));/*从offer 开始,取出一个char,byte是8位,若对char,byte,short进行移位,自动转换为int,b[off]长度为32位,移位不会溢出。大端:高位数在低地址*/

    }





    static short getShort(byte[] b, int off) {

        return (short) ((b[off + 1] & 0xFF) +

                        (b[off] << 8));

    }





    static int getInt(byte[] b, int off) { //需要截取4个byte,按大端法构成一个int

        return ((b[off + 3] & 0xFF)      ) +

               ((b[off + 2] & 0xFF) <<  8) +

               ((b[off + 1] & 0xFF) << 16) +

               ((b[off    ]       ) << 24);

    }





    static float getFloat(byte[] b, int off) {

        return Float.intBitsToFloat(getInt(b, off));

    }





    static long getLong(byte[] b, int off) {

        return ((b[off + 7] & 0xFFL)      ) +

               ((b[off + 6] & 0xFFL) <<  8) +

               ((b[off + 5] & 0xFFL) << 16) +

               ((b[off + 4] & 0xFFL) << 24) +

               ((b[off + 3] & 0xFFL) << 32) +

               ((b[off + 2] & 0xFFL) << 40) +

               ((b[off + 1] & 0xFFL) << 48) +

               (((long) b[off])      << 56);

    }





    static double getDouble(byte[] b, int off) {

        return Double.longBitsToDouble(getLong(b, off));

    }





    /*

     * Methods for packing primitive values into byte arrays starting at given

     * offsets.

     */





    static void putBoolean(byte[] b, int off, boolean val) {

        b[off] = (byte) (val ? 1 : 0);

    }





    static void putChar(byte[] b, int off, char val) {

        b[off + 1] = (byte) (val      ); //将char转换成byte数组,按大端法:char(16位)的高8位应该在b[off],低8位在b[off+1]中。>>>是无符号右移

        b[off    ] = (byte) (val >>> 8);

    }





    static void putShort(byte[] b, int off, short val) {

        b[off + 1] = (byte) (val      );

        b[off    ] = (byte) (val >>> 8);

    }





    static void putInt(byte[] b, int off, int val) {

        b[off + 3] = (byte) (val       );

        b[off + 2] = (byte) (val >>>  8);

        b[off + 1] = (byte) (val >>> 16);

        b[off    ] = (byte) (val >>> 24);

    }





    static void putFloat(byte[] b, int off, float val) {

        putInt(b, off,  Float.floatToIntBits(val));

    }





    static void putLong(byte[] b, int off, long val) {

        b[off + 7] = (byte) (val       );

        b[off + 6] = (byte) (val >>>  8);

        b[off + 5] = (byte) (val >>> 16);

        b[off + 4] = (byte) (val >>> 24);

        b[off + 3] = (byte) (val >>> 32);

        b[off + 2] = (byte) (val >>> 40);

        b[off + 1] = (byte) (val >>> 48);

        b[off    ] = (byte) (val >>> 56);

    }





    static void putDouble(byte[] b, int off, double val) {

        putLong(b, off, Double.doubleToLongBits(val));

    }

}

Bits.java的更多相关文章

  1. MyCAT报java.lang.OutOfMemoryError: Java heap space

    早上同事反映,mycat又假死了,估计还是内存溢出,查看了一下错误日志. INFO | jvm | // :: | java.lang.OutOfMemoryError: Java heap spac ...

  2. java,maven工程打tar.gz包执行main方法

    一,需要在pom.xml文件添加plugin, 项目目录结构 <build> <plugins> <plugin> <artifactId>maven- ...

  3. java ----> 基础之位运算

    package test.ant; import java.util.Arrays; import java.io.UnsupportedEncodingException; public class ...

  4. 各种 Java Thread State【转载】

    1,线程状态为“waiting for monitor entry”: 意味着它 在等待进入一个临界区 ,所以它在”Entry Set“队列中等待. 此时线程状态一般都是 Blocked: java. ...

  5. 分析Java Thread State

    使用 TDA 工具,看到大量 Java Thread State 的第一反应是: 1,线程状态为“waiting for monitor entry”: 意味着它 在等待进入一个临界区 ,所以它在”E ...

  6. Tomcat 9内存溢出:"http-apr-8080-Acceptor-0" java.lang.OutOfMemoryError: Direct buffer memory

    Tomcat开启了APR模式,而APR模式会使用堆外内存,关于堆内存可从如下链接了解一下:http://blog.csdn.net/zhouhl_cn/article/details/6573213. ...

  7. 在 TDA 工具里看到 Java Thread State 的第一反应是

    转载:http://itindex.net/detail/43158-tda-%E5%B7%A5%E5%85%B7-java   使用 TDA 工具,看到大量 Java Thread State 的第 ...

  8. java启动参数 设置

    JAVA_MEM_OPTS="" BITS=`java -version 2>&1 | grep -i 64-bit` if [ -n "$BITS&quo ...

  9. Java Algorithm Problems

    Java Algorithm Problems 程序员的一天 从开始这个Github已经有将近两年时间, 很高兴这个repo可以帮到有需要的人. 我一直认为, 知识本身是无价的, 因此每逢闲暇, 我就 ...

随机推荐

  1. mybatis(一)常见ORM框架及JDBC操作工具类

      转载:https://www.cnblogs.com/wuzhenzhao/p/11075569.html 在Java 程序里面去连接数据库,最原始的办法是使用JDBC 的API.我们先来回顾一下 ...

  2. 洛谷p1198 最大数

    #include <iostream> #include <cstdio> #include <algorithm> using namespace std; in ...

  3. PHP 标记官方简明教程; <?php 和 ?> 与 <?php 的使用场景!

    PHP 标记官方简明教程:  <?php 和 ?> 与 <?php  的使用场景! 1 PHP 标记¶ 当解析一个文件时,PHP 会寻找起始和结束标记,也就是 <?php 和  ...

  4. Web 前端必备的各种跨域方式汇总

    Web 前端必备的各种跨域方式汇总 跨域方式汇总 同源策略 协议相同 + 域名相同 + 端口相同 https://www.xgqfrms.xyz/index.html https://www.xgqf ...

  5. setTimeout 实现原理, 机制

    setTimeout 实现原理, 机制 JS 执行机制说起 浏览器(或者说 JS 引擎)执行 JS 的机制是基于事件循环. 由于 JS 是单线程,所以同一时间只能执行一个任务,其他任务就得排队,后续任 ...

  6. Open API collection

    Open API collection online API https://developer.github.com/v3/ https://developer.github.com/v4 http ...

  7. html tag filter in js

    html tag filter in js const html = `可当天预订,必须21时15分之前下单,要求必须<font color=green><b>60</b ...

  8. django学习-12.访问不同url/接口地址实现对指定数据的增删改查功能

    1.前言 通过前面博客[django学习-10.django连接mysql数据库和创建数据表]里的操作,我们已经成功在数据库[hongjingsheng_project]里创建了一张数据表[hello ...

  9. django学习-8.django模板继承(block和extends)

    1.前言 django模板继承的作用:模板可以用继承的方式来实现复用,减少冗余内容. 一般来说,一个网站里一般存在多个网页的头部和尾部内容都是一致的,我们就可以通过模板继承来实现复用. 父模板用于放置 ...

  10. C/C++子函数参数传递,堆栈帧、堆栈参数详解

    本文转载自C/C++子函数参数传递,堆栈帧.堆栈参数详解 导语 因为参数传递和汇编语言有很大联系,之后会出现较多x86汇编代码. 该文会先讲一下x86的堆栈参数传递过程,然后再分析C/C++子函数是怎 ...