大数据Java基础(一)int型与byte型数组的转换

  为了在接下来的篇章中讲解用java实现文件的归档和解归档,需要先了解一下Java中int型与byte型数组之间的相互转换。

  首先,我们先来看看int型转换成byte型数组。

  我们知道,Java中,一个int型占用4个字节,一个byte型占用1个字节,所以,对于一个int型,我们需要一个长度为4的byte型数组来对其进行存储。

31位——24位 23位——16位 15位——8位 7位——0位

  

  一个int型的4个字节如上图所示,假设用来存储的字节数组为bytes[],那么,我们可以用bytes[0]存储int型的第一个字节(7位——0位),bytes[1]存储int型的第二个字节(15位——8位),bytes[2]存储int型的第三个字节(23位——16位),bytes[3]存储int型的第四个字节(31位——24位)。具体代码如下:

public static byte[] int2Bytes(int integer)
{
        byte[] bytes=new byte[4];
        bytes[3]=(byte) integer>>24;
        bytes[2]=(byte) integer>>16;
        bytes[1]=(byte) integer>>8;
        bytes[0]=(byte) integer;
        return bytes;}

  这里需要注意的是,当你将一个int型强制类型转换为byte型的时候,最高的三个字节会被砍掉,只留下最低的8位赋值给byte型。

  接下来,我们来看一下byte型数组转换成int型。

  我们知道,计算机是以补码的形式存放数值型数据,当我们对一个byte型进行移位操作的时候,这个byte型会先自动补全到32位(即一个int型),再进行移位操作。举个例子:一个byte型的-1,在内存中的补码是八个1:11111111,当我们进行移位时,(比如说左移8位),它会进行补全,而且是有符号位的补全,再左移8位,所以最后结果是:11111111 11111111 11111111 00000000,但我们因为最后在将byte型数组转换成int型的时候,需要对数组元素使用按位或( | )操作,因此,移位结果前面的符号位如果不去除,将影响我们的运算,得出一个错误的结果。(上例中我们左移8位,需要将11111111 11111111 11111111 00000000去掉前面的那些1,只保留次低位上的1,即为:00000000 00000000 11111111 00000000)。

  我们可以先将byte数据元素与0xff(二进制的00000000 00000000 00000000 11111111)进行按位与运算( & ),再进行移位,来去除前面的符号位。byte型数组转换成int型的代码如下:

  public static int bytes2Int(byte[] bytes )
    {     //如果不与0xff进行按位与操作,转换结果将出错,有兴趣的同学可以试一下。
        int int1=bytes[0]&0xff;
        int int2=(bytes[1]&0xff)<<8;
        int int3=(bytes[2]&0xff)<<16;
        int int4=(bytes[3]&0xff)<<24;

        return int1|int2|int3|int4;
    }

原文地址:https://www.cnblogs.com/liuyongdun/p/9780907.html

时间: 2024-10-10 09:42:50

大数据Java基础(一)int型与byte型数组的转换的相关文章

从0开始学大数据-Java基础-三元运算符/键盘录入(4)

我们从零开始学习大数据技术,从java基础,到Linux技术涉猎,再深入到大数据技术的Hadoop.Spark.Storm技术,最后到大数据企业平台的搭建,层层递进,由点到面!希望技术大牛能过来指导学习. 上一节了解Java运算符,其中三元运算符没有做讲解,本节我们开始学习Java基础-三元运算符/键盘录入,将会围绕以下几个知识点进行展开学习: 三元运算符 键盘录入数据 一.运算符 1.三元运算符 接着上一节的话题运算符,本节讲三元运算符,在讲三元运算符之前,可能会有很多朋友会问,是不是有一元运

从零开始学大数据-Java基础-switch语句(6)

