起源于不理解为什么Hadoop处理文件时要将数据进行序列化和反序列化
序列化和反序列化就是对象和二进制互转,既然在执行程序时,计算机底层都是在操作二进制,为什么还需要多此一举来转二进制呢?
我们写的程序执行时,是会经过编译器编译为汇编,再转为二进制来执行程序,笼统的说这个过程是编译,将程序转为了二进制,如果反编译的话,那么只是恢复为程序代码,而我们在执行程序的过程中产生的各种数据,如int的整数,String的字符串和自定义的对象,都是一个个数据,我们需要的不是int a = 5这个代码,而需要的是5这个数据,将这个数据存下来。在Java中,这些都被称为对象,将这些对象在程序执行中存储下来就是序列化。序列化的数据可以存在磁盘中,也可以用于传输。
序列化针对于对象,也就是程序中产生的需要的数据,而编译针对的是编写的代码本身,与程序中产生的数据无关。
计算机中任何数据都以二进制形式存储,但是展现时确实各种各样的数据,是因为不同数据存到硬盘中的二进制协议不同。
数字-->ASCII/GBK/UTF-8 -->二进制
文字--GBK/UTF-8 ->二进制
图片-- 像素被分成多个位来表示不同颜色 每个位只有红绿蓝或黑,一号位1代表红 0代表黑