C# では、BinaryReader はバイナリ データを処理するために使用されるクラスです。これは System.IO 名前空間の下にあります。 BinaryReader は、特定のエンコード ストリームでプリミティブ データ型をバイナリ値として読み取るために使用されます。 BinaryReader は Stream オブジェクトと連携します。つまり、BinaryReader のオブジェクトを作成するには、そのコンストラクターで Stream オブジェクトを渡す必要があります。 BinaryReader クラスには、バイナリ データを処理するための 3 つのオーバーロードされたコンストラクターがあります。デフォルトでは、BinaryReader は、オブジェクトの作成時に他の文字エンコーディングを指定するまで、UTF-8 エンコーディングを使用してデータを読み取ります。
以下に示すように、3 つの方法で BinaryReader のオブジェクトを作成できます。
BinaryReader binary_reader = new BinaryReader(inputStream);
上記のステートメントは、UTF-8 エンコーディングを使用して、指定されたストリーム (inputStream) に基づいて BinaryReader の新しいインスタンスを初期化します。
BinaryReader binary_reader = new BinaryReader(inputStream, encoding);
このステートメントは、指定されたストリーム (inputStream) と、encoding で指定されたエンコードに基づいて、BinaryReader の新しいインスタンスを初期化します。
BinaryReader binary_reader = new BinaryReader(inputStream, encoding, true);
このステートメントは、BinaryReader のオブジェクトが破棄された後、ユーザーがストリームを開いたままにするかどうかを指定するために使用される Boolean 型の追加パラメーターを使用して、上記の 2 つのステートメントと同じように機能します。ストリームを開いたままにするには、このパラメータを「true」にする必要があります。そうでない場合は、「false」にする必要があります。
これら 3 つの方法とは別に、次のステートメントを使用して BinaryReader を作成することもできます。
using(BinaryReader binary_reader = new BinaryReader(File.Open(file_path, FileMode.Open))) { //user code }
上記のステートメントでは、File.Open() メソッドは FileStream のオブジェクトを返すため、BinaryReader のオブジェクトの作成に役立ちます。
「using」ブロック内にオブジェクトを作成する利点は、オブジェクトの作業が完了して不要になったときに、オブジェクトが保持しているメモリを解放できることです。
BinaryReader は、バイナリ情報を読み取るために使用されます。つまり、バイナリ ファイルに保存されているデータを読み取るために使用されます。バイナリ ファイルには、機械が容易に理解できる方法でデータが保存されますが、人間にとってそのようなデータを理解するのは非常に困難です。このようなデータを理解するために BinaryReader が使用されます。 BinaryReader を使用するには、まずコードに System.IO 名前空間をインポートする必要があります。この後、「new」演算子を使用し、BinaryReader のコンストラクター内の Stream オブジェクトをバイパスして、BinaryReader のインスタンスを作成する必要があります。
BinaryReader のインスタンスを作成するときに、読み取りストリームを提供します。その後、エンコーディングを指定しない場合は、オプションで使用する文字エンコーディングを指定できます。デフォルトでは UTF-8 エンコーディングが使用されます。これに加えて、以下のステートメントに示すように、BinaryReader のオブジェクトが破棄された後にストリームを開くかどうかをオプションで指定できます。
BinaryReader binary_reader = new BinaryReader(inputStream, encoding, true);
次に、さまざまなデータ型に提供される BinaryReader のさまざまな Read() メソッドを利用して、ファイルからデータを読み取ることができます。
BinaryReader には、さまざまなデータ型をサポートする多くの Read() メソッドがあり、ストリームからプリミティブ データ型を読み取るために使用されます。 BinaryReader の ReadString() メソッドなどを使用して、次のバイトを文字列値として読み取り、ストリーム内の現在位置を 1 バイト進めます。
次の表のさまざまなタイプのデータに対する BinaryReader の Read() メソッド:
Method | Description |
Read() | It is used to read characters from an underlying stream and it also advances the current position of the stream according to the Encoding used and the specific character being read from the stream. |
ReadBoolean() | It is used to read the Boolean value from the stream and it also advances the current position of the stream by one byte. |
ReadByte() | It is used to read the next byte from the current stream and it also advances the current position of the stream by one byte. |
ReadChar() | It is used to read the next character from the current stream and it also advances the current position of the stream according to the Encoding used and the specific character being read from the stream. |
ReadDecimal() | It is used to read the decimal value from the current stream and it also advances the current position of the stream by sixteen bytes. |
ReadDouble() | It is used to read an 8-byte floating-point value from the current stream and advances the current position of the stream by eight bytes. |
ReadInt32() | It is used to read a 4-byte signed integer from the current stream and also it advances the current position of the stream by four bytes. |
ReadString() | It is used to read a string from the current stream. |
Example of creating a file using BinaryWriter and reading it using BInaryReader.
Code:
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.IO; namespace ConsoleApp4 { public class Program { string filePath = "E:\\Content\\binaryFile.dat"; public void WriteFile() { try { //checking if the file already exists if (File.Exists(filePath)) { File.Delete(filePath); } FileStream stream = new FileStream(filePath, FileMode.OpenOrCreate, FileAccess.Write, FileShare.ReadWrite); //creating binary file using BinaryWriter using (BinaryWriter writer = new BinaryWriter(stream)) { writer.Write("This is string"); writer.Write(100.53); writer.Write(true); } } catch(Exception ex) { Console.WriteLine(ex.Message); } } public void ReadFile() { try { //creating an object of Stream FileStream stream = new FileStream(filePath, FileMode.Open, FileAccess.Read, FileShare.ReadWrite); //creating BinaryReader using Stream object using (BinaryReader reader = new BinaryReader(stream)) { //reading data using Read() methods of different data types Console.WriteLine("String Value : " + reader.ReadString()); Console.WriteLine("Double Value : " + reader.ReadDouble()); Console.WriteLine("Boolean Value : " + reader.ReadBoolean()); } } catch(Exception ex) { Console.WriteLine(ex.Message); } } } public class BinaryReaderDemo { static void Main(string[] args) { Program obj = new Program(); obj.WriteFile(); obj.ReadFile(); Console.ReadKey(); } } }
Output:
BinaryReader is used to read primitive data types as binary values in a specific encoding stream. If not defined explicitly, by default BinaryReader uses UTF-8 encoding to read data. Stream object needs to be passed inside the constructor of BinaryReader in order to create its instance.
以上がC# バイナリリーダーの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。