我们从零开始学习大数据技术,从java基础,到Linux技术涉猎,再深入到大数据技术的Hadoop.Spark.Storm技术,最后到大数据企业平台的搭建,层层递进,由点到面!希望技术大牛能过来指导学习. 上一节学习了流程控制语句,本节学习switch语句. 开始之前,我们先看一下上节的练习题. 一.练习题 if语句格式的练习: 1.获取两个数据中较大的值 2.判断一个数据是奇数还是偶数,并输出 程序执行结果如下: 二.switch语句 流程控制语句的选择结构 1 选择结构(也被称为分支结构)

【全集】大数据Java基础

课程介绍 本课程是由猎豹移动大数据架构师,根据Java在公司大数据开发中的实际应用,精心设计和打磨的大数据必备Java课程.通过本课程的学习大数据新手能够少走弯路,以较短的时间系统掌握大数据开发必备语言Java,为后续大数据课程的学习奠定了坚实的语言基础. 适用人群 1.想学大数据没有语言基础的学员 2.想学大数据没有Java语言基础的学员 3.转行想学大数据的学员 4.了解Java,大数据Java知识体系不完整的学员 课程视频下载地址(视频完整,无加密) 链接:https://pan.baid

从0开始学大数据-Java基础语法(2)

我们从零开始学习大数据技术,从java基础,到Linux技术涉猎,再深入到大数据技术的Hadoop.Spark.Storm技术,最后到大数据企业平台的搭建,层层递进,由点到面!希望技术大牛能过来指导学习. 上一节了解Java的发展史和基本操作,本节我们开始学习Java语言的基础语法,将会围绕以下几个知识点进行展开学习: 关键字 标识符 注释 常量和变量 运算符 语句 函数 数组 PS:本节先学习前面4个知识点. 1.关键字 关键字的概述 · 被Java语言赋予特定含义的单词 关键字的特点 · 组

大数据JAVA基础第二天

1.各种进制的表现形式和特点  对于整数,有四种表示方式 二进制:0,1 ,满2进1.以0b或0B开头. 十进制:0-9 ,满10进1 八进制:0-7 ,满8进1. 以数字0开头表示 十六进制:0-9及A-F,满16进1. 以0x或0X开头表示.此处的A-F不区分大小写. 如:0x21AF +1= 0X21B0 2.各种进制之间的转换方法 二进制转成十进制,各个位上的书乘以2的幂(权),在求和. 十进制转成二进制,用十进制数除以2取余数,再把余数倒叙排列. 八进制转化成十进制,每个整数乘以8的幂

大数据Java基础第十五天、第十六天作业

使用Socket编写类似QQ通讯工具,显示屏幕的历史聊天记录待优化. import javax.swing.JFrame; import javax.swing.JButton; import javax.swing.JTable; import javax.swing.JTextArea; import javax.swing.table.AbstractTableModel; import javax.swing.table.TableModel; import java.awt.event

大数据Java基础第十六天、第十七天作业

使用Socket编写类似QQ通讯工具,显示屏幕的历史聊天记录待优化. import javax.swing.JFrame; import javax.swing.JButton; import javax.swing.JTable; import javax.swing.JTextArea; import javax.swing.table.AbstractTableModel; import javax.swing.table.TableModel; import java.awt.event

大数据JAVA基础第十天

1.继承extends(也叫扩展) 引入 首先写两个类: //定义学生类 class Student { //成员变量 private String name; private int age; //空构造 public Student(){} //getXxx()/setXxx() public void eat() { System.out.println("吃饭"); } } //定义教师类 class Teacher { //成员变量 private String name;

大数据JAVA基础第七天

1.面向对象编程思想:"类"的引入 前面我们学习过数组,当需要多次遍历数组时,我们可以将遍历的代码封装到方法中,需要遍历时,就调用相应的方法即可,提高代码的复用性. 在对数组遍历的基础上继续增加需求,比如获取最值,数组逆转等,同样需要将这些功能封装到相应的方法中.这样继续封装会发现方法越来越多,于是就想能不能将这些方法继续进行封装呢? 在前面的学习过程中,我们知道"类"是可以存放方法的(虽然目前还不清楚如何去设计一个完整的类,但最起码知道,类中是可以存放多个方法的)