Open4
バイトストリームとは一体なんなのか?
バイトストリームの概念がよく分からなかったのでメモ
例えばjavaで画像ファイルをブラウザで表示するときにはこんな流れになっている?
- ローカルに画像ファイルがある
- 画像ファイルを読み込み
- 画像ファイルをバイト化(input stream)
- バイト化したデータをレスポンスボディに詰める(output stream)
- ブラウザにレスポンスとして渡す
- ブラウザがバイト化されたデータを読み込み
- 画像ファイルを生成
- 画面に描画
こういう理解でいいんだろうか?
画像ファイルの読み込み方法
-
Resource
インスタンスを生成 - 生成したResourceインスタンスにリソースを格納
-
resourceLoder
のgetResource
メソッドを活用する
-
-
InputStream
インスタンスを生成 - 生成したInputStreamインスタンスにリソースのストリームを格納
- Resourceクラスの
getInputStream
メソッドを活用する
- Resourceクラスの
-
byte[]
インスタンスを生成する - 生成したbyteインスタンスにストリームをバイト配列化して格納する
- IOUtilsクラスの
toDyteArray
メソッドを活用する
- IOUtilsクラスの
参考
-
Resource (Jakarta EE 仕様 API) - Javadoc:クライアントのリクエストに応じて提供されるアーティファクトを示す
- アーティファクトとは?
-
getInputStream()
:リソースのバイトを含むInputeStream
を返す
- InputStream (Java Platform SE 8 ):バイト入力ストリームを表すクラス
-
ResourceLoader (Spring Framework API) - Javadoc
-
getResource()
:渡された引数locationに存在するResourceハンドルを返す - Resourceハンドルとは?
-
-
IOUtils (Apache Commons IO 2.11.0 API):IOストリーム操作を提供するユーティリティクラス
-
toByteAttay()
:渡された引数InputStream
の内容をbyte[]
として取得する。
-
- Byte (Java Platform SE 8 ):1バイトの整数を表す基本型であるbyte型を格納するラッパークラス
また、Files
クラスのreadAllBytes()
を用いる方法もあるようだが、この方法は要領の大きいファイルを扱うときにメモリ不足となりやすいことと、処理の流れを把握しにくいためにあまり推奨されていないように感じた