自定义文件信息和操作相关的测试
在Windows系统中,文件名后缀并不是无法修改的,而是一个注册表关联打开工具的辅助信息。
修改HKEY_CLASSES_ROOT中的相关配置,就可以让程序关联该类型文件,同样的文件的缩略图信息也是在这里进行配置。
修改文件名的后缀,对于文件内容本身没有任何影响。
对于文件内容本身,会存在相应的头信息,来让软件识别该文件是否为可以打开的格式。
而在常规的软件操作中,封装默认是会读取完整的文件,然后在进行操作。
因为文件操作在C++ 中默认是stream,所以实际上,是可以根据需要,直接读取对映的文件区块信息显示的。
这里可以解决大文件读取时,对磁盘的压力,可以持续刷新缓存流,或者设置相关的信息。
比如用结构体保存相关的数据,然后把结构体中的数据直接从内存中保存到文件中。在这种情况下,c++ 依然可以实现在在内存中类似的精细化操作,即如果能够计算出,保存文件结构的大小在的位置,C++ 直接跳转到对映起始点的字节出,读取指定长度的char*,然后因为内存里面的信息,也都是以同样格式存在的,所以可以直接拿到对映的信息。
我试着用这种方式保存了一下opencv 的mat 结构,结果因为mat 是指针,保存下来的信息数据不够用。
试着去将mat的data 和数据信息分开保存,结果可行。
压缩问题。
图片的压缩问题就转变为了 char* 的压缩问题。如果data 中的数据比如是纯色,压缩比就可以非常高,因为内存中的数据都是一样的。
可以使用zlib
PS:
做了两个测试,源文件229K,
直接用 ofstream << 写入mat ,大概5M,
Data 写入 1M ,用winrar 压缩 ,大概在193K。
原文件直接winrar 压缩 163K
源文件 1.68M
直接用 ofstream << 写入mat ,大概5M,
Data 写入 1.47M ,用winrar 压缩 ,1.2M
原文件直接winrar 压缩 1.59M
结果就是这种方式效果还不错,以上推论应该有效。