C#-读取一个双值

本文关键字:一个 读取 C#- | 更新日期: 2023-09-27 17:59:52

  1. 假设只有一个双值以二进制格式写入文件。如何使用C#或Java读取该值?

  2. 如果我必须从一个巨大的二进制文件中找到一个双值,我应该使用什么技术来找到它?

C#-读取一个双值

Double是8个字节。要从二进制文件中读取单倍,可以使用BitConverter类:

var fileContent = File.ReadAllBytes("C:''1.bin");
double value = BitConverter.ToDouble(fileContent, 0);

如果需要从文件中间读取双倍数据,请将0替换为字节偏移量。

如果您不知道偏移量,就不可能判断字节数组中的某个值是双精度、整数或字符串。

另一种方法是:

using (var fileStream = File.OpenRead("C:''1.bin"))
using (var binaryReader = new BinaryReader(fileStream))
{
    // fileStream.Seek(0, SeekOrigin.Begin); // uncomment this line and set offset if the double is in the middle of the file
    var value = binaryReader.ReadDouble();
}

第二种方法更适合大文件,因为它不会将整个文件内容加载到内存中。

您可以使用BinaryReader类。

double value;
using( Stream stream = File.OpenRead(fileName) )
using( BinaryReader reader = new BinaryReader(stream) )
{
    value = reader.ReadDouble();
}

对于第二个点,如果知道偏移,只需使用Stream.Seek方法。

我们似乎需要知道双值是如何在文件中编码的,然后才能找到它。

1)

        double theDouble;
        using (Stream sr = new FileStream(@"C:'delme.dat", FileMode.Open, FileAccess.Read))
        {
            byte[] buffer = new byte[8];
            sr.Read(buffer, 0, 8);
            theDouble = BitConverter.ToDouble(buffer, 0);
        }

2) 你不能。

以下是如何读取(和写入以进行测试)双精度:

    // Write Double
    FileStream FS = new FileStream(@"C:'Test.bin", FileMode.Create);
    BinaryWriter BW = new BinaryWriter(FS);
    double Data = 123.456;
    BW.Write(Data);
    BW.Close();
    // Read Double
    FS = new FileStream(@"C:'Test.bin", FileMode.Open);
    BinaryReader BR = new BinaryReader(FS);
    Data = BR.ReadDouble();
    BR.Close();

从大文件中提取数据取决于数据在文件中的布局方式。

using (FileStream filestream = new FileStream(filename, FileMode.Open))
using (BinaryReader reader = new BinaryReader(filestream))
{
    float x = reader.ReadSingle();
}
相关文章: