首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Delphi字符现在以2个字节而不是1个存储在类型化的二进制文件中.我怎么还能读取我的旧文件?

在Delphi中,从类型化的二进制文件中读取旧文件时,可以使用TStreamReader类来读取文件,并使用TEncoding.BigEndianUnicode编码来处理2字节的字符。以下是一个示例代码:

代码语言:delphi
复制
var
  reader: TStreamReader;
  line: string;
begin
  reader := TStreamReader.Create('path/to/your/file', TEncoding.BigEndianUnicode);
  try
    while not reader.EndOfStream do
    begin
      line := reader.ReadLine;
      // 处理每一行的内容
    end;
  finally
    reader.Free;
  end;

在这个示例中,TStreamReader类使用TEncoding.BigEndianUnicode编码来读取文件,这样就可以正确地处理2字节的字符。reader.ReadLine方法可以用来读取文件中的每一行,然后可以对每一行的内容进行处理。

需要注意的是,这个方法只适用于处理已经存储在类型化的二进制文件中的数据,如果你需要从非类型化的文本文件中读取数据,则需要使用其他方法来处理字符编码。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

深入浅出FlatBuffers原理

除了解析效率以外,二进制格式还带来了另一个优势,数据二进制表示通常更具有效率。我们可以使用 4 字节 UInt 不是 10 个字符存储 10 位数字整数。...string 写入数据结构如下: 示例:string name = “Sword”; vector size 类型为 int,因此初始申请内存时字符串进行四字节字节对齐。...非默认值字段,二进制流中就会记录该字段 offset,值也会存储二进制,反序列化时直接根据offset读取字段值即可。 整个反序列过程零拷贝,不消耗占用任何内存资源。...并且 FlatBuffers 可以读取任意字段,不是像 Json 和 protocol buffer 需要读取整个对象以后才能获取某个字段。FlatBuffers 主要优势就在反序列这里了。...下面官方 Tutorial monster.fbs 为例进行说明: 1 优点 解码速度极快,将序列数据存储缓存,这些数据既可以写出至文件,又可以通过网络原样传输,也可直接读取没有任何解析开销

1K30

关于IO流笔试面试题

所以字符流是由Java虚拟机将字节转化为2个字节Unicode字符为单位字符而成,如果是音频文件、图片、歌曲,就用字节流好点(避免数据丢失);如果是关系到中文(文本),用字符流好点) 字符字符或者字符数组形式读写数据...,只能读写二进制文件;字节流能读写各种类型数据. 3.什么是java序列,如何实现java序列?...无论是何种类型数据,都会二进制序列形式在网络上传送。发送方需要把这个Java对象转换为字节序列,才能在网络上传送;接收方则需要把字节序列再恢复为Java对象。   ...:节点流基础上对之进行加工,进行一些功能扩展 处理流构造器必须要传入节点流子类 7.如果要对字节流进行大量从硬盘读取,要用那个流,为什么?...对象序列:将对象二进制形式保存到硬盘上; 反序列:将二进制文件转化为对象读取.

69410

编码与模式------《Designing Data-Intensive Applications》读书笔记5

进入到第四章了,本篇主要聊点是编码(也就是序列)与代码升级一些场景,来梳理存储之中涉及到编解码流程。...2、当你想把数据写入一个文件或者通过网络发送它时,你必须把它编码成某种形式字节序列(例如,一个JSON文档)。 因此,我们需要两种形式之间某种转换。...编码通常与特定编程语言捆绑在一起,用另一种语言读取数据是非常困难 为了同一对象类型恢复数据,解码过程需要能够实例任意类,如果攻击者可以让您应用程序解码任意字节序列,则它们可以实例任意类。...它通过将字段类型和标记号打包成一个字节,并使用可变长度整数来实现这一点。它不是为1337号使用八个完整字节,而是用两个字节编码,每个字节最高位用来指示是否还有更多字节要来。...每当数据库模式发生变化时,管理员必须手动更新从数据库列名到字段标记映射。Avro是每次运行时简单地进行模式转换。任何读取新数据文件程序都会感知到记录字段发生了变化。

1.4K40

