Java基础-数据类型应用案例展示

                                    作者:尹正杰

版权声明:原创作品,谢绝转载!否则将追究法律责任。

一.把long数据转换成字节数组,把字节数组数据转换成long。

 /*
@author :yinzhengjie
Blog:http://www.cnblogs.com/yinzhengjie/tag/%E6%95%B0%E6%8D%AE%E5%BA%93%E4%BB%8E%E5%85%A5%E9%97%A8%E5%88%B0%E7%B2%BE%E9%80%9A/
EMAIL:y1053419035@qq.com
*/
package cn.org.yinzhengjie.smallTestBullKnife; /**
* 1.把long数据转换成字节数组.
*
* 2.把字节数组数据转换成long.
*/ public class GetLongBytesDemo {
public static void main(String[] args) {
long src = -1000;
System.out.println(src);
byte[] arr = longTobytes(src);
for (byte b : arr) {
System.out.printf("%d,",b);
}
System.out.println();
long dest = bytesToLong(arr);
System.out.println(dest);
} public static byte[] longTobytes(long number){
byte[] bys = new byte[8];
bys[0] = (byte)(number >> 56);
bys[1] = (byte)(number >> 48);
bys[2] = (byte)(number >> 40);
bys[3] = (byte)(number >> 32);
bys[4] = (byte)(number >> 24);
bys[5] = (byte)(number >> 16);
bys[6] = (byte)(number >> 8);
bys[7] = (byte)(number >> 0);
return bys;
} public static long bytesToLong(byte[] arr){
long number;
long lon1 = (arr[0] & (long)0xFF) << 56;
long lon2 = (arr[1] & (long)0xFF) << 48;
long lon3 = (arr[2] & (long)0xFF) << 40;
long lon4 = (arr[3] & (long)0xFF) << 32;
long lon5 = (arr[4] & (long)0xFF) << 24;
long lon6 = (arr[5] & (long)0xFF) << 16;
long lon7 = (arr[6] & (long)0xFF) << 8;
long lon8 = (arr[7] & (long)0xFF) << 0;
//number = lon1 + lon2 +lon3 + lon4 +lon5 + lon6 +lon7 + lon8; //方法可行且便于理解,但不推荐使用
number = lon1 | lon2 |lon3 | lon4 | lon5 | lon6 | lon7 | lon8; //位运算是最快的,加减乘除最终都会转换成位运算。虽然不容易理解,但是推荐使用!
return number;
}
} /*
以上代码执行结果如下:
-1000
-1,-1,-1,-1,-1,-1,-4,24,
-1000
*/

二.有5亿整数(非负),去重计算不同整数的个数,300M内存。

 /*
@author :yinzhengjie
Blog:http://www.cnblogs.com/yinzhengjie/tag/%E6%95%B0%E6%8D%AE%E5%BA%93%E4%BB%8E%E5%85%A5%E9%97%A8%E5%88%B0%E7%B2%BE%E9%80%9A/
EMAIL:y1053419035@qq.com
*/
package cn.org.yinzhengjie.smallTestBullKnife; import org.junit.Test; public class IntegerDeweighting {
/**
* 5亿整数去重统计,这里只是写一个思想!
*/
@Test
public void test5Billion(){
int len = 0;
if (Integer.MAX_VALUE % 8 == 0) {
len = Integer.MAX_VALUE / 8;
} else {
len = Integer.MAX_VALUE / 8 + 1;
}
//初始化字节数组
byte[] bytes = new byte[len];
//定义需要去重的数据,我们将这些测试数据定义到一个数组中!
byte[] arr = {1,2,3,4,5,6,7,1,2,3,4,5,8,10};
for (byte b : arr) {
do5Billion(bytes,b);
}
System.out.println(count1(bytes));
} /**
* 将正整数存在数组中的位置中
* @param bytes : 存储正整数的数组
* @param temp : 需要存储的正整数的值
*/
public static void do5Billion(byte[] bytes , int temp){
//计算数组下标
int index = temp / 8 ;
//计算位的坐标
int bit = temp % 8 ;
//存放1到对应的坐标上去,如果下表中存储的数据已经满了,那么就不需要进行或运算了!
if(bytes[index] != -1){
bytes[index] = (byte)(bytes[index] | (1 << bit)) ;
}
} /**
* 用于统计正整数出现的个数。
* @param bytes : 存储数组的数组
* @return : 返回正整数出现的次数
*/
public static int count1(byte[] bytes){
//统计正数出现的个数
int count = 0 ;
//遍历数组
for(byte b : bytes){
//遍历每个数组的字节数组的值,如果字节数组中下标存储的值为1,那么就让count加1.
for(int i = 0 ; i < 8 ; i ++){
count = count + ((b >> i) & 0x1) ;
}
}
return count ;
}
} /*
以上代码执行结果如下:
9
*/

