Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/delphi/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net Delphi Prism:Does BinaryWriter“;“写入方法”;是否与Delphi中的Writeln方法相同?_.net_Delphi_Delphi Prism_Binaryreader_Binarywriter - Fatal编程技术网

.net Delphi Prism:Does BinaryWriter“;“写入方法”;是否与Delphi中的Writeln方法相同?

.net Delphi Prism:Does BinaryWriter“;“写入方法”;是否与Delphi中的Writeln方法相同?,.net,delphi,delphi-prism,binaryreader,binarywriter,.net,Delphi,Delphi Prism,Binaryreader,Binarywriter,我正在使用Delphi Prism,使用BinaryWriter创建并写入二进制文件,如下所示 method TUnit.Write(bw:BinaryWriter); var i:Integer; begin bw.write(ord(uType)); bw.Write(ord(State)); bw.Write(Address); bw.Write(SubAddress); for i:=1 to 20 do bw.Write

我正在使用Delphi Prism,使用BinaryWriter创建并写入二进制文件,如下所示

method TUnit.Write(bw:BinaryWriter);
var
    i:Integer;
begin
    bw.write(ord(uType));
    bw.Write(ord(State));
    bw.Write(Address);
    bw.Write(SubAddress);

    for i:=1 to 20 do
        bw.Write(fDefs[i]);
end;
我的问题是。write方法是否在没有换行符或回车符的情况下每行写入一行,或在字节后写入一个字节,或在字符后写入一个字符

我问这个问题的原因是,当我在写和读没有特定字符数的字符串(如字符数组)时感到困惑

例如:

method WritetoFile;
var
    x:integer;
    thestr:string;
begin
    BinaryWriter thefile := new BinaryWriter(File.Create("test.dat"));
    thefile.write(thestr);
    thefile.write(x);
    thefile.Close;
end;

method ReadFromFile;
var
   x:integer;
   thestr:string;
begin
   BinaryReader thefile := new BinaryReader(File.OpenRead("test.dat"));
   thestr:=thefile.ReadString;
   x:=thefile.ReadInt32;
   thefile.Close;
end;
我就是这样写我的程序的,它似乎工作得很好,但正如我所说的,我感到困惑


当它是字符串数据类型时,它如何知道要读取或写入多少字节或字符长度,而不给它指定要读取的特定长度数?

不,它不知道。您需要使用StreamWriter,它具有WriteLine和Write方法,可以实现您想要的功能。binaryReader/Writer类使用前缀整数作为长度,然后写入数据。

不,它不这样做。您需要使用StreamWriter,它具有WriteLine和Write方法,可以实现您想要的功能。binaryReader/Writer类使用前缀整数作为长度,然后写入数据

BinaryWriter“Write方法”的工作原理与Delphi中的Writeln方法相同吗

不,没有

当它是字符串数据类型时,它如何知道要读取或写入多少字节或字符长度,而不给它指定要读取的长度

在许多方面,您实际上不需要知道
BinaryWriter
BinaryReader
是如何做到这一点的。你正确地使用了它。只需将每个
Write()
调用与相应类型的匹配
ReadXXX()
调用配对即可

描述了底层的二进制文件格式。您不需要写入或读取字符串的长度,因为二进制I/O类正是代表您这样做的

以长度为前缀的字符串通过在字符串前面加上包含该字符串长度的单个字节或单词来表示字符串长度。此方法首先将字符串的长度写入UTF-7编码的无符号整数,然后使用BinaryWriter实例的当前编码将这么多字符写入流

因此,您可以安全地编写一个包含换行符的字符串,在读取该字符串时,这些换行符将被保留

BinaryWriter“Write方法”的工作原理与Delphi中的Writeln方法相同吗

不,没有

当它是字符串数据类型时,它如何知道要读取或写入多少字节或字符长度,而不给它指定要读取的长度

在许多方面,您实际上不需要知道
BinaryWriter
BinaryReader
是如何做到这一点的。你正确地使用了它。只需将每个
Write()
调用与相应类型的匹配
ReadXXX()
调用配对即可

描述了底层的二进制文件格式。您不需要写入或读取字符串的长度,因为二进制I/O类正是代表您这样做的

以长度为前缀的字符串通过在字符串前面加上包含该字符串长度的单个字节或单词来表示字符串长度。此方法首先将字符串的长度写入UTF-7编码的无符号整数,然后使用BinaryWriter实例的当前编码将这么多字符写入流


因此,您可以安全地编写一个包含换行符的字符串,当它被读取时,这些换行符将被保留。

实际上,在我看来,它更像@digitalanalog想要BinaryWriter做的事情,而不是文本编写器。实际上,在我看来,它更像@digitalanalog想要BinaryWriter做的事情。