【C语言】看了这篇文章,如果你还不会文件操作的话,把这篇文章给吃了(doge)

从流读取数据,并根据参数格式将其存储到附加参数所指向位置。附加参数应该指向已经分配对象,其类型由格式字符相应格式说明符指定。...count元素数组,每个元素大小为size字节,并将它们存储ptr指定内存块。...参数如下↓ ptr→指向内存块指针,该内存块大小至少为(size*count)字节,转换为void*类型。 size→要读取每个元素大小(字节为单位)。Size_t是一个无符号整型类型。...特别的是,文本文件是指ASCII码方式(也称文本方式)存储文件,更确切地说,英文、数字等字符存储是ASCII码,汉字存储是机内码。...一个文件数据可能出现在存储器层次不同级别,例如,一个文件数据通常被存储辅存(如硬盘),当其需要运行或被访问时,就必须调入主存,也可以暂时存放在主存

77920

《数据密集型应用系统设计》读书笔记(四)

应用程序不可避免地需要随时间变化、调整。大多数情况下,更改应用程序功能时,也需要更改其存储数据:可能需要捕获新字段或记录类型,或者需要以新方式呈现已有数据。...字节: 与上一节普通二进制编码类似,每个字段都有一个类型注释,并在需要时指定长度(例如字符串长度、列表项数)。...,当代码读取新代码写入数据时,对于无法识别的标签号,可以选择直接忽略(通过数据类型注释来确定需要跳过字节数量);当「删除」字段时,只能删除可选字段,保证代码读取新代码数据时不会报错 「向后兼容性...举例来说,假设我们希望把一个关系型数据库内容存储到一个文件,并且希望用二进制格式来避免文本格式问题(JSON、CSV、SQL)。... Pig ,我们可以直接打开一些 Avro 文件,分析其内容,并编写派生数据集 Avro 格式输出文件(无需考虑模式)。

1.9K20

Python3之文件操作file

文件file 什么是文件文件是用于数据存储单位 文件通常用来长期存储数据 文件数据是以字节为单位进行存储 文件操作流程: 打开文件 读/写文件 关闭文件 注意:任何操作系统,一个应用程序同时打开文件数量有最大数限制...二进制文件操作方法 F.read(size=-1) 从一个文件流中最多读取size个字符(文本文件)或字节(二进制文件),如果不给出参数,则默认读取文件全部内容并返回 F.write(text)...文件里 readlines:读取文件全部内容,换行符 ’ \n ’ 分割存在列表 还是以上文件myfile.txt f = open('myfile.txt') res = f.readlines...文件里\n'] readlines读取文件内容是可迭代对象,可以使用for循环遍历,或直接示意索引下标获取想要内容 文件二进制读取现在改了myfile内容如下: 你好!...写内容必须是字符类型不是布尔类型 二进制形式写入文件 f = open('newfile.txt', 'wb') # 使用 wb L = [b'\xe4\xbd\xa0\xe5\xa5\

85310

DDIA 读书分享 第四章:编码和演化

因为持久存储和网络传输都是面向字节。序列本质上是一种“降维”操作,将内存中高维数据结构降维成单维字节流,于是底层硬件和相关协议,只需要处理一维信息即可。...为什么内存数据和外存、网络会有如此不同呢? 在内存,借助编译器,我们可以将内存解释为各种数据结构;但在文件系统和网络,我们只能通过 seek\read 等几个有限操作来流式读取字节流。...编码和序列撞车了? 事务,也有序列相关术语,所以这里专用编码,以避免歧义。 编码(encoding)和加密(encryption)?...数据类型和模式演变 修改数据类型比较麻烦:只能够相容类型中进行修改。 如不能将字符串修改为整形,但是可以整形内修改:32 bit 到 64 bit 整形。...服务某种程度上和数据库类似:允许客户端某种方式存储和查询数据。但不同是,数据库通常提供某种灵活查询语言,服务只能提供相对死板 API。

1.2K20

深入浅出 FlatBuffers 之 Schema