三.通过程序创建文本文件,内容是abc,采用uncode码,文件大小是10字节。

 /*
@author :yinzhengjie
Blog:http://www.cnblogs.com/yinzhengjie/tag/%E6%95%B0%E6%8D%AE%E5%BA%93%E4%BB%8E%E5%85%A5%E9%97%A8%E5%88%B0%E7%B2%BE%E9%80%9A/
EMAIL:y1053419035@qq.com
*/
package cn.org.yinzhengjie.smallTestBullKnife; import org.junit.Test; import java.io.FileOutputStream; /**
* 通过程序创建文本文件,内容是abc,采用uncode码,文件大小是10字节
*/
public class UnicodeFile {
private final String filePath = "D:\\BigData\\JavaSE\\yinzhengjieData\\yinzhengjie.txt";
@Test
public void touchFile() throws Exception {
FileOutputStream fos = new FileOutputStream(filePath);
//写入Unicode的头部信息,需要写入连续的-2和-1,占用2个字节。要注意的是UTF8或者GBK等编码都没有这个编码头部信息哟!
fos.write(-2);
fos.write(-1);
//我们知道Unicode编码在存储字符时是需要用2个字节存储。此时我们写一个字符‘a’,它用两个字节表示则为:"0,97",因此用Unicode写入'a'如下:
fos.write(0);
fos.write(97);
//此时我们再一次写入头部信息
fos.write(-2);
fos.write(-1);
//这个时候我们写入连续写入‘b’,'c'
fos.write(0);
fos.write(98);
fos.write(0);
fos.write(99);
//释放资源
fos.close();
}
}

  生产Unicode编码的文件如下:

四.将byte变换成无符号的整数(0 ~ 255 , 正数不变)

 /*
@author :yinzhengjie
Blog:http://www.cnblogs.com/yinzhengjie/tag/%E6%95%B0%E6%8D%AE%E5%BA%93%E4%BB%8E%E5%85%A5%E9%97%A8%E5%88%B0%E7%B2%BE%E9%80%9A/
EMAIL:y1053419035@qq.com
*/
package cn.org.yinzhengjie.smallTestBullKnife; import org.junit.Test; public class UnsignedIntegers {
@Test
public void myUnsignedNumber(){
byte num = -1;
int i = num & 0xFF;
System.out.println(i);
}
} /*
以上代码执行结果如下:
255
*/

