目次
Stream・byte[]・File.ReadAllBytes・MemoryStreamとは
C#でファイルや画像、PDF、Excelファイルなどを扱う際によく登場するのが、Stream、byte[]、File.ReadAllBytes、MemoryStreamです。
これらを理解すると、ファイルアップロード、画像処理、PDF保存、電子署名などの処理が理解しやすくなります。
Streamとは
Stream(ストリーム)は、データの流れを表すクラスです。
イメージとしては、水道管のようなものです。
ファイル
↓
Stream
↓
プログラム
ファイルやネットワークからデータを読み込んだり、書き込んだりする際に利用します。
Streamを利用する例
using FileStream stream =
new FileStream(
"sample.txt",
FileMode.Open);
この時点では、ファイルそのものではなく、ファイルへの通路(Stream)を取得しています。
byte[]とは
byte[]はバイト配列です。
コンピュータが扱うデータは最終的にすべてバイト列になります。
例えば、
PDF
画像
Excel
ICカードデータ
動画
音声
これらはすべて内部ではbyte[]として扱えます。
byte[]の例
byte[] data =
{
65,
66,
67
};
ASCIIコードとして解釈すると、
ABC
になります。
File.ReadAllBytesとは
File.ReadAllBytesは、ファイルを丸ごとbyte[]として読み込むメソッドです。
サンプル
byte[] pdfData =
File.ReadAllBytes("sample.pdf");
実行後
sample.pdf
↓
byte[]
へ変換されます。
イメージ
PDFファイル
↓
File.ReadAllBytes
↓
byte[]
電子帳簿保存法システムやWebAPIでは頻繁に利用されます。
MemoryStreamとは
MemoryStreamはメモリ上に存在するStreamです。
通常のStreamはファイルを対象にします。
sample.pdf
↓
FileStream
MemoryStreamはファイルを使いません。
byte[]
↓
MemoryStream
メモリ上だけでデータを扱います。
MemoryStreamの利用例
byte[] data =
File.ReadAllBytes("sample.pdf");
using MemoryStream ms =
new MemoryStream(data);
この時、
sample.pdf
↓
byte[]
↓
MemoryStream
という流れになります。
MemoryStreamが活躍する場面
WebAPI
アップロードされたファイルを処理
using MemoryStream ms =
new MemoryStream(fileBytes);
PDF生成
生成したPDFを一時保存
MemoryStream pdfStream =
new MemoryStream();
電子署名
署名対象データをメモリ上で処理
byte[]
↓
MemoryStream
↓
署名処理
Stream・byte[]・MemoryStreamの関係
最も重要なのはこの関係です。
sample.pdf
↓
File.ReadAllBytes
↓
byte[]
↓
MemoryStream
↓
署名処理
↓
DB保存
↓
復元
↓
PDF出力
実際の業務システムでは、この流れで処理することがよくあります。
電子帳簿保存法システムの例
PDFファイル
↓
byte[]
↓
電子署名
↓
DB保存
↓
DB取得
↓
byte[]
↓
PDF復元
このような処理では、
- File.ReadAllBytes
- byte[]
- MemoryStream
- Stream
が頻繁に利用されます。
まとめ
| 項目 | 役割 |
|---|---|
| Stream | データの通路 |
| FileStream | ファイル用のStream |
| MemoryStream | メモリ上のStream |
| byte[] | バイナリデータ |
| File.ReadAllBytes | ファイルをbyte[]へ変換 |
ファイル処理、画像処理、PDF処理、電子署名、WebAPI開発では、これらの知識は必須です。特に電子帳簿保存法やFinTech関連システムでは、byte[]とMemoryStreamの理解が重要になります。