
FileStream은 파일에 대한 바이트 단위 입출력을 제공하는 스트림(연속된 데이터 흐름) 객체를 가리킵니다. 일반적으로 운영체제의 파일을 열어 읽기, 쓰기, 탐색(seek), 닫기 등을 가능하게 하는 저수준 파일 I/O 추상화입니다. 주요 특징 - 바이트 지향: 텍스트가 아니라 바이트 단위로 읽고 쓰므로 바이너리 파일이나 인코딩을 직접 제어해야 하는 텍스트 처리에 적합합니다. - 읽기/쓰기/읽기·쓰기 병행(혹은 단방향) 지원: 파일을 열 때 접근 권한을 지정합니다. - 임의 접근(랜덤 액세스): 파일 내의 위치를 이동(seek)해서 부분적으로 읽거나 쓸 수 있습니다. - 동기/비동기 API: 일부 구현은 비동기 입출력(ReadAsync/WriteAsync 등)을 지원합니다. - 버퍼링: 성능을 위해 내부 버퍼를 쓰거나 BufferedStream 같은 레이어를 씁니다. - 파일 열기 모드: 생성(Create), 덮어쓰기(Create/Truncate), 덧붙이기(Append), 존재 시 열기(Open) 등 모드를 지정합니다. - 파일 공유 옵션: 다른 프로세스의 파일 접근(읽기/쓰기/잠금)을 제어할 수 있습니다. 언어/플랫폼별 예시(개념) - .NET: System.IO.FileStream 클래스. 생성자에 경로, FileMode, FileAccess, FileShare 등을 지정하고 Read/Write/Seek/Flush/Close(또는 Dispose) 사용. 보통 using 블록이나 using문으로 자동 해제. - Java: FileInputStream/FileOutputStream(바이트 스트림), RandomAccessFile(임의 접근). - Python: open()이 반환하는 파일 객체(바이너리 모드 'rb'/'wb')가 유사한 역할을 함; with 블록으로 자동 닫기. 간단한 사용 팁 - 리소스 관리는 반드시: 사용 후 닫거나(Dispose/close) 컨텍스트 매니저(using/with) 사용. - 텍스트를 다룰 땐 인코딩을 고려하고 StreamReader/StreamWriter(또는 언어별 텍스트 래퍼)를 함께 사용. - 큰 파일이나 많은 I/O에서는 버퍼 크기를 조정하거나 비동기 I/O, 메모리 매핑을 고려. - 여러 프로세스가 동시에 파일을 열 경우 파일 공유/잠금 정책을 명확히 설정. - 예외 처리: 파일 없음, 권한 부족, 경로 오류, I/O 오류 등을 처리. 요약 FileStream은 파일을 바이트 단위로 읽고 쓰며 위치 이동이 가능한 스트림 인터페이스로, 파일 모드·접근권한·공유 정책 등을 지정해 안전하고 효율적으로 파일 입출력을 수행하게 해 줍니다.