第三 字节

字节(Byte) 是计算机信息技术用于计量存储容量的一种计量单位,也表示一些计算机编程语言中的数据类型和语言字符。

计量单位

我们常见的十进制数字的计量单位有:个、十、百、千、万、亿,比亿还大的单位有:兆、京、垓、秭、穰、沟、涧、正、载、极。

二进制也有自己的计量单位。位(bit,Binary Digits):存放一位二进制数,即0或1,为最小的存储单位,8个二进制位为一个字节单位。更大的计量单位有KB、MB、GB、TB、PB、EB、ZB、YB、BB等。

二进制计量单位 单位换算 单位换算(科学计数法) 十进制计量单位 单位换算 单位换算(科学计数法)
b bit(位) 10的4次方
B Byte(字节),1B=8b 亿 万万 10的8次方
KB 1KB=1024B 2的10次方 万亿 10的12次方
MB 1MB=1024KB 2的20次方 万兆 10的16次方
GB 1GB=1024MB 2的30次方 万京 10的20次方
TB 1TB=1024GB 2的40次方 万垓 10的24次方
PB 1PB=1024TB 2的50次方 万秭 10的28次方
EB 1EB=1024PB 2的60次方 万穰 10的32次方
ZB 1ZB=1024EB 2的70次方 万沟 10的36次方
YB 1YB=1024ZB 2的80次方 万涧 10的40次方
BB 1BB=1024YB 2的90次方 万正 10的44次方
NB 1NB=1024BB 2的100次方 万载 10的48次方

字节顺序:大端与小端

多字节字段中的值是按照大末尾(big-endian)顺序规定的,具体来说就是最高位的字节出现在高位,而低位的字节出现在低位。

数据是按照小末尾(little-endian)顺序存储的,高位的字节出现在低位。

常用的两种常用字节编码/解码方式:Base64编码、Hex编码;

Base64编码&解码

    // &[u8;T]/String <=> Base64 String  <=> Vec <=> String

    let  common_base64_str = base64::encode("中文@123&");

    println!("common base64 string: {}", common_base64_str);

    let common_vecu8 = base64::decode(&common_base64_str).unwrap();

    println!("common string: {}", str::from_utf8(&common_vecu8).unwrap());

 

Hex编码&解码

 // 编码和解码十六进制

    let original = b"The quick brown fox jumps over the lazy dog.";

    let expected = "54686520717569636B2062726F776E20666F78206A756D7073206F76\

        657220746865206C617A7920646F672E";


    let encoded = HEXUPPER.encode(original);

    assert_eq!(encoded, expected);


    let decoded = HEXUPPER.decode(&encoded.into_bytes())?;

    assert_eq!(&decoded[..], &original[..]);

    println!("{}", str::from_utf8(&decoded).unwrap());


    let cn = HEXUPPER.encode("功成不必在我".as_bytes());

    println!("{}", cn);

 

大数据

大数据时代,如何低成本、快速地存储、检索、处理海量数据成为很多企业不得不面临的巨大难题。零拷贝、分布式文件系统、分布式数据库、数据挖掘等技术逐渐得到发展。Rust凭借自身内存安全、高性能的优势正在发挥更大的作用:Rust正被引入Linux内核;微软同样在使用Rust重写Windows内核;国产分布式数据库TiDB使用Rust开发核心的存储引擎TiKV。“Rust重写一切”堪称降本增效的一把利器。

MMAP

 #[test]

    fn mmap_mut() -> Result<(), Error> {

        use memmap::MmapMut;

        use std::fs::OpenOptions;

        use std::io::Write;

        use std::ops::DerefMut;

        use std::path::PathBuf;


        // let file = File::options().write(true).open("abcd.txt")?;


        let path: PathBuf = PathBuf::from("abcd.txt");

        let file = OpenOptions::new()

            .read(true)

            .write(true)

            .create(true)

            .open(&path)?;

        file.set_len(30)?;


        let mut mmap = unsafe { MmapMut::map_mut(&file)? };


        // mmap.copy_from_slice(b"Hello, world!");

        (&mut mmap[..]).write_all(b"Hello BeiJing! Hello, world!")?;

        mmap.flush()?;


        Ok(())

    }

 

mmap-sync Rust library for concurrent data access, using memory-mapped files, zero-copy deserialization, and wait-free synchronization.

SIMD

你可能感兴趣的:(Rust七十二变,rust)