C#에서 스트림(stream)에 바이너리 데이터를 기록해야 한다면 BinaryWriter 클래스를 사용하면 됩니다. 이 클래스는 System.IO 네임스페이스에 포함되어 있으며, 숫자·문자열 등 다양한 형식의 데이터를 바이너리 형태로 파일이나 스트림에 손쉽게 기록할 수 있게 도와줍니다.
BinaryWriter와 BinaryReader 기본 구현
아래는 BinaryWriter로 데이터를 기록하고, BinaryReader로 다시 읽어오는 전체 예제입니다.
static void WriteMe() {
using (BinaryWriter w = new BinaryWriter(File.Open("C:\\abc.txt", FileMode.Create))) {
w.Write(37.8);
w.Write("test");
}
}
static void ReadMe() {
using (BinaryReader r = new BinaryReader(File.Open("C:\\abc.txt", FileMode.Open))) {
Console.WriteLine("Value : " + r.ReadDouble());
Console.WriteLine("Value : " + r.ReadString());
}
}BinaryWriter로 파일에 내용 쓰기
WriteMe() 메서드에서는 File.Open()을 호출할 때 FileMode.Create 옵션을 사용해 파일을 생성하고 엽니다. 그다음 Write() 메서드를 통해 double 값(37.8)과 문자열("test")을 순서대로 기록합니다.
using 블록을 사용했기 때문에 쓰기 작업이 끝나면 파일 핸들과 같은 리소스가 자동으로 해제되므로, 별도의 Close() 호출 없이 안전하게 마무리할 수 있습니다.
static void WriteMe() {
using (BinaryWriter w = new BinaryWriter(File.Open("C:\\abc.txt", FileMode.Create))) {
w.Write(37.8);
w.Write("test");
}
}BinaryReader로 기록된 값 읽기
ReadMe() 메서드는 동일한 파일을 FileMode.Open으로 열어 기록된 값을 읽어옵니다. 이때 ReadDouble()과 ReadString()을 사용하며, 반드시 데이터를 기록한 순서 그대로 읽어야 올바른 결과를 얻을 수 있습니다.
핵심 메서드 정리
- Write(double) : 8바이트 부동 소수점 값을 기록합니다.
- Write(string) : 길이 정보가 함께 저장된 문자열을 기록합니다.
- ReadDouble() / ReadString() : 각각 double 값과 문자열을 읽어 반환합니다.
이처럼 BinaryWriter와 BinaryReader를 함께 사용하면 텍스트 변환 과정 없이 원시 바이너리 형태로 데이터를 빠르게 저장하고 복원할 수 있어, 성능이 중요한 파일 입출력에 유용합니다.