A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

字节与IO
- 二进制
- 字节
- IO
-



1. 二进制
二进制也就是01,整个数字体系中只有01,一个二进制位我们称为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
...





0 个回复

您需要登录后才可以回帖 登录 | 加入黑马