Java I/O : Java中的进制详解
2015-06-14 11:35
302 查看
作者:李强强
上一篇,泥瓦匠基础地讲了下Java
I/O : Bit Operation 位运算。这一讲,泥瓦匠带你走进Java中的进制详解。
在Java世界里,99%的工作都是处理这高层。那么二进制,字节码这些会在哪里用到呢?
自问自答:在跨平台的时候,就凸显神功了。比如说文件读写,数据通信,还有Java编译后的字节码文件。下面会有个数据通信的例子哦。
Java对对象实现Serializablle接口,就可以将其转化为一系列字节,而在通信中,不必要关系数据如何在不同机器表示和字节的顺序。这里泥瓦匠对Serializablle接口,不做详细讲解,以后单独详解。
首先认识下Java中的数据类型:
1、Int整型:byte(8位,-128~127)、short(16位)、int(32位)、long(64位)
2、Float型:float(32位)、double(64位)
2、char字符:unicode字符(16位)
也就是说,一个int等价于长度为4的字节数组。
Java中进制如何转换呢?
在Java中,Int整形以及char字符型被包装的类中提供了一系列的操作方法。比如 java.lang.Integer 中,api如图所示:
下面泥瓦匠写个demo,验证下。
?
右键Run一下,我们可以在控制台中看到如下输出:
?
补充:如果值太大,则需要调用 java.lang.Long 提供的方法。
这里泥瓦匠想到了自己是个学生,典型的OO思想。那学号:1206010035是整型,怎么转成字节呢,上面说的拥有字节码的对象能通信。所以,学校关于学号这个都是这样的方式通信的。因此,要将学号转成字节码才行。
泥瓦匠就写了个工具类 IntegerConvert.java:
?
跑一下,右键Run,可以看到以下输出:
?
代码详细解释如下:
1、(inta >> i * 8) & 0xff
移位 清零从左往右,按8位获取1字节。
2、这里使用的是小端法。地位字节放在内存低地址端,即该值的起始地址。补充:32位中分大端模式(PPC)和小段端模式(x86)。
自然,Long也有其转换方法,如下:
?
那字符串,字符数组呢?比如泥瓦匠的名字:李强强
Java也提供了一系列的方法,其实 java.lang.String 封装了char[],其中本质还是对char数组的操作。代码如下:
?
右键Run一下,可以看到以下输出:
?
论证:这里我们论证了一个中文,需要两个字节表示,也就是说一个中文是16位。
下面简单把泥瓦匠学生的故事延续。
如图,库表中一个学生对象,有个属性是学号。这时候客户端要向服务端发送这个对象。过程如下:
1、对象实现Serializable接口。
实现了Serializable接口的对象,可将它们转换成一系列字节,并可在以后完全恢复回原来的样子。
2、其学号属性值 1206010035,由客户端转换为字节码。
3、字节码传输至服务端
4、服务端接收并转换为对象属性值。
此文讲的点有点多,泥瓦匠就想把这块用到的知识点串起来,然后慢慢每个讲解。总结如下:
1、Java中进制转换是什么?
2、Java中进制转换的作用?
Writer :BYSocket(泥沙砖瓦浆木匠)
微 博:BYSocket
豆 瓣:BYSocket
FaceBook:BYSocket
Twitter :BYSocket
上一篇,泥瓦匠基础地讲了下Java
I/O : Bit Operation 位运算。这一讲,泥瓦匠带你走进Java中的进制详解。
一、引子
在Java世界里,99%的工作都是处理这高层。那么二进制,字节码这些会在哪里用到呢?自问自答:在跨平台的时候,就凸显神功了。比如说文件读写,数据通信,还有Java编译后的字节码文件。下面会有个数据通信的例子哦。
Java对对象实现Serializablle接口,就可以将其转化为一系列字节,而在通信中,不必要关系数据如何在不同机器表示和字节的顺序。这里泥瓦匠对Serializablle接口,不做详细讲解,以后单独详解。
二、Java进制转换
首先认识下Java中的数据类型:1、Int整型:byte(8位,-128~127)、short(16位)、int(32位)、long(64位)
2、Float型:float(32位)、double(64位)
2、char字符:unicode字符(16位)
也就是说,一个int等价于长度为4的字节数组。
Java中进制如何转换呢?
在Java中,Int整形以及char字符型被包装的类中提供了一系列的操作方法。比如 java.lang.Integer 中,api如图所示:
下面泥瓦匠写个demo,验证下。
?
?
三、Java基本类型和字节神奇转换
这里泥瓦匠想到了自己是个学生,典型的OO思想。那学号:1206010035是整型,怎么转成字节呢,上面说的拥有字节码的对象能通信。所以,学校关于学号这个都是这样的方式通信的。因此,要将学号转成字节码才行。泥瓦匠就写了个工具类 IntegerConvert.java:
?
?
1、(inta >> i * 8) & 0xff
移位 清零从左往右,按8位获取1字节。
2、这里使用的是小端法。地位字节放在内存低地址端,即该值的起始地址。补充:32位中分大端模式(PPC)和小段端模式(x86)。
自然,Long也有其转换方法,如下:
?
Java也提供了一系列的方法,其实 java.lang.String 封装了char[],其中本质还是对char数组的操作。代码如下:
?
?
四、浅谈Java通信中的数据
下面简单把泥瓦匠学生的故事延续。如图,库表中一个学生对象,有个属性是学号。这时候客户端要向服务端发送这个对象。过程如下:
1、对象实现Serializable接口。
实现了Serializable接口的对象,可将它们转换成一系列字节,并可在以后完全恢复回原来的样子。
2、其学号属性值 1206010035,由客户端转换为字节码。
3、字节码传输至服务端
4、服务端接收并转换为对象属性值。
五、总结
此文讲的点有点多,泥瓦匠就想把这块用到的知识点串起来,然后慢慢每个讲解。总结如下:1、Java中进制转换是什么?
2、Java中进制转换的作用?
Writer :BYSocket(泥沙砖瓦浆木匠)
微 博:BYSocket
豆 瓣:BYSocket
FaceBook:BYSocket
Twitter :BYSocket
相关文章推荐
- java 框架基础知识(1)----反射-->Spring IoC
- Java I/O : Java中的进制详解
- java的学习 持续更新
- SpringMVC简明教程(一)——搭建
- 总结Java equals()和hashCode()的联系
- spring学习
- 什么是sprng和struts有什么区别?
- java并发编程第四章线程执行器(3)
- 从几个sample来学习JAVA堆、方法区、JAVA栈和本地方法栈
- entryset,IO转换流,filefilter,的练习
- eclipse Ctrl +左键查看源代码提示找不到源
- java并发编程第四章 线程执行器(2)
- Java基础 集合框架 共性方法 迭代器 ArrayList LinkedList Vector HashSet TreeSet
- JAVA问题集锦
- Spring Security实现权限管理
- Java命名规范
- java基础 第5章 隐藏实施过程
- SpringMVC上传文件
- java并发编程第四章 线程执行器(1)
- java HotSpot 内存管理白皮书