什么是文件格式?

news/2024/10/18 18:23:35/

       java 字节流汇总: java 字节流入门(读文件)

       有了之前 4 篇对文件的操作工具之后,终于到了文件格式的介绍部分!本文介绍文件格式的定义,并实现一个自己的文件格式。这个文件格式十分简单,只用来说明原理。

文件格式的定义

       wiki 定义:

       A file format is a standard way that information is encoded for storage in a computer file. It specifies how bits are used to encode information in a digital storage medium.

       翻译一下:

       文件格式是将信息进行编码并存储在计算机文件中的标准方式。它指定如何使用字节来编码信息,并存储在数字存储媒介中。

       人话:

       就是告诉你数据是怎么存在文件中的。有了文件格式,你就可以将数据写成这种格式的文件,并且将数据从这种格式的文件中读出来。文件格式的本质就是一种协议。

       举个例子,word、excel、PPT 就是文件格式,他们按照自己的格式进行组织,计算机中不同的文件后缀就代表不同格式的文件,同样格式的文件的内容可以不同。

       开发一种文件格式,一般都需要开发读写接口。最简单的写接口是将一个数据写入到文件中,最简单的读接口就是把里边的所有数据全部读出来(这里的读出来,一般需要以用户可认识的格式读出来。不能用户写了个a,你读出来个#,然后跟用户说 # 就是 a ,这是耍流氓)。

       再举例子,word 给人提供了一个界面,让你可以写文字。保存关闭之后再打开。他还能给你展示之前写入的内容,这就是读文件。

       文件格式一般包含两部分:data 和 metadata。data 即数据;metadata 即元数据(描述数据的数据),比如这个文件中一共有几条数据,数据的起始位置是多少,长度是多少。

       下面介绍一个自己的文件格式:

实现自己的文件格式!

       这个文件格式的功能为:写 int 数据;读取所有数据。

       文件结构如下图:因为文件在磁盘上是一维结构,因此文件格式就直接画成一条线了,这个文件格式中,前边是数据,最后是元数据。当然你也可以设计成其他样子,比如元数据和数据交叉存放。这里只介绍一个比较简单的。

c66c5f691772c709914351f481953f67.png

       原料如下:写流程用到了 ByteArrayOutputStream 和 FileOutputStream。 读流程用到了 RandomAccessFile。这里的 metadata 就是一个 int 类型的 count,记录文件中数据的个数。isWrite 用来判断此实例是读流程还是写流程。一般文件格式都是先写,关闭之后再另起线程进行读取。

8ee9fda78d1b486ad6d3f2c21d6efafb.png

       两个小工具,用来将 int 和 bytes 间的转换

e8c212b88ee701f6bb90a7dc213c3218.png

       写入方法:将数据缓存进 baos,计数+1。这时候只把数据的字节数组放在了内存中,还没有真正往文件里写数据。

0fc7c3bc9ec1890cea2b7b9d77e6892d.png

       close 方法:先将 metadata (count)写入 baos 末尾,然后将 baos 中的所有bytes 写入文件。最后关闭文件。

0787eded6bef0355f73fcb3e31e6867b.png

       读方法:先读文件末尾的 metadata,再读数据。上边我们说了,metadata 一般包括了数据的个数,所在位置,长度。但是这里的 metadata 只有一个数据的个数。这是不是有问题了?没问题,因为我们的数据都是 int,占 4 个字节,所以数据整体长度就有了。并且我们的数据是从 文件开头开始写的,因此所在位置也是预先知道的。 这就是文件格式,怎么写的怎么读。

2dcbea5d51257c5c0f2f0180d2cd27b4.png

       另一个方面也不能忽略,那就是 metadata 其实也是一种数据,那么 metadata 我们是怎么读的呢?其实 metadata 也需要自己的 metadata,这样就无穷无尽无止境了,metadta 还有 metadata。。。但是,是有止境的,一般那个终止点再文件的开头或结尾,存储了一个位置相邻的 metadata 的长度。这样,就找到了第一个metadata。之后的就可以一连串找出来了。比如在这个例子中,这个终止点是一个 int,存在文件的末尾,占 4 个字节。

       主方法:先起一个实例写文件,再起一个实例读文件。每次用完实例后需要关闭。

dac91e3223ab81f951b33417a7a09fa6.png

       运行结果:所有数据被读出来了

967ca2ca486967a7a223662b4e5ae407.png

总结

       是不是很开心,今天我们对文件格式有了一个初步了解,并且实现了一个自己的文件格式。你也可以自己设计文件格式。

       一般设计一款文件格式需要考虑以下几个事:

       (1)data 和 metadtata 如何组织:放在一起还是分开,metadata有几层等。

       (2)写入流程中内存占用:在内存缓存多少数据后刷到磁盘。

       (3)如何降低磁盘占用:用什么压缩编码方式。

       (4)如何加速查询:用什么索引,如何过滤。

       (5)文件是否支持修改:是直接覆盖还是生成新文件。

       代码:  

       https://github.com/qiaojialin/Java-IO-Learning

       如果觉得不错,可以推荐给身边的人。还可以随手点赞,长按关注!

ee0fda7e9c500c4570de2b64112dc98f.gif


http://www.ppmy.cn/news/733503.html

相关文章

文件的修改

引入 1.修改的概念 对于硬盘上数据的修改, 根本没有改的操作, 只有覆盖操作 2.修改的流程 文件的修改都是数据加载到内存中, 在内存中修改完再覆盖入硬盘 一.修改方式一 1.修改过程 先以 r 模式打开源文件,将源文件内容全部读入内存然后在内存中完成修改再以…

如何将电脑文件类型进行显示

电脑文件类型的显示 很多电脑的文件格式默认隐藏:如何显示文件格式,点击文件夹选项,在查看栏将隐藏已知文件类型的扩展名的勾选去掉,就可以了。这是Win10系统,Win7在页面可以直接看到文件夹选项!

更改文件的默认打开方式

鼠标右键单击你要修改的文件。 在弹出的菜单中点击属性。 在打开的界面中点击 更改。 在弹出的界面中选择你要更改的程序。 点击确定,完成更改。 END 在不修改默认程序的情况下的打开方式 右击你要打开的文件。 在弹出的菜单中将鼠标移动到打开方式。 …

Rsync之远程同步

一.Rsync远程同步 1.Rsync远程同步介绍 rsync(Remote Sync,远程同步) 是一个开源的快速备份工具,可以在不同主机之间镜像同步整个目录树,支持增量备份,并保持链接和权限,且采用优化的同步算法&…

修改文件扩展名(只需四步)

修改文件扩展名 win10系统修改文件扩展名只需4部,打开我的电脑->查看->选择->查看->取消勾选(已知隐藏文件的扩展名)->确定。具体见图: 1.打开我的电脑 2.点击查看 3.点击选择 4.点击查看 5.取消勾选 6.确定 7.…

文件的拓展名(后缀名)怎么快速修改

最近有很多朋友在问,如何快速改名,比如将多个文件的后缀名进行修改,该如何操作呢?不知道的宝贝们,下面请随小编一起来试试吧,希望能给大家带来帮助。 所需工具 文件素材若干 操作步骤 将需要修改的所有文…

WIN10 如何修改 文件后缀名 设置后缀名可修改

管理员权限下:打开任意一个文件夹---查看---选中文件扩展名:这时 文件的后缀名就显示出来了,单击文件 就可以修改后缀名了

修改文件后缀直接改变文件属性

想利用新建文本文档后直接修改后缀.txt为.c从而快速获得一个.c文件,但却不行,其本质还是一个文本文档。 WIN E 打开资源管理器, 勾选文件拓展名。 再此新建.txt文件,把后缀.txt修改为.c即可。