字节与IO
- 二进制 - 字节 - IO - 流
1. 二进制二进制也就是0和1,整个数字体系中只有0和1,一个二进制位我们称为1bit
1bit 0, 1 2个值 2^1 2bit 00, 01, 10, 11 4个值 2^2 3bit 000, 001, 010, 011, 100, 101, 110, 111 8个值 2^3 4bit 0000,0001,0010,0011, 0100,0101,0110,0111, 1000,1001,1010,1011, 1100,1101,1110,1111
那么我们可以规定每一个值表示一个意思,比如在2bit中 00 张三 01 李四 10 王二 11 麻子
这只是一个引子
2. 字节1个字节是8个进制位,所以可以表示2^8次方,也就是256个值,所以在java中有byte类型,这个类型是 -128 到 +127,含0,一共256个值
比方说我们的汉字有100000个 256*256 我们的UTF-8其实就是用三个字节来表示汉字的
我们可以规定(注意字节是十进制) 32 表示 “你” 65 表示 “好”
那么 32 65 就表示 你好。 我们的utf-8, gbk等就是通过规定字节的排列规则解析成对应字符,不光字符解析,我们的音频,视频也是把字节按一定规则进行解析。 数据的本质就是按规律排列的字节数组
3. IO程序的本质,其实就是数据的交互,我们将客户输入的数据保存到数据库,从数据库中查询,从文件中获取数据,获取文本返回,将视频返回 本质上都是把我们的 字节数组 从一个位置发送到另一个位置
位置A -> 内存 -> 位置B C盘 D盘 数据库 页面上 文件服务器 磁盘上
但不能直接发送,必须经过我们的内存 那么位置A到内存的过程叫做 input(输入) 内存到位置B的过程叫做output(输出) 这个移动的过程就叫做IO
4. 流有的时候我们文件会太大了,比如100G大的数据文件要移到另一个地方。此时我们无法将这100G文件全部读到我们的内存,假设我们的内存是16G。
此时就要进行分段读取,1次读取一部分,进行流式读取
Offset(偏移量) length(缓冲大小) 0 100M 100M 200M 200M 300M 300M 400M ...
|