Skip to content

Latest commit

 

History

History
134 lines (101 loc) · 3.29 KB

5060-190203-000506 二进制文件流存取整数.sy.md

File metadata and controls

134 lines (101 loc) · 3.29 KB
show version enable_checker
step
1.0
true

二进制模式

回忆

  • 上次我们用二进制写了文件
  • 写的时候也可以seek调整流头
  • 这二进制写和字符写好像也差不多
  • 为什么要有这么一个二进制写的方式呢?🤔

写数字

图片描述

  • 尝试直接写数字
  • 失败
  • 要把的是bytes-like
  • 字节码

编码

图片描述

  • 把 123 编码为 4字节有符号整型变量
  • ">i"
      • "big-endian"
    • < - "little-endian" - 默认缺省
    • i 有符号整形变量
  • 现在把这4个字节写进去

写入

图片描述

  • 写进去了么?
  • 在terminal里观察一下

图片描述

读出

图片描述

  • rb
    • r - read - 读模式
    • b - binary - 二进制
  • 解码之后出来的是一个元组样子的东西
    • (123,)
    • 需要用[0]得到第0各元素

优劣分析

  • 123 用 txt文本的方式读写
    • 用4个字节
    • 运算的话,需要把字符串型转化为 int 型
  • 123 用 binary二进制方式读写
    • 用4个字节
    • 运算的话可以直接运算
  • 但是,二进制方式读写并没有独特的优势啊
  • 我们再来试试

多个数据

图片描述

  • 用二进制方式读写

    • 4个数据
    • 总共需要4*4=16字节
  • 对比纯文本的话

    • 3+4+5+6 = 17字节
    • 而且还要加上3个分隔符
    • 17+3 = 21 字节
    • 最终文本转化为数字也需要开销
  • 更何况二进制存储格式非常多

    • 有符号无符号
    • byte、short、int、long等
  • 这一批可以写进去么?

写入

  • 写进去

图片描述

验证

  • 去文件系统验证

图片描述

  • 可以读出来么?

读取

  • 用二进制读出来

图片描述

  • 读写成功

优点

  • pack和unpack
    • 明确地规定了到底用哪种方式进行编码解码
    • 这对于编程是很明确的
  • 原来不同的系统有不同的数据编码方式
  • c语言 大致规定了 不同数据类型的位数
  • 但是还有些不明确的地方
    • 比如 16位机 和 32位机 对于 int 长度
    • 可能加法之后
    • 出现了巨大的负数
  • 这对于早期python用户是难以理解的
    • 科学家、数学家
    • 对于补码的概念还是不理解的
    • 包括递归导致的空间不足
    • 堆栈溢出等等
    • 当时确实属于专业领域
  • 他们会因此放弃使用python
  • 他们需要的是科学计算
  • 而不是成为程序员
  • 所以易用易学是 python 的目标
  • 如果出了问题
    • python 会指出 Error 出在哪
    • 哪个数据什么时候在哪不合适

总结

  • 这次在文件流中读写了二进制数字
  • 在多数字的读写实践中,确认
    • 二进制数字更有优势
  • 文件流中可以读写浮点型数字么?🤔
  • 下次再说👋