System.IO.BinaryReader 类

方法描述

用特定的编码将基元数据类型读作二进制值。

语法定义(C# System.IO.BinaryReader 类 的用法)

[ComVisibleAttribute(true)]
public class BinaryReader : IDisposable

构造函数

构造函数名称 构造函数描述
BinaryReader(Stream) 基于所提供的流,用 UTF8Encoding 初始化 BinaryReader 类的新实例。
BinaryReader(Stream, Encoding) 基于所提供的流和特定的字符编码,初始化 BinaryReader 类的新实例。

成员/方法

方法名称 方法描述
Close 关闭当前阅读器及基础流。
Dispose() 释放由 BinaryReader 类的当前实例占用的所有资源。
Dispose(Boolean) 释放由 BinaryReader 类占用的非托管资源,还可以另外再释放托管资源。
Equals(Object) 确定指定的 Object 是否等于当前的 Object。 (继承自 Object。)
FillBuffer 用从流中读取的指定字节数填充内部缓冲区。
Finalize 允许对象在“垃圾回收”回收之前尝试释放资源并执行其他清理操作。 (继承自 Object。)
GetHashCode 用作特定类型的哈希函数。 (继承自 Object。)
GetType 获取当前实例的 Type。 (继承自 Object。)
MemberwiseClone 创建当前 Object 的浅表副本。 (继承自 Object。)
PeekChar 返回下一个可用的字符,并且不提升字节或字符的位置。
Read() 从基础流中读取字符,并根据所使用的 Encoding 和从流中读取的特定字符,提升流的当前位置。
Read(Byte[], Int32, Int32) 从字节数组中的指定点开始,从流中读取指定的字节数。
Read(Char[], Int32, Int32) 从字符数组中的指定点开始,从流中读取指定的字符数。
Read7BitEncodedInt 以压缩格式读入 32 位整数。
ReadBoolean 从当前流中读取 Boolean 值,并使该流的当前位置提升 1 个字节。
ReadByte 从当前流中读取下一个字节,并使流的当前位置提升 1 个字节。
ReadBytes 从当前流中读取指定的字节数以写入字节数组中,并将当前位置前移相应的字节数。
ReadChar 从当前流中读取下一个字符,并根据所使用的 Encoding 和从流中读取的特定字符,提升流的当前位置。
ReadChars 从当前流中读取指定的字符数,并以字符数组的形式返回数据,然后根据所使用的 Encoding 和从流中读取的特定字符,将当前位置前移。
ReadDecimal 从当前流中读取十进制数值,并将该流的当前位置提升十六个字节。
ReadDouble 从当前流中读取 8 字节浮点值,并使流的当前位置提升 8 个字节。
ReadInt16 从当前流中读取 2 字节带符号整数,并使流的当前位置提升 2 个字节。
ReadInt32 从当前流中读取 4 字节带符号整数,并使流的当前位置提升 4 个字节。
ReadInt64 从当前流中读取 8 字节带符号整数,并使流的当前位置向前移动 8 个字节。
ReadSByte 从此流中读取一个有符号字节,并使流的当前位置提升 1 个字节。
ReadSingle 从当前流中读取 4 字节浮点值,并使流的当前位置提升 4 个字节。
ReadString 从当前流中读取一个字符串。 字符串有长度前缀,一次 7 位地被编码为整数。
ReadUInt16 使用 Little-Endian 编码从当前流中读取 2 字节无符号整数,并将流的位置提升 2 个字节。
ReadUInt32 从当前流中读取 4 字节无符号整数并使流的当前位置提升 4 个字节。
ReadUInt64 从当前流中读取 8 字节无符号整数并使流的当前位置提升 8 个字节。
ToString 返回表示当前对象的字符串。 (继承自 Object。)

提示和注释

有关通用 I/O 任务的列表,请参见通用 I/O 任务。

System.IO.BinaryReader 类例子

下面的代码示例阐释了如何在文件中存储应用程序设置以及如何检索这些设置。

using System;
using System.IO;
using System.Security.Permissions;

// Store and retrieve application settings.
class AppSettings
{
    const string fileName = "AppSettings#@@#.dat";
    float  aspectRatio;
    string lookupDir;
    int    autoSaveTime;
    bool   showStatusBar;

    public AppSettings()
    {
        // Create default application settings.
        aspectRatio   = 1.3333F;
        lookupDir     = @"C:\AppDirectory";
        autoSaveTime  = 30;
        showStatusBar = false;

        if(File.Exists(fileName))
        {
            BinaryReader binReader =
                new BinaryReader(File.Open(fileName, FileMode.Open));
            try
            {
                // If the file is not empty,
                // read the application settings.
                // First read 4 bytes into a buffer to
                // determine if the file is empty.
                byte[] testArray = new byte[3];
                int count = binReader.Read(testArray, 0, 3);

                if (count != 0)
                {
                    // Reset the position in the stream to zero.
                    binReader.BaseStream.Seek(0, SeekOrigin.Begin);

                    aspectRatio   = binReader.ReadSingle();
                    lookupDir     = binReader.ReadString();
                    autoSaveTime  = binReader.ReadInt32();
                    showStatusBar = binReader.ReadBoolean();
                }
            }

            // If the end of the stream is reached before reading
            // the four data values, ignore the error and use the
            // default settings for the remaining values.
            catch(EndOfStreamException e)
            {
                Console.WriteLine("{0} caught and ignored. " +
                    "Using default values.", e.GetType().Name);
            }
            finally
            {
                binReader.Close();
            }
        }

    }

    // Create a file and store the application settings.
    public void Close()
    {
        using(BinaryWriter binWriter =
            new BinaryWriter(File.Open(fileName, FileMode.Create)))
        {
            binWriter.Write(aspectRatio);
            binWriter.Write(lookupDir);
            binWriter.Write(autoSaveTime);
            binWriter.Write(showStatusBar);
        }
    }

    public float AspectRatio
    {
        get{ return aspectRatio; }
        set{ aspectRatio = value; }
    }

    public string LookupDir
    {
        get{ return lookupDir; }
        set{ lookupDir = value; }
    }

    public int AutoSaveTime
    {
        get{ return autoSaveTime; }
        set{ autoSaveTime = value; }
    }

    public bool ShowStatusBar
    {
        get{ return showStatusBar; }
        set{ showStatusBar = value; }
    }
}

class Test
{
    static void Main()
    {
        // Load application settings.
        AppSettings appSettings = new AppSettings();
        Console.WriteLine("App settings:\nAspect Ratio: {0}, " +
            "Lookup directory: {1},\nAuto save time: {2} minutes, " +
            "Show status bar: {3}\n",
            new Object[4]{appSettings.AspectRatio.ToString(),
            appSettings.LookupDir, appSettings.AutoSaveTime.ToString(),
            appSettings.ShowStatusBar.ToString()});

        // Change the settings.
        appSettings.AspectRatio   = 1.250F;
        appSettings.LookupDir     = @"C:\Temp";
        appSettings.AutoSaveTime  = 10;
        appSettings.ShowStatusBar = true;

        // Save the new settings.
        appSettings.Close();
    }
}

继承层次结构

System.Object

System.IO.BinaryReader

命名空间

namespace: System.IO

程序集: mscorlib(在 mscorlib.dll 中)

线程安全

此类型的任何公共 static(在 Visual Basic 中为 Shared) 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

版本信息

.NET Framework 受以下版本支持:4、3.5、3.0、2.0、1.1、1.0 .NET Framework Client Profile 受以下版本支持:4、3.5 SP1 受以下版本支持:

适用平台

Windows 7, Windows Vista SP1 或更高版本, Windows XP SP3, Windows XP SP2 x64 Edition, Windows Server 2008(不支持服务器核心), Windows Server 2008 R2(支持 SP1 或更高版本的服务器核心), Windows Server 2003 SP2 .NET Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表,请参见.NET Framework 系统要求。