你用二进制装入数据,发送相同二进制文件,并直接从二进制文件读取。...除了解析效率以外,二进制格式还带来了另一个优势,数据二进制表示通常更具有效率。我们可以使用 4 字节 UInt 不是 10 个字符存储 10 位数字整数。 二....可用于就地查找二进制搜索。 hash (on a field) 这是一个不带符号 32/64 位整数字段,因为 JSON 解析过程值允许为字符串,然后将其存储为其哈希。...尽管可以 FlatBuffers(作为具有键和值数组)模拟这一点,但这对于像 FlatBuffers 这样类型系统来说,这样做是一种低效方式,会导致生成相对较大二进制文件。...这是唯一一个不属于 JSON 规范地方(请参阅json.org/),但是需要能够将字符任意二进制编码为文本并返回不丢失信息(例如字节 0xFF 就不可以表示为标准 JSON)。

3.6K20

python encode和decode函数说明

好消息来了,对,那就是python3,新版本python3,取消了unicode类型,代替它是使用unicode字符字符类型(str),字符类型(str)成为基础类型如下所示,编码后变为了字节类型...进行解码,获得字符类型对象u1 u2 = str.decode('utf-8')#如果utf-8编码对str进行解码得到结果,将无法还原原来字符串内容 避免不了是,文件读取问题: 假如我们读取一个文件...ASCII文件也称为文本文件,这种文件磁盘存放时每个字符对应一个字节,用于存放对应ASCII码。...C系统处理这些文件时,并不区分类型,都看成是字符流,按字节进行 处理。输入输出字符开始和结束只由程序控制不受物理符号(如回车符)控制。 因此也把这种文件称作“流式文件”。...FFFEUCS是不存在字符,所以不应该出现在实际传输。UCS规范建议我们传输字节流前,先传输 字符”ZERO WIDTH NO-BREAK SPACE”。

1.2K30

C#序列对象二进制储存方法及底层原理研究

硬盘里保存txt或二进制文件非常容易,当需要保存对象是一个自定义类对象时,此时采用txt或二进制存储都较为复杂,如果采用txt形式,那么保存非文本数据时,需要手动转换,并且txt非常容易修改。...保存为二进制文件较为简单,C#还提供了int32,byte等类型读写方法,可以直接使用,但是仍有弊端,即代码复杂,你需要不断地读取,赋值。...将保存文件二进制形式打开 搜索字符串”123” 发现就在这个字符后面出现了连续41到45,很明显这就是”ABCDE”ASCII码,只不过是16进制,换成10进制就看着舒服多了 同时我们还注意到这些字符前面都有一个数字恰好是后面的字符串长度...最后回到一开始问题上来,我们已经研究了变量序列操作保存方法。如果刚刚仔细观察,会发现文件末尾总是 0B,由此我们可以大胆猜测这是结束符。...后面的数据是按顺序存储不是采用指针方法。

1.2K10

手把手教你前端本地文件操作与上传

如果需要限制上传文件大小就可以通过判断size属性有没有超,单位是字节,而要判断是否为图片文件就可以通过type类型是否image开头。通过判断文件后缀可能会不准,通过这种判断会比较准。...使用FileReader除了可读取为base64之外,还能读取为以下格式: fileReader.readAsDataURL(this.files[]); // 二进制字符串方式读取,结果是二进制内容...把ArrayBuffer打印出来是这样: 可以看到,它对前端开发人员也是透明,不能够直接读取里面的内容,但可以通过ArrayBuffer.length得到长度,还能转成整型数组,就能知道文件原始二进制内容了...,应该怎么读取文件呢?...(通常是使用框架处理了,具体接口不需要关心应该怎么解析) 如果读取结果是ArrayBuffer的话,也是可以直接用xhr.send发送出去,但是一般我们不会直接把一个文件内容发出去,而是用某个字段名等于文件内容方式

1.8K110

了不起Base64

