在做网络协议的时候,为了节省流量,通常会把一些简短的业务数据整合到一个字节中,以二进制形式用1位或几位表示。如6、7位代表valueA,而第5位到第3位代表valueB,剩下3位代表valueC。如何在Java中有效的提取出需要的数据呢?
Java中的基础数据类型和包装类型中都没有bit这个对象,因为Java中拥有位运算符,通过组合这些运算符即可实现位操作。然而位提取却不那么简单。首先Java中的byte是8位带符号整数,最高位为符号位;其次二进制在Java中是以补码表示的,对于负数的话会有空位被1填充的情况。
原理:对需要截取的位与1,则还是原值;对不需要截取的位与0,则结果为0。最后左移将空位移除,则剩余的值即为需要截取的值。
最终的位处理算法如下:
/**
* 截取字节某几位的值.
* 主要用于1个字节转换后的二进制代码每一位或几位代表一个业务含义。
* 如截取字节值为5,二进制为0000 0101,其中从第2位到第1位在一起代表一个值,截取后为10,转换整型后为2
*
* @param b 字节
* @param begin 开始位置(最高位计7)
* @param end 结束位置
*
* @return 截取后的值
*/
public static int getBitsValue(byte b,int begin,int end)
{
if(begin>7||end<0||end>begin)
throw new IllegalArgumentException();
//byte在位移时将转换为int型处理
if(b==0)
return 0;
else
{
// int and = 0;
// for(int i=begin;i>=end;i--)
// {
// and += 1 << i;
// }
int and = (2 << begin) - (1 << end); //优化后的算法,不用循环
return (b & and) >> end;
}
}
PS:其中有等比数列求和算法,原先采用循环方式,后优化算法;但实际测试性能没有差异,奇怪?!
PS2:如有更优方法请不吝赐教...
2009-03-12
1、对负数的处理有误,已修正
分享到:
相关推荐
在Java编程语言中,图像处理是一项重要的功能,可以用于创建、编辑或操作图像。本教程将探讨两个关键的图像处理技术:模糊处理和锐化处理。这些技术在图像分析、图像增强以及艺术创作中有着广泛的应用。 模糊处理是...
java图片处理工具类JAR包 java-image-scalingjar
Java中文文档分句工具是一款专为处理英文文本文件设计的应用,它主要实现了以下几个核心功能,对于深入理解和使用Java编程语言处理文本数据具有重要的实践意义。 首先,该工具能够按照特定的标点符号对英文文本进行...
在Java开发中,处理大数据量是常见的需求之一,特别是当数据规模达到几百万级别时,如何高效、稳定地处理这些数据变得尤为重要。本文将详细介绍一种Java一次性查询处理几百万数据的有效方法,并通过具体代码示例进行...
在64位版本中,JVM可以利用更多的内存,适合处理大型数据或内存消耗大的应用。 3. **Java运行时环境(JRE)**:JRE是运行Java应用程序所必需的环境,它包含了JVM和一些核心类库。JRE是JDK的一部分,但也可以单独...
这份手册详细介绍了Java标准类库中的各种类、接口、方法和异常,是Java学习者和开发者的得力助手。 在Java编程中,类库是预先编写好的一组类和接口的集合,它们提供了丰富的功能,可以帮助开发者构建高效、稳定的...
在Java应用程序开发过程中,经常遇到的一个问题就是内存溢出错误,特别是在处理大量数据或长时间运行的应用时。其中,“java.lang.OutOfMemoryError: Java heap space”是一种常见的异常情况,它表明Java虚拟机(JVM)...
Java API文档是Java开发者的重要参考资料,它包含了Java开发工具包(JDK)中的所有类、接口、方法和常量的详细说明。这份中文网页版的Java API文档为中国的开发者提供了便利,无需通过英文版本来学习和查找API信息,...
在Java编程语言中,处理图像是一项常见的任务,包括图片的旋转、翻转和镜像操作。这些功能在很多场景下都很实用,例如照片编辑、图像处理应用或是网页开发。本篇将详细介绍如何使用Java实现这些功能,并以`ImgRotate...
在这个过程中,可能会遇到性能优化、多线程处理、异常处理等问题,这些都是Java编程中常见的挑战,需要开发者具备扎实的基础和实践经验。 总之,“Java+OpenCV+OCR 图像字符处理”是一个综合性的项目,涵盖了图像...
9. **用户交互(User Interaction)**:Java3D支持键盘、鼠标等输入设备的事件处理,使用户能够与3D场景进行交互,例如旋转、平移场景或选择物体。 10. **兼容性**:Java3D可在32位和64位系统上运行,这意味着开发...
6. **Java数据库连接(JDBC)**:JDBC 4.0在Java 6中引入,提供自动连接管理、增强的元数据支持和新的SQL语句处理方式,提高了数据库操作的便利性。 7. **Swing和JavaFX**:尽管Java 6的Swing组件已经相当成熟,但...
### Java处理100万行超大Excel文件秒级响应 #### 一、问题背景与需求分析 在项目开发过程中,经常会遇到需要处理大量Excel数据的情况。这些数据可能包括成千上万条记录,每条记录又包含多个字段。传统的处理方式...
在Java中,可以使用`javax.sound.sampled`包来处理PCM音频,包括读取、写入和转换PCM数据。 3. **音频编码**:从PCM到MP3的转换涉及到音频编码,这是一个将原始PCM数据压缩成更小的MP3文件的过程。通常,我们需要...
书中深入浅出地介绍了Java的基础语法,包括变量、数据类型、运算符、流程控制(如if语句、switch语句、循环结构)以及异常处理。这些基础知识是编写任何Java程序的基础,也是理解和解决问题的关键。 接着,书中的...
java使用fastJson处理复杂Json字符串,直接获取key对应的value值
3. **依赖(Dependency)**: 介绍了如何在Java项目中添加ElasticSearch Java API依赖,特别是推荐使用与ElasticSearch版本号一致的transport版本号。这是使用ElasticSearch Java API前的必要配置。 4. **Java客户端...
这里我们将深入探讨如何在Java的main方法中实现这个功能,以及相关的HTTP请求和响应处理。 首先,Java中发送HTTP POST请求通常会用到`HttpURLConnection`类或者第三方库如Apache HttpClient或OkHttp。下面我们将...
- 服务器端处理:接收到请求后,更新用户的 Locale 信息,并将新的 Locale 信息保存在会话(Session)或 Cookie 中。 - 重定向或渲染页面:根据新的 Locale 信息,返回相应的资源包并重新渲染页面。 5. **Struts...
此文件包含了基于java的图像处理源代码,具体有图像灰度变换、阈值变换、线性变换、伪彩色处理、图像融合、图像合成、内置变换、仿射变换、图像插值、边缘检测、图像分割、hough变换、图像编码、分形演示等等等等,...