A, . 因为这三个字节在文本类型的文件中是不可能存在的,所以可以判断这3个字节就可以了.function IsBin"og:type" content="webpage">A, . 因为这三个字节在文本类型的文件中是不可能存在的,所以可以判断这3个字节就可以了.function IsBin" /> A, . 因为这三个字节在文本类型的文件中是不可能存在的,所以可以判断这3个字节就可以了.function IsBin"> 怎样把txt转化为二进制文本格式_教程_内存溢出

阅读 8

怎样把txt转化为二进制文本格式,第1张

dfm文件二进制格式时, 其文件会加一个文件头, 其中前3个字节来标识其为二进制, 这三个字节分别为:$FF, $0A, $00. 因为这三个字节在

文本

类型的文件中是不可能存在的,所以可以判断这3个字节就可以了.

function IsBinDfm(const ADfmFileName: string): BooleanVar mBinStream:TMemoryStream

mBuff : array [0..2] of bytebegin mBinStream := TMemoryStream.Createtry mBinStream.LoadFromFile(ADfmFileName)

mBinStream.Read(mBuff, 3)

//前三字节: $FF, $0A, $00

if (mBuff[0] = $FF) and (mBuff[1] = $0A) and (mBuff[2]= $00) then

Result := True else Result := False

finally

mBinStream.Freeendend判断出来后, 再将二进制转为文本格式就容易了.Delphi提供了ObjectResourceToText函数.写法如下:

procedure DfmBin2Txt(ADfmFileName: string)Var inFileStream: TMemoryStream

outFileStream: TFileStreambegin inFileStream := TMemoryStream.Create

inFileStream.LoadFromFile(ADfmFileName)try outFileStream := TFileStream.Create(ADfmFileName, fmCreate)try try inFileStream.Seek(0, soFromBeginning)

ObjectResourceToText(inFileStream, outFileStream)

except

Raise Exception.Create('This dfm is bin, error on trans bin to txt.')endfinally

inFileStream.Freeendend至此,大功告成!

这样大的数据量,用文本文件并不适合,其实完全可以使用SQL之类的数据库,这样检索速度和检索代码都可以大量节省了。

如果使用文件,可阅读的文本文件,检索肯定是效率较低的。提供一个使用自定义文件的思路吧:(注意不是可阅读的文本,只是程序读取方便)

使用纯数值的结构体保存和读取数据,这样每个结构体的大小是固定的,位置可计算。

使用这样的结构体,你的一行数据大约占用48字节或80字节(双精度),不需要空格空行,这样百万条数据也不过是48M大小的文件。

增加一个索引文件,用索引文件记录page之类的大段分隔的位置号和大段的长度,方便快速定位读取。

可以通过BufferedReader 流的形式进行流缓存,之后通过read(字节流)方法获取到缓存的内容。

BufferedReader bre = null

try {

String file = "D:/test/test.txt"

bre = new BufferedReader(new FileReader(file))//此时获取到的bre就是整个文件的缓存流

byte[] b = new byte[1024]

int len = 0

while((len=bre .read(b))!=-1){//判断是不是到最后一个字节

System.out.println(new String(b,0,len))//输出二进制内容

}


bre.close()//关闭流

备注: 流用完之后必须close掉,如上面的就应该是:bre.close(),否则bre流会一直存在,直到程序运行结束。

欢迎分享,转载请注明来源:内存溢出

原文地址:
http://outofmemory.cn/tougao/8112153.html缓存
数据
(0) 微信扫一扫 打赏 支付宝扫一扫 微信扫一扫
支付宝扫一扫
恒基达鑫股票 恒基达鑫股票
AMD 锐龙5 2400gcpu不能安装win7系统吗,装好机子后一装win7就蓝屏
上一篇
2023-04-13
打开文件的软件有哪些
2023-04-13

发表评论 后才能评论
提交

评论列表(0条)

2022-4-12

晓辉
多尔
A, . 因为这三个字节在文本类型的文件中是不可能存在的,所以可以判断这3个字节就可以了.function IsBin", "pubDate": "2023-04-13", "upDate": "2023-04-13" } A, . 因为这三个字节在文本类型的文件中是不可能存在的,所以可以判断这3个字节就可以了.function IsBin', author : '恒基达鑫股票', cat_name : '教程', time_y_m : '2023年04月', time_d : '13', site_motto : '内存溢出' };
保存{label} {label} {label} {label} {script} {script} {script} {script}