Java基础-数据类型应用案例展示的更多相关文章

  1. java基础-多线程应用案例展示

    java基础-多线程应用案例展示 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.两只熊,100只蜜蜂,蜜蜂每次生产的蜂蜜量是1,罐子的容量是30,熊在罐子的蜂蜜量达到20的时候 ...

  2. Java基础-数据类型int,short,char,long,float,double,boolean,byte

    Java语言是静态类型的(statical typed),也就是说所有变量和表达式的类型再编译时就已经完全确定.由于是statical typed,导致Java语言也是强类型(Strong typed ...

  3. java基础数据类型包装类

    */ .hljs { display: block; overflow-x: auto; padding: 0.5em; color: #333; background: #f8f8f8; } .hl ...

  4. 谈谈Java基础数据类型

    Java的基本数据类型 类型 意义 取值 boolean 布尔值 true或false byte 8位有符号整型 -128~127 short 16位有符号整型 -pow(2,15)~pow(2,15 ...

  5. Java基础数据类型二进制转换

    前言: 本文主要介绍java基础类型的二进制转换和二进制的基本概念. 二进制: 1,二进制是以0和1为码,逢2进1,比如3=11=1*2+1. 2,在计算机当中其它进制的算法基本基于2进制,因为计算机 ...

  6. JAVA基础数据类型

    JAVA的数据类型粗略分两种 1.基本数据类型 整数类型: byte,short,int,long 浮点类型: float,double 字符类型: char 布尔类型: boolean 基本语法格式 ...

  7. java基础-数据类型之殇

    一 前言 Java的数据类型分为2种,分别是基本数据类型和引用数据类型:java的数据类型是强数据类型,意味着每声明一个变量,其必定有与之对应的数据类型:面试常问的java8大基本数据类型其实是基本数 ...

  8. Java 基础数据类型

    Java 提供的基础数据类型(也称内置数据类型)包含:整数类型.浮点类型.字符类型.布尔类型. 整数类型 整数类型变量用来表示整数的数据类型.整数类型又分为字节型(byte).短整型(short).整 ...

  9. Java基础-基本数据类型转换案例

    java基本数据类型八中 byte = Byte short = Short char = Character int = Integer long = Long float = Float doub ...

随机推荐

  1. Kubernetes学习之路(二十二)之Pod资源调度

    目录 Pod资源调度 1.常用的预选策略 2.优选函数 3.节点亲和调度 3.1.节点硬亲和性 3.2.节点软亲和性 4.Pod资源亲和调度 4.1.Pod硬亲和度 4.2.Pod软亲和度 4.3.P ...

  2. storm从入门到放弃(三),放弃使用 StreamId 特性

    序:StreamId是storm中实现DAG有向无环图的重要一个特性,但是从实际生产环境来看,这个功能其实蛮影响生产环境的稳定性的,我们系统在迭代时会带来整体服务的不可用. StreamId是stor ...

  3. memcached 和redis比较

    同属于NOSQL存储,网上流传很多memcached能做的是redis都可以做,为什么基本现在两种都火,原因他们有各自擅长的地方. memcahed内部采用多核模式,单列运行很快.memcached采 ...

  4. 实战重现隐藏在A标签_blank下的危险漏洞,简略说明noopener的作用

    前几日,在看阮一峰老师的博客文章中,发现了这么一篇 .标题为 <target = "_blank" 的危险性(英文)>.这篇文章同事看过之后因为不理解其中的危险之处,念 ...

  5. [咸恩静][Real Love]

    歌词来源:http://music.163.com/#/song?id=484056972 作曲 : Andrew 崔/Brian Cho/220 [作曲 : Andrew 崔/Brian Cho/2 ...

  6. 日本厚劳省对IT技术人员展开确保海外人才调查

    新浪美股讯 5月13日消息,共同社报道,日本厚生劳动省将开始对在国内工作的外国籍系统工程师(SE)及程序员的劳动条件进行实际状况调查.为避免在与海外的人才获取竞争中败北,希望掌握接纳企业的需求等推动企 ...

  7. Daily Scrum - 11/16

    时间:午饭 今天小组例会主要是汇报了各自的进度.任烁那边主要为工程添加了单词的类(包含各个参数等成员变量),方便以后实现算法:拜重阳实现了一个简易的“点进-点出”UI,可谓迈出了艰难的第一步:章玮和罗 ...

  8. acegi security实践教程—入门

    Acegi Security概念    Acegi Security是基于J2EE的企业软件应用提供全面的安全服务.通俗的说,就是封装的安全框架.提到安全,大家脑子中第一反应肯定是权限控制.的确如此, ...

  9. Alpha冲刺-第三天

    1.1 今日完成任务情况以及遇到的问题. 完成任务情况 杜世康:使用正则表达式对于弹幕文本中的数字,字母,符号,非法字符等过滤. 刘丹,李玉莹:实现主播管理功能 曹莹雯,尹楠: 调用NLPIR/ICT ...

  10. Beta冲刺——day7

    Beta冲刺--day7 作业链接 Beta冲刺随笔集 github地址 团队成员 031602636 许舒玲(队长) 031602237 吴杰婷 031602220 雷博浩 031602134 王龙 ...