前言 我们项目开发,Base64想必大家都不会很陌生,Base64是将「二进制数据」转换为文本一种优雅方式,使存储和传输变得容易。...RFC文档通常包含了协议规范、技术说明、最佳实践、标准提案等,促进互联网技术发展和互操作性。 我们可以IETF-datatracker[1]输入指定编号或者查找关键字进行搜寻。...可以发送这个消息不是原始消息,然后让接收者反转此过程恢复原始消息。 2. 什么是 Base64 编码? Base64编码将二进制数据转换为文本,具体来说是ASCII文本。...想象一下,如果我们有一张图片或一个「敏感文件」(PDF、文本、视频等),不是简单字符串,我们想将它存储为文本。...现在我们可以将该文本发送或存储在任何地方,任何我们喜欢方式,不必担心一些设备、协议或软件会错误解释原始二进制数据以损坏我们文件。 6.

34320

python|浅谈Pythonpickle模块

Pickle模块作用 Pickle模块用于将python对象序列化为字节流,可存储文件或数据库,也可同通过网络进行传输。...把对象在内存结构转换成便于存储或传输二进制或文本格式,而且以后可以同一个系统或不同系统重建对象副本。pickle模块能把任何Python对象序列化成二进制格式。 ?...因此,文件可以是为二进制读取打开磁盘上文件、IO.Bytesio对象或满足此接口任何其他自定义对象。...编码和错误告诉pickle如何解码由python 2处理8位字符串实例;它们分别默认为'ascii'和'strict'。编码可以是“字节”,将这些8位字符串实例读取字节对象。...编码和错误告诉pickle如何解码由python 2处理8位字符串实例;它们分别默认为'ascii'和'strict'。编码可以是“字节”,将这些8位字符串实例读取字节对象。

2.5K40

MySQLvarchar水真的太深了——InnoDB记录存储结构

这个现象可以看出,varchar(M)M很大,实际是达不到M这个边界值。   使用是英文字母测试不是中文字符,大部分不是4字节,所以能够存储更多字符。...显然错误,因为这里255 / 4,这怎么知道每个存储一个字符是4个字节呢?难道全部存emoji表情?不存字母汉字啥?   实际上不是所有的字符都会占用W个字节。...溢出页:对于非常大字段(如BLOB和TEXT类型),InnoDB可能会将数据存储单独溢出页不是直接在数据行。这可以使得数据行保持较小大小,但也会增加存储和检索这些字段复杂性。...优化I/O操作:对于大型文本或二进制数据读写操作可以直接在外部存储位置进行,避免了大量数据主数据文件频繁读写,提高了I/O操作效率。   ...读取指针:对于大型文本字段,记录实际存储是指向数据实际存储位置指针不是数据本身。 访问外部存储:MySQL根据指针信息访问外部存储(如系统表空间或独立表空间文件),读取实际文本数据。

1.5K40

Java之IO流技术详解

IO 也称为IO流,IO = 流,它核心就是对文件操作,对于 字节字符类型输入和输出流。 IO分类 IO流主要分为两大类,字节流和字符流。按照作用分类,可以分为输入流和输出流。 流?...这里是字节流,怎么可以直接写入String? 嘿嘿,我们使用String类getBytes()方法将String转换成字节数组。...就已经写入了我们String里面的内容了。 InputStream(字节输入流) 这里也就不解释了,他这个输入不是将内容输入到文件,而是将文件里面的内容输入到我们代码。...= -1 现在还是先讲解一下这一段。 我们len是定义一个数值。read()方法,是为了读取到整个文件里面内容字节长度,就像数组lenth()一样。 !...能够高效读写缓冲流,能够转换编码转换流,能够持久存储对象序列对象等等。 它是四个基本File流增强,所以也是4个流,按照数据类型分类。

38850

Node.js 缓冲区(Buffer)究竟是什么?

Buffer 创建时大小已经被确定且是无法调整,在内存分配这块 Buffer 是由 C++ 层面提供不是 V8 具体后面会讲解。 在这里不知道你是否认为这是很简单?...例如,存储 66 这个数字,计算机会先将数字 66 转化为二进制 01000010 表示,印象第一次接触这个是大学期间 C 语言课程,转换公式如下所示: 128 64 32 16 8 4 2...00 00 00 00 00 00> Buffer.allocUnsafe 创建一个大小为 size 字节未初始 Buffer,由于 Buffer 是未初始,因此分配内存片段可能包含敏感数据...缓冲(Buffer) 缓冲(Buffer)是用于处理二进制流数据,将数据缓冲起来,它是临时性,对于流式数据,会采用缓冲区将数据临时存储起来,等缓冲到一定大小之后存入硬盘。... HTTP 传输传输二进制数据,上面例子 /string 接口直接返回字符串,这时候 HTTP 传输之前会先将字符串转换为 Buffer 类型二进制数据传输,通过流(Stream)方式一点点返回到客户端

