精华内容
下载资源
问答
  • 严格来说.DAT 并不是一种标准文件格式,许多软件都会使用这个扩展名存储文件,但文件含义却不同,所以这要看具体情况来定。但是,有时你可能会在收到的邮件里看到包含一个.dat格式的附件,名称为winmail.dat。我们...
    严格来说.DAT 并不是一种标准文件格式,许多软件都会使用这个扩展名存储文件,但文件含义却不同,所以这要看具体情况来定。但是,有时你可能会在收到的邮件里看到包含一个.dat格式的附件,名称为winmail.dat。我们或许已经知道对方发送过来的是文件,但是收到的却是这样的附件,其原因何在?下面志文工作室与您一起探讨。
      如果你使用非Outlook软件来处理来自Outlook以及Exchange Server的E-mail,你就很可能会遇到附件为winmail.dat的邮件,而你完全不知道这个附件如何打开。你也许会询问这封邮件的发件人,这时对方可能也是一头雾水,因为人家只是正常使用Outlook收发邮件,从来没有遇见过这种现象,但收件方在WEBMAIL上查看这封邮件时,却发现附件变成了 Winmail.dat。
      那么这个winmail.dat附件到底是什么呢?其实原因在于,MS的工具在编码打包你的邮件进行发送时,如果按照默认指定的RTF格式,会把格式信息按照MS自己的一套标准存放在邮件体中,造成非Outlook客户端不认识,无法正确解析。

    解决方案
    1、如果可能,向发件人建议不要使用Outlook,或者让他发送邮件时不要使用RTF格式,纯文本或HTML均可。
    2、如果没办法让邮件的发送人调整或更改邮件客户端,你也可以下载winmail.dat阅读器。你可以从这里下载winmail.dat阅读器:
    http://www.kopf.com.br/winmail/winmail-reader-setup.exe

    3、如果你使用outlook邮件客户端收发邮件,并希望让自己发送的邮件不再出现此类问题,那么下面的拓展内容或许对你有所帮助。

    拓展:
    Microsoft邮件RTF格式介绍
    1.什么是RTF格式

    RTF 格式是Microsoft专有的邮件格式,如果从Microsoft Outlook或Microsoft Exchange Server中发送 RTF 格式的邮件,收件方在WEBMAIL上查看附件均会显示为“Winmail.dat”,通过OE收取邮件后,看不到附件。

    2.Foxmail:RTF格式常见问题的解决方案

    1)别人给我发信时带有附件,但用户收到时看不到附件:
    需 要在低版本的Foxmail(低于Foxmail6.0 Beta5)中导入这封邮件,在Foxmail中打开这封邮件,看附件是是否会重现或附件变为Winmail.dat(出现winmail.dat或出现 当时发件方发送附件,这是由Foxmail版本来决定的)。
    2)发送方使用RTF格式发送了的邮件,该如何正常读取邮件中的附件:
    A、收件方使用OUTLOOK软件或Foxmail6.0 Beta5以上的版本收取邮件。
    B、对于邮件已经收取到OE中的,直接将企业邮箱邮件导入到Foxmail6.0 Beta5以上的版本。
    C、收件方使用低于Foxmail6.0 Beta5版本的客户端收信或使用WM来看邮件,看到的附件为Winmail.dat,可以使用winmail_opener或WMViewer软件来直接打开Winmail.dat这个文件。
    3)发件方一次性给多个人发信,只有个别人收到的邮件为RTF格式的邮件(可以根据RTF格式邮件的特征来判断):
    在Outlook中可以针对具体的收件方设置发送的邮件格式(具体的操作办法可以参见http://support.microsoft.com/default.aspx?scid=kb;zh-cn;290809地址),如果发件方将某一收件人的发送邮件格式设置为RTF格式,则会出现这种问题;
    4)用户使用的是Outlook软件,如何才能确保发出的邮件不是RTF格式:
    启 动Outlook软件,打开 “工具”-“选项”-“邮件格式”,把“邮件撰写格式”设定为 HTML 或纯文本。并在该选项页面的“Internet格式”中的“Outlook RTF 选项”强制把发送到 Internet 的 RTF 邮件转换成 HTML 格式。另外,Microsoft Exchange Server 上也是类似选项,管理员应酌情加以限制。

    3.如何控制邮件中的 TNEF
    可以通过三种方法控制 TNEF:

    全局 - 如果将默认电子邮件格式更改为纯文本或超文本标记语言 (HTML),则有助于确保仅在某种 Outlook 功能需要 TNEF 时才发送 TNEF。
    每个收件人 - 可以在收件人的电子邮件地址中指定不发送 TNEF,以便收件人总是收到邮件的纯文本版本。
    每封邮件 - 撰写新邮件或答复收到的邮件时使用此方法。

    4.如何指定电子邮件格式
    1)全局更改
    使用以下步骤关闭 TNEF:

    在工具菜单上,单击选项,然后单击邮件格式选项卡。
    在“以该邮件格式发送”框中,单击纯文本或 HTML,然后单击确定。

    使用以下步骤以 TNEF 格式发送邮件:

    在工具菜单上,单击选项,然后单击邮件格式选项卡。
    在“以该邮件格式发送”框中,单击以选中 Microsoft Outlook RTF 格式,然后单击确定。

    2)每个收件人更改
    A.在“联系人”文件夹中

    使用以下步骤关闭 TNEF:

    在“联系人”文件夹中找到收件人的记录。
    双击收件人的电子邮件地址。
    在 Internet 格式框中选择“只发送纯文本”。

    使用以下步骤以 TNEF 格式发送邮件:

    在“联系人”文件夹中打开收件人的记录。
    双击收件人的电子邮件地址。
    单击 Internet 格式框中的“使用 Outlook RTF 格式发送”。

    B.在“个人通讯簿”中

    使用以下步骤关闭 TNEF:

    在“个人通讯簿”中找到收件人。
    双击收件人的电子邮件地址。
    单击以清除“发送给该收件人的邮件始终采用 Microsoft Exchange RTF 格式”复选框,然后单击确定。

    使用以下步骤以 TNEF 格式发送邮件:

    在“个人通讯簿”中找到收件人。
    双击收件人的电子邮件地址。
    单击以选中“发送给该收件人的邮件始终采用 Microsoft Exchange RTF 格式”复选框,然后单击确定。

    3)每封邮件更改
    使用以下步骤关闭 TNEF:

    “新建”一封邮件或在最近收到的邮件上单击答复。
    在邮件格式工具栏上,单击以从下拉菜单中选择纯文本或 HTML。

    使用以下步骤打开 TNEF:

    “新建”一封邮件或在最近收到的邮件上单击答复。
    在邮件格式工具栏上,单击以从下拉菜单中选择 RTF。
    展开全文
  • DAT与IDX格式文件如何打开?

    千次阅读 2020-09-22 09:20:30
    什么微图下载的卫星影像是DAT文件? 为什么水经注在百度网盘免费分享的卫星影像是DAT文件? 为什么水经注在百度网盘免费分享的高程DEM是DAT文件? 为什么在微图中免费下载的高清卫星影像是DAT文件? DAT文件用...

    1. 概述

    为什么微图下载的卫星影像是DAT文件?

    为什么水经注在百度网盘免费分享的卫星影像是DAT文件?

    为什么水经注在百度网盘免费分享的高程DEM是DAT文件?

    为什么在微图中免费下载的高清卫星影像是DAT文件?

    DAT文件用什么软件打开查看?

    IDX文件是作什么用的?

    在我们与客户接触的过程中,以上是我们经常被问到的关于DAT与IDX文件格式的问题。

    这里,我们就来对DAT文件与IDX文件格式的产生及用法作一个较为详细的说明,读完本文之后,以上的问题就能迎刃而解了!

    关于百度网盘免费影像数据与免费下载高清卫星影像的相关文档,请参阅:

    百度网盘可免费下载全国34省高清卫星影像啦

    网盘可免费下载全国30米SRTM高程啦

    如何免费下载谷歌高清卫星影像地图?

    2. 散例瓦片地图的特点

    众所周知,现在各种互联地图都是以瓦片的形式提供的,它很好地解决了由于卫星影像地图太大,客户端无法快速从服务器加载显示的问题。

    但它同时也带来了另外一个问题,那就是卫星影像文件会被分割成特别细碎的地图瓦片,而且卫星影像清晰度越高图片数量就会越大。

    以北京天安门广场为例,在19级清晰度下影像的分辨率约0.6米左右,但这时天安门广场仅由20多张瓦片地图组成,如下图所示。

    DAT与IDX格式文件如何打开?

    天安门广场地图瓦片

    也许天安门广场由20多张小图片组成,似乎并不能说明瓦片图片太多的问题,那下面我们来看一看在更大的范围中,瓦片地图的数量情况。

    现在我们假定要下载一个北京市的卫星影像数据,这时可以在"新建任务"对话框看到第19级就有235万张瓦片地图,20级有941万张瓦片地图,而21级则可达3763万张之多,如下图所示。

    DAT与IDX格式文件如何打开?

    瓦片数量统计

    如果将下载的地图瓦片按图片直接存储,那么一个图片就是一个文件,虽然可以按行列号建立目录分别存储,那这上千万级别的文件也非常不便于管理。

    尤其是需要将文件进行移动复制或删除时,这将会是一个相当慢长的过程,因为操作系统检索如此海量级的文件会非常非常非常慢。

    我们曾因为花了一个星期时间删除不完按客户要求下载的瓦片文件,而最后不得不把该硬盘上的重要文件备份出来,然后直接格式化硬盘才了事。

    从此,当有客户提出要直接导出某个省的瓦片到硬盘时,我们是强烈建议不要做这种很不妥当的行为。

    3. DAT与IDX文件的产生

    为了解决瓦片文件太多不便于管理的问题,我们曾考虑过将图片按MBTiles标准保存。

    但归根结底它仅仅是一个SQLite数据库文件,根据我们最后的测试结果来看,它对海量影像存取的便捷性和效率都完全达不到我们的理想要求。

    于是,我们经过对多种GIS文件格式的研究总结之后,发明了一种纯二进制文件的存储格式,直接将散列的瓦片打包存储在一个DAT文件中,同时用一个同名的IDX索引文件记录每张图片的位置。

    因此,如果有一个"北京.dat"的数据文件,就一定会有一个"北京.idx"的索引文件与之对应,IDX文件相当于是一本书的目录,而DAT文件则相当于是这本书的内容,它们是必须成对出现的一组文件,二者缺一不可。

    我们通常把这组DAT和IDX文件叫做任务文件,因为它们是在万能地图下载器或微图中下载地图时产生的任务文件。

    如果我们下载一个名字为"鸟巢和水立方"的卫星地图,它将会在存储目录创建"鸟巢和水立方.dat"文件及"鸟巢和水立方.idx"文件,如下图所示。

    DAT与IDX格式文件如何打开?

    DAT和IDX文件

    卫星影像地图的下载方法,可以参阅"如何免费下载谷歌高清卫星影像地图? "一文的详细说明。

    4. 如何打开DAT与IDX文件

    由于DAT与IDX文件是纯二进制文件,且不依赖于任何第三方数据库或控件,自主研发的科学合理的存储方式与高效的影像检索算法,可对文件中的海量地图瓦片进行高效存储与读取。

    将散例的瓦片地图打包为DAT与IDX文件之后,你可以像备份你喜欢的经典电影一样把它们备份起来。

    当有一天,想要查看备份的文件时,也像回味经典电影一样简单,只需要打开"任务列表",将DAT文件导入任务列表即可查看,操作方法如下图所示。

    DAT与IDX格式文件如何打开?

    导入任务

    导入任务之后,默认显示每一个瓦片的状态,点击"查看结果"按钮,可以将瓦片状态视图切换为影像结果查看视图,如下图所示。

    DAT与IDX格式文件如何打开?

    查看瓦片状态

    将鼠标移动到任务列表上,点击"导出"按钮将显示"导出设置"对话框,如下图所示。

    DAT与IDX格式文件如何打开?

    查看影像

    在"导出设置"对话框中,可以通过设置将影像导出拼接为大图,导出标准TMS瓦片、Google Map 瓦片或ArcGIS Server 瓦片等,也可以导出MBTiles离线包、OruxMaps离线包、GeoPackage离线包和SQLiteDB离线包等,如下图所示。

    DAT与IDX格式文件如何打开?

    导出设置

    DAT与IDX文件对瓦片地图进行打包之后,除了方便存储备份外还非常方便进行数据分享。

    我们将全国卫星影像为大家免费分享到百度网盘就是一个很好的例子,如下图为全国数据中的北京部分。

    DAT与IDX格式文件如何打开?

    北京离线数据

    现在你也可以通过百度网盘下载我们分享的地图数据,具体方法请参阅"百度网盘可免费下载全国34省高清卫星影像啦 "一文中的详细说明。

    DAT和IDX文件除了很适合存储备份、导出大图、导出瓦片、导出离线包和在网盘进行分享外,还可以很方便地进行大范围的离线查看。

    相关文档,请参阅:

    免费从网盘下载的卫星影像和高程DEM如何使用?

    如何离线查看22.3TB全国高清谷歌卫星影像

    5. 总结

    DAT与IDX文件完全没有依赖第三方控件或数据库进行存取,而是直接通过我们自主研发的检索算法进行实时下载存储和离线浏览查看。

    DAT与IDX文件是我们在离线发布全球卫星影像数据的基础,它是让你在局域网构建一个"离线版谷歌地球"的基石!

    最后,如果您对本文中的内容有任何疑问,欢迎您在后台留言,也欢迎您联系我们客服人员或拔打热线电话400-028-0050进行咨询!

    网址:www.rivermap.cn

    展开全文
  •  很多MTV都是.dat 或者是 .mpg格式,用电脑播放软件播放的时候,这两个扩展名好像没有什么区别,互改也没关系。但是具体刻录到光盘还有点区别,有些可以播放有些不能播放。到底他们有什么区别?这个问题困扰了我很...

    分析DAT与MPG文件格式的区别

     

    原文较早,网易博客链接已失效,在此重新发布。

     

      DAT文件和MPG文件有什么区别?

      很多MTV都是.dat 或者是 .mpg格式,用电脑播放软件播放的时候,这两个扩展名好像没有什么区别,互改也没关系。但是具体刻录到光盘还有点区别,有些可以播放有些不能播放。到底他们有什么区别?这个问题困扰了我很长的一段时间。现在终于大体搞明白了,恭喜一下。

    先引用网上的一个解释:“首先,.dat 文件和 .mpg 文件都是符合MPEG1压缩标准的音视频数据流(当然也可以没有音频),但是他们的数据分包大小有所区别。.dat 文件是刻在VCD盘片上的数据,为了方便光盘数据的存取,所以就遵循了VCD刻录的标准,每个数据包的大小为2324个字节,也就是正好一个扇区存储空间的大小。VCD碟片是由一个或多个音轨组成。第一个轨道是一个小的2048字节/扇区的数据轨,有一个iso9660文件系统,通常包含Windows VCD播放程序,但可能还有其他信息 (例如:图像,文字等等)。如果有图片,多半是歌曲的目录和制作公司的宣传图片。第二轨道及之后的轨道是未处理的2324字节/扇区的MPEG(电影)轨,每个扇区包含一个MPEG PS数据包而没有文件系统。通常我们看到的约600 MB的.dat文件,其实它不是一个文件,这就是所谓的ISO通道,用来使Windows能够处理这样的轨道(Windows根本不允许程序直接访问未处理的设备)。在播放时,光驱会顺序读取每个扇驱,而形成一个连续的MPEG(电影)数据流。因此,在Linux下你是不能复制或者播放这些文件。而 .mpg 文件不是为了刻成VCD盘而准备的数据。所以数据包可大也可以很小。常常会遇到这样的情况,整个 .mpg 文件就是一个数据包。”

     

      无疑,上面的解释有道理,至少我认同。DAT和MPG当然不是同类文件,它们的文件头也是不一样。用WinHex分别打开正常的dat和mpg文件,察看它们的文件头信息,

    DAT文件头是以“RIFF….CDXAfmt ” (….为任意字符)开头的,十六进制就是“5249 4646 XXXX XXXX  4344 5841 666D 7420” (XXXX为任意十六进制数值)。

    MPG文件头以“0000 01BA”开头,对于大部分正常的KTV视频文件是“0000 01BA 2100”开头。

    有些非正常的DAT、MPG文件在电脑上能够播放,但是刻录到光盘放到VCD/DVD机上却不能播放,就是在于文件头错误,机器不能正确识别(当然最新的机器可能识别能力要强点),在电脑上正常播放是借助了播放软件强大的纠错功能,可以跳过头文件直接读取视音频数据。

     

    那么平常我们播放的时候怎么区别是DAT还是MPG文件呢。我们当然可以使用专门的编码软件来查看媒体文件,但是比较麻烦,而且不实际,总不能每次都用软件查看吧。其实大多数播放软件都提供了察看文件详细信息的功能,如暴风影音,KMP等。这里我使用KMP这款播放器,因为其提供的媒体文件的播放信息、滤镜信息非常详细,而暴风影音和WMP一样非常简单的信息。打开KMP的“高级播放信息”功能的快捷键是“Alt+Tab”。

      下面我们来研究.dat和.mpg的视频区别,打开一个A.dat文件,显示的部分视频信息如下:

    General

          Complete name : A.dat

          Format : CD Mode 2 /  / CDXA/MPEG-1PS

       Video

          Codec : MPEG-1 Video

          Codec settings/Matrix : Standard

      然后打开一个B.mpg文件,显示的部分视频信息如下:

    General

          Complete name : B.mpg

          Format : MPEG-1 Program

          Format/Family : MPEG-1

       Video

          Codec : MPEG-1 Video

          Codec settings/Matrix : Standard

     

    很明了,虽然编码都是MPEG-1编码(这是肯定无疑的),但DAT文件显示的格式是CD Mode 2 /  / CDXA/MPEG-1PS ,而MPG文件显示的格式是MPEG-1 Program,这就是区别,即使更改扩展名也不变。

      而且DAT格式和MPG格式在大小上有区别,据我在XP平台试验的结果,同一文件转换的DAT格式比MPG格式文件要大一点点。我猜想原因是DAT文件特性决定的,由于DAT文件是划分为很多个大小为2324个字节的扇区存储的,在绝大多数情况下一个DAT文件不可能就是2234字节的整数倍,必然有多余的部分字节,而这多余的可能没有2234字节但是却按2234规格封装数据包,而且可能有连续很多个轨道的数据包都有空间冗余。而整个.mpg 文件就是一个数据包,你数据包有多大就占多少硬盘存储空间,数据是连续的,数据间没有冗余。另外,在Windows平台上看到的DAT文件比MPG大,这大的部分就是DAT文件冗余的空间,其实真正的数据流,也就是光驱读取VCD光盘每个扇驱,而形成一个连续的MPEG数据流和MPG文件数据应该是一样的,至少差别非常小,毕竟DAT和MPG之间是无法无损转换的。

      以上是我的个人经验,在没有更好的解释之前,我只能就这么认为了。

     

     

     

    展开全文
  • 纯真IP数据库QQWry.dat格式详解

    千次阅读 2017-07-20 11:23:10
    自从有了IP数据库这种东西,QQ外挂的显示IP功能也随之而生,本人见识颇窄,是否还有其他应用不得而知,不过,...2004年4、5月间,正逢LumaQQ破土动工,为了加上这个人人都喜欢,但是好像人人都不知道为什么喜欢的显IP功

    自从有了IP数据库这种东西,QQ外挂的显示IP功能也随之而生,本人见识颇窄,是否还有其他应用不得而知,不过,IP数据库确实是个不错的东西。如今网络上最流行的IP数据库我想应该是纯真版的(说错了也不要扁我),迄今为止其IP记录条数已经接近30000,对于有些IP甚至能精确到楼层,不亦快哉。2004年4、5月间,正逢LumaQQ破土动工,为了加上这个人人都喜欢,但是好像人人都不知道为什么喜欢的显IP功能,我也采用了纯真版IP数据库,它的优点是记录多,查询速度快,它只用一个文件QQWry.dat就包含了所有记录,方便嵌入到其他程序中,也方便升级。

    基本结构

    QQWry.dat文件在结构上分为3块:文件头,记录区,索引区。一般我们要查找IP时,先在索引区查找记录偏移,然后再到记录区读出信息。由于记录区的记录是不定长的,所以直接在记录区中搜索是不可能的。由于记录数比较多,如果我们遍历索引区也会是有点慢的,一般来说,我们可以用二分查找法搜索索引区,其速度比遍历索引区快若干数量级。图1是QQWry.dat的文件结构图。

    图1. QQWry.dat文件结构

    要注意的是,QQWry.dat里面全部采用了little-endian字节序

    一. 了解文件头

    QQWry.dat的文件头只有8个字节,其结构非常简单,首四个字节是第一条索引的绝对偏移,后四个字节是最后一条索引的绝对偏移。

    二. 了解记录区

    每条IP记录都由国家和地区名组成,国家地区在这里并不是太确切,因为可能会查出来”清华大学计算机系”之类的,这里清华大学就成了国家名了,所以这个国家地区名和IP数据库制作的时候有关系。所以记录的格式有点像QName,有一个全局部分和局部部分组成,我们这里还是沿用国家名和地区名的说法。

    于是我们想象着一条记录的格式应该是: [IP地址][国家名][地区名],当然,这个没有什么问题,但是这只是最简单的情况。很显然,国家名和地区名可能会有很多的重复,如果每条记录都保存一个完整的名称拷贝是非常不理想的,所以我们就需要重定向以节省空间。所以为了得到一个国家名或者地区名,我们就有了两个可能:第一就是直接的字符串表示的国家名,第二就是一个4字节的结构,第一个字节表明了重定向的模式,后面3个字节是国家名或者地区名的实际偏移位置。对于国家名来说,情况还可能更复杂些,因为这样的重定向最多可能有两次。

    那么什么是重定向模式?根据上面所说,一条记录的格式是[IP地址][国家记录][地区记录],如果国家记录是重定向的话,那么地区记录是有可能没有的,于是就有了两种情况,我管他叫做模式1和模式2。我们对这些格式的情况举图说明:

    图2. IP记录的最简单形式

    图2表示了最简单的IP记录格式,我想没有什么可以解释的

    图3. 重定向模式1

    图3演示了重定向模式1的情况。我们看到在模式1的情况下,地区记录也跟着国家记录走了,在IP地址之后只剩下了国家记录的4字节,后面3个字节构成了一个指针,指向了实际的国家名,然后又跟着地址名。模式1的标识字节是0x01。

    图4. 重定向模式2

    图4演示了重定向模式2的情况。我们看到了在模式2的情况下(其标识字节是0x02),地区记录没有跟着国家记录走,因此在国家记录之后4个字节之后还是有地区记录。我想你已经明白了模式1和模式2的区别,即:模式1的国家记录后面不会再有地区记录,模式2的国家记录后会有地区记录。下面我们来看一下更复杂的情况。

    图5. 混和情况1

    图5演示了当国家记录为模式1的时候可能出现的更复杂情况,在这种情况下,重定向指向的位置仍然是个重定向,不过第二次重定向为模式2。大家不用担心,没有模式3了,这个重定向也最多只有两次,并且如果发生了第二次重定向,则其一定为模式2,而且这种情况只会发生在国家记录上,对于地区记录,模式1和模式2是一样的,地区记录也不会发生2次重定向。不过,这个图还可以更复杂,如图7:

    图6. 混和情况2

    图6是模式1下最复杂的混和情况,不过我想应该也很好理解,只不过地区记录也来重定向而已,有一点我要提醒你,如果重定向的地址是0,则表示未知的地区名。

    所以我们总结如下:一条IP记录由[IP地址][国家记录][地区记录]组成,对于国家记录,可以有三种表示方式:字符串形式,重定向模式1和重定向模式2。对于地区记录,可以有两种表示方式:字符串形式和重定向,另外有一条规则:重定向模式1的国家记录后不能跟地区记录。按照这个总结,在这些方式中合理组合,就构成了IP记录的所有可能情况。

    设计的理由

    在我们继续去了解索引区的结构之前,我们先来了解一下为何记录区的结构要如此设计。我想你可能想到了答案:字符串重用。没错,在这种结构下,对于一个国家名和地区名,我只需要保存其一次就可以了。我们举例说明,为了表示方便,我们用小写字母代表IP记录,C表示国家名,A表示地区名:

    1. 有两条记录a(C1, A1), b(C2, A2),如果C1 = C2, A1 = A2,那么我们就可以使用图3显示的结构来实现重用
    2. 有三条记录a(C1, A1), b(C2, A2), c(C3, A3),如果C1 = C2, A2 = A3,现在我们想存储记录b,那么我们可以用图6的结构来实现重用
    3. 有两条记录a(C1, A1), b(C2, A2),如果C1 = C2,现在我们想存储记录b,那么我们可以采用模式2表示C2,用字符串表示A2

    你可以举出更多的情况,你也会发现在这种结构下,不同的字符串只需要存储一次。

    了解索引区

    在”了解文件头”部分,我们说明了文件头实际上是两个指针,分别指向了第一条索引和最后一条索引的绝对偏移。如图8所示:

    图8. 文件头指向索引区图示

    实在是很简单,不是吗?从文件头你就可以定位到索引区,然后你就可以开始搜索IP了!每条索引长度为7个字节,前4个字节是起始IP地址,后三个字节就指向了IP记录。这里有些概念需要说明一下,什么是起始IP,那么有没有结束IP? 假设有这么一条记录:166.111.0.0 – 166.111.255.255,那么166.111.0.0就是起始IP,166.111.255.255就是结束IP,结束IP就是IP记录中的那头4个字节,这下你应该就清楚了吧。于是乎,每条索引配合一条记录,构成了一个IP范围,如果你要查找166.111.138.138所在的位置,你就会发现166.111.138.138落在了166.111.0.0 – 166.111.255.255 这个范围内,那么你就可以顺着这条索引去读取国家和地区名了。那么我们给出一个最详细的图解吧:

    图9. 文件详细结构

    现在一切都清楚了是不是?也许还有一点你不清楚,QQWry.dat的版本信息存在哪里呢? 答案是:最后一条IP记录实际上就是版本信息,最后一条记录显示出来就是这样:255.255.255.0 255.255.255.255 纯真网络 2004年6月25日IP数据。OK,到现在你应该全部清楚了。

    Demo

    下一步:我给出一个读取IP记录的程序片断,此片断摘录自LumaQQ源文件edu.tsinghua.lumaqq.IPSeeker.Java,如果你有兴趣,可以下载源代码详细看看。

    	/**
    	 * 给定一个ip国家地区记录的偏移,返回一个IPLocation结构
    	 * @param offset 国家记录的起始偏移
    	 * @return IPLocation对象
    	 */
    	private IPLocation getIPLocation(long offset) {
    		try {
    			// 跳过4字节ip
    			ipFile.seek(offset + 4);
    			// 读取第一个字节判断是否标志字节
    			byte b = ipFile.readByte();
    			if(b == REDIRECT_MODE_1) {
    				// 读取国家偏移
    				long countryOffset = readLong3();
    				// 跳转至偏移处
    				ipFile.seek(countryOffset);
    				// 再检查一次标志字节,因为这个时候这个地方仍然可能是个重定向
    				b = ipFile.readByte();
    				if(b == REDIRECT_MODE_2) {
    					loc.country = readString(readLong3());
    					ipFile.seek(countryOffset + 4);
    				} else
    					loc.country = readString(countryOffset);
    				// 读取地区标志
    				loc.area = readArea(ipFile.getFilePointer());
    			} else if(b == REDIRECT_MODE_2) {
    				loc.country = readString(readLong3());
    				loc.area = readArea(offset + 8);
    			} else {
    				loc.country = readString(ipFile.getFilePointer() - 1);
    				loc.area = readArea(ipFile.getFilePointer());
    			}
    			return loc;
    		} catch (IOException e) {
    			return null;
    		}
    	}	
    
    	/**
    	 * 从offset偏移开始解析后面的字节,读出一个地区名
    	 * @param offset 地区记录的起始偏移
    	 * @return 地区名字符串
    	 * @throws IOException 地区名字符串
    	 */
    	private String readArea(long offset) throws IOException {
    		ipFile.seek(offset);
    		byte b = ipFile.readByte();
    		if(b == REDIRECT_MODE_1 || b == REDIRECT_MODE_2) {
    			long areaOffset = readLong3(offset + 1);
    			if(areaOffset == 0)
    				return LumaQQ.getString("unknown.area");
    			else
    				return readString(areaOffset);
    		} else
    			return readString(offset);
    	}
    
    	/**
    	 * 从offset位置读取3个字节为一个long,因为java为big-endian格式,所以没办法
    	 * 用了这么一个函数来做转换
    	 * @param offset 整数的起始偏移
    	 * @return 读取的long值,返回-1表示读取文件失败
    	 */
    	private long readLong3(long offset) {
    		long ret = 0;
    		try {
    			ipFile.seek(offset);
    			ipFile.readFully(b3);
    			ret |= (b3[0] & 0xFF);
    			ret |= ((b3[1] < < 8) & 0xFF00);
    			ret |= ((b3[2] << 16) & 0xFF0000);
    			return ret;
    		} catch (IOException e) {
    			return -1;
    		}
    	}	
    	
    	/**
    	 * 从当前位置读取3个字节转换成long
    	 * @return 读取的long值,返回-1表示读取文件失败
    	 */
    	private long readLong3() {
    		long ret = 0;
    		try {
    			ipFile.readFully(b3);
    			ret |= (b3[0] & 0xFF);
    			ret |= ((b3[1] << 8) & 0xFF00);
    			ret |= ((b3[2] << 16) & 0xFF0000);
    			return ret;
    		} catch (IOException e) {
    			return -1;
    		}
    	}
    
    	/**
    	 * 从offset偏移处读取一个以0结束的字符串
    	 * @param offset 字符串起始偏移
    	 * @return 读取的字符串,出错返回空字符串
    	 */
    	private String readString(long offset) {
    		try {
    			ipFile.seek(offset);
    			int i;
    			for(i = 0, buf[i] = ipFile.readByte(); buf[i] != 0; buf[++i] = ipFile.readByte());
    			if(i != 0) 
    			    return Utils.getString(buf, 0, i, "GBK");
    		} catch (IOException e) {			
    		    log.error(e.getMessage());
    		}
    		return "";
    	}
    

    代码并不复杂,getIPLocation是主要方法,它检查国家记录格式,并针对字符串形式,模式1,模式2采用不同的代码,readArea则相对简单,因为只有字符串和重定向两种情况需要处理。

    总结

    纯真IP数据库的结构使得查找IP简单迅速,不过你想要编辑它却是比较麻烦的,我想应该需要专门的工具来生成QQWry.dat文件,由于其文件格式的限制,你要直接添加IP记录就不容易了。不过,能查到IP已经很开心了,希望纯真记录越来越多~。

    原文链接:纯真IP数据库格式详解
    展开全文
  • dat格式的数据怎么使用二分查找的形式精确返回一个浮点数所在的序数?精确匹配查找的算法是什么,怎么用代码实现?
  • 要将数据保存为.dat文件,而且是16进制的数字,怎么保存? 要读取.dat文件,文件是16进制的,怎么读取? 用CFileDialog类可以...对于读取到的这些数据,你想做什么,可以因人而异。您可以在看懂本篇文章的基础上...
  • 水经注下载器下载的文件格式都是*.dat,那么怎样才能打开呢,今天就给大家整理一下用什么软件可以打开DAT文件及怎么打开DAT文件。 工具/原料 水经注万能地图下载器 微型离线地图地理信息标注绘制系统平台(微图)...
  • winmail.dat

    2016-03-12 10:33:18
    怎么打开.dat格式文档文件:邮件中的winmail.dat附件是什么 本文收集于网络,只用于方便查找方案,感谢源作者,如果侵权请联系删除 如何打开.dat格式文档文件:邮件中的winmail.dat附件是什么 严格来说.DAT 并不...
  • DAT与MPG文件之间有什么区别(转)

    千次阅读 2013-05-20 14:44:58
    很多MTV都是.dat 或者是 .mpg格式,用电脑播放软件播放的时候,这两个扩展名好像没有什么区别,互改也没关系。但是具体刻录到光盘还有点区别,有些可以播放有些不能播放。到底他们有什么区别?这个问题困扰了我很...
  • 目录以文本格式和二进制格式打开文件,到底有什么区别?两种格式的解码区别文本格式open()时的隐式转换参考资料 以文本格式和二进制格式打开文件,到底有什么区别? 我们知道,open() 函数第二个参数是一个字符串,...
  • 微信DAT文件解码 免费 无限制 微信dat文件取证工具

    千次阅读 多人点赞 2021-01-05 17:39:15
    本人最近有个微信取证的需求,网上找不到好用的工具,不是收费就是需要手动计算key值,还有只支持一种图片格式的,总之普遍用起来很难受。 一不做二不休,自己用C#写了一个,使用.NET FRAMEWORK4.0建的项目,如果跑...
  • .dat跟.txt的区别

    千次阅读 2018-12-06 11:09:14
    后缀名无所谓,可以随便取,关键看用什么格式写入。写入方式有二进制和字符串方式,通常约定*.dat用作二进制格式。 *.txt用作字符串格式。字符串格式的文件可以直接用notepad查看内容,但存取速度较慢;二进制格式...
  • 根据我们以往的经验,文本文件通常用来保存肉眼可见的字符,比如 .txt 文件、.c 文件、.dat 文件等,用文本编辑器打开这些文件,我们能够顺利看懂文件的内容。而二进制文件通常用来保存视频、图片、音频等不可阅读的...
  • 概述 尽管我们在免费从网盘下载的卫星影像和高程DEM如何使用...如果你想了解为什么会将离线数据存储为DAT文件格式,请阅读“DAT与IDX格式文件如何打开?”一文中的详细讲解! 如何免费领取数据 如果你已经免费领取..
  • 另外有个笨办法就是用手机录制段视频并直接复制到电脑上播放,在“属性”标签页查看器默认采用的编码器究竟是什么,这样可以帮助你作出判断! -------------------------- 3.x大版本更新,重要: 新增音频...
  • 如何查看.dat文件内容

    万次阅读 2018-12-22 10:34:41
    我们这里讲.dat为文本文件的情况下。 dat文件有很多种类型大多数情况下,.dat文件是程序使用的数据,它只是开发者为了清楚文件的意思而...就可以很清楚地看出数据的格式了:(当然每行每列是什么意思一般都有相应...
  • VC读取dat文件

    千次阅读 2008-03-26 18:58:00
    看看数据是什么格式 读取.dat文件的方法跟普通文件一样 -------------------------------------- FILE *fp; double dbnum[100]; fp = fopen("a.dat", "r"); if(fp != NULL) for(int i = 0; i { if(!scanf("%f", &num...
  • 有没有什么软件能打开微信dat文件? 看了下网上的说明,发现就是异或处理,于是准备将微信dat的转码做出来,方便大家。 原理: 微信dat文件在微信进行图片存储的时候做了异或加密,然后将后缀修改为了dat格式。...
  • python批量处理dat文件及科学计算

    万次阅读 多人点赞 2016-12-29 20:54:50
    python批量处理dat文件及科学计算摘要:近年来,python在编程语言中的地位稳步提升,虽然...坦率的说,没什么理由,什么顺手用什么,但正式来说,python以其简洁的语言格式以及强大的库函数功能奠定了其不菲的身价。
  • 由于Stuart Mc Garrity 提供的原始函数不再维护,他的这个版本的“MDF 导入工具和函数”只是增加了对INCA 7.1.9 引入的新数据公式的支持。 如果有什么问题,请不要犹豫与我联系。
  • 一个dat文件,我想知道其原内容,有大神帮助一下吗?搜索过相关内容,曾看到有人留言说"想知道是什么格式找他"结果找不到这个人了,看他登录好像7-8年都没登录过了.
  • 做专业摄像的朋友常遇到这样一个问题:用佳能相机录像回来导视频素材时,或者剪辑的时候发现,文件夹里其它正常的视频都是MOV或者MP4,唯独有一个特别的文件,格式DAT,大小为0KB,文件打不开,导不进剪辑软件,...
  • 华硕本本重装系统后出现can not open file c:\RECOVERY.DAT 很多网友会觉得困惑,不知道为什么会这样,下面我就为大家来解决这个问题, 方法一: 这个问题就出在华硕自带系统都是装在隐藏分区里的,而且隐藏分区一般...
  • IPIP.Net地址库格式分析

    千次阅读 2018-04-19 17:25:43
    IPIP.NET地址库文件格式分析ipip库是什么?ipip是一个ip地址库, 官网号称全球唯一一个基于各电信运营商,以及网络服务的BGP/ASN数据而分析处理而得来的IP库ipip库有哪些特性地理数据标注准确: 国内的地址标注准确度高...
  • 1、将时间戳转换日期格式 ... 下面是获取时间日期的方法,需要什么样的格式自己拼接起来就好了 2. 更多好用的方法可以在这查到 -> http://www.w3school.com.cn/jsref/jsref_obj_date.asp */ dat...
  •  序列化的作用是什么?为什么要序列化?  1、在进程下次启动时读取上次保存的对象的信息。... 2、在不同的应用程序域或进程之间传递数据。... 所为序列化,就是将对象先转换为一种适当格式,然后
  •  序列化的作用是什么?为什么要序列化?  1、在进程下次启动时读取上次保存的对象的信息。  2、在不同的应用程序域或进程之间传递数据... 所为序列化,就是将对象先转换为一种适当格式,然后再将其传输到目标...
  • 在.NET开发中,我们经常会在bin目录下面看到这些类型的文件: .pdb、.xsd、.vshost.exe、.exe、.exe.config、....那么这些格式的文件到底是干什么用的呢? pdb .pdb文件,是VS生成的用于调试的符号文件(program dat...

空空如也

空空如也

1 2 3 4 5 ... 9
收藏数 177
精华内容 70
关键字:

dat什么格式