6.3K32

编码秘密(python版)

编码概念 编码就是将信息从一种格式转换成另一种格式,计算机只认识二进制,简单理解,将我们眼睛看到文字转换为计算机能够识别的二进制格式视为编码,二进制某种编码格式转换为我们能看文字过程可以看成是解码...,现在并不常用,我们这看看这个UTF-8,UTF-8是一种可变长编码格式,存储英文字母只需要一个字节存储汉字需要3个字节,但超大字符集中更大多数汉字要占4个字节。...python2,str类型字符类型在内存存储是bytes数据,Unicode类型字符串在内存存储是unicode数据。...Python3编码 Python3也定义了2种类型字符类型,str和bytes,str类型存储unicode数据,bytes类型存储bytes数据。...解释器来读取文件py2,默认会ASCII将代码解码成unicode数据,但是ASCII码并不认识中文,所以就会出现报错。

84270

Java 字符文件读写

但实际上,字符流操作本质就是「字节流操作」+「编码」两个过程封装,你想是不是,无论你是写一个字符文件,你需要将字符编码成二进制,然后字节为基本单位写入文件,或是你读一个字符到内存,你需要以字节为基本单位读出... char 类型被定义为两个字节大小,也就是说,对于通常字符来说,一个 char 即可存储一个字符,但对于一些增补字符集来说,往往会使用两个 char 来表示一个字符。...,第一个方法用于读取一个字符出来,如果已经读到了文件末尾,将返回 -1,同样 int 作为返回值类型接收,为什么不用 char?...,只是将它们所对应字符串写入文件,例如: print(123); 最终写入文件不是 123 所对应二进制表述,仅仅是 123 这个字符串,这就是打印流。...---- 文章所有代码、图片、文件都云存储 GitHub 上: (https://github.com/SingleYam/overview_java)

1.2K20

一文读懂 DEX 文件格式解析

文件头一般来说占了整个 DEX 文件 0x70 个字节(还不了解 DEX 文件可以看一下前面两篇文章),文件头中,关于字符相关信息一共有 8 个字节,分别位于 0x38(4 Bytes)...字符串索引区存储字符串真正存储在数据区偏移地址, 4 个字节为一组,表示一个字符串在数据区偏移地址,所以索引区一个占字符串数量 X 4个字节那么多,同样,索引区也采用是小端序存储,所以我们在读取地址时...五、类类型解析 1、DEX 文件类型 a、Dex 文件关于类类型需要知道字符串是怎么解析,如果不知道,可以看一下前面部分。...文件字段数量,0x54~0x57这四个字节存储读取字段起始偏移地址,如下所示: ?...或者干脆贴个官方代码,官方代码位运算写很巧妙,但是直接去看,反正是没看懂到底是怎么解码出来

6.6K50

【C进阶】—— 一篇文章带你学会C语言文件操作

sscanf是从字符读取格式数据,所以参数还是字符指针。 好,那我们接着刚才上面写代码,把写入字符数据再还原到一个结构体变量。...文本文件二进制文件 根据数据组织形式,数据文件被称为文本文件或者二进制文件。 数据在内存二进制形式存储,如果不加转换输出到外存,就是二进制文件。...如果要求在外存上ASCII码形式存储,则需要在存储前转换。ASCII字符形式存储文件就是文本文件。 一个数据在内存怎么存储呢?...如有整数10000,如果ASCII码形式输出到磁盘,则磁盘占用5个字节(每个字符一个字节),二进制形式输出,则在磁盘上只占4个字节(VS2013测试)。...我们可以测试一下: 我们现在就把10000二进制形式存到文件

16710
领券