Android

【Java】ストリームについてまとめてみました

投稿日:

はじめに

Javaではすべての入出力をストリームと呼ばれる仕組みをつかって実装します。データを細い流れに見立て順番に吸い上げたり、送り出したりすることからそのように呼ばれています。ストリームを利用することで、入出力の媒体に依存することなく同じ要領で操作することができます。

Streamの分類

ストリームは、特定の媒体からデータを読み込むための入力ストリーム(InputStream)と、データを順番に媒体に書き出すための出力ストリーム(OutputStream)に分類できます。java.io パッケージでは、これらの抽象基底クラスをもとにファイルやバッファ、配列などを操作する様々な実装クラスを提供しています。

テキストファイルの読み書き

ストリーム実装クラスのFileReader/FileWriterクラスを使ってテキストファイルの読み書きをプログラム上で行ってみましょう。
FileReader/FileWriterクラスはテキストファイルを読み書きするための入出力ストリームを提供します。

文字列を読み込むのはreadメソッドの役割です。readメソッドはファイルから次の1文字を読み込み、その文字をint型で表したものを返すメソッドです。ストリームの終わりに達した場合は -1 を返します。この性質を利用してreadメソッドが -1 をかえすまでwhileループを回し、ファイルの内容を読み込みます。読み込んだ内容は、FileWriterクラスのwriteメソッドでファイルに転記します。
ストリームによる処理は必ずtryブロックでくくり、クローズ処理はfinallyブロックで表すのが基本です。正しくクローズされなかったリソースはメモリを圧迫する原因となるので必ずクローズを行いましょう。

バイナリファイルの読み書き

FileInputStream/FileOutputStreamクラスを利用して、画像などのバイナリファイルを読み書きするための入出力ストリームを使用できます。

上記はinput.gifの内容をFileInputStreamで読み込み、その結果をFileOutputStreamでoutput.gifに出力するサンプルです。
コンストラクター、read/write メソッドの構文はFileReader/FileWriterクラスと同様です。

読み書きのバッファリング処理

ファイルやネットワークに対する読み書きは、メモリに対するものと比べると、速度が格段に遅くなりがちです。そうした速度の遅くなる媒体に対して、1文字、1バイト単位でのアクセスは効率が良くありません。バッファリング処理を使うことでこの問題を解決しましょう。バッファーとは、文字列などのデータを一時的に保存するためのメモリ上の領域のことをいいます。バッファリングを利用すると、データをバッファー領域に蓄積し、いっぱいになったところでまとめてファイルを出力したり、読み込んだりします。

バッファリング処理を行うには、BufferedReader/BufferedWriterコンストラクターでInputStreamReader/OutputStreamWriterを受け取るだけです。
flushメソッドで、バッファ内容を出力ストリームに出力します。バッファリング処理を利用している時は、writeメソッドの呼び出しによって即座に出力が開始されるかどうかはわかりません。
ネットワーク通信などで、出力のタイミングを厳密に制御する必要がある場合は、flushメソッドを明示的に呼び出す必要があります。

さいごに

今回は、Javaのストリームについてまとめてみました。通信を伴った実装を行う時には必須のクラスであるので、基本的な部分をまとめることにしました。

おすすめ書籍

AndroidエンジニアのためのモダンJava スッキリわかるJava入門 第3版 (スッキリシリーズ) スッキリわかる Java入門 実践編 第2版 (スッキリシリーズ)

blog-page_footer_336




blog-page_footer_336




-Android
-,

執筆者:


comment

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA


関連記事

[Android] リソースフォルダの修飾子

1 はじめに2 画面の向き3 画面サイズ4 テキスト入力方法5 複数修飾子の組み合わせ6 その他7 さいごに はじめに Androidアプリではリソースフォルダ名に修飾子をつけることによって、様々な環 ...

【Androidマテリアル】Ripple Effect

1 はじめに2 Ripple Effectとは3 設定方法4 カスタマイズ5 さいごに はじめに こんにちは、ソニーから新Aiboが発表されましたね。個人的には欲しいと思っているのですが、最近Goog ...

【Kotlin】RecyclerViewAdapterを使ってリスト表示

1 はじめに2 GradleファイルにRecyclerViewの設定を追加する3 レイアウトファイルの作成4 Adapterクラスの追加5 Activityファイルへの追加6 さいごに7 おすすめ書籍 ...

Kotlinで初期化を遅延する

1 はじめに2 初期化の遅延とは3 by lazy4 lateinit5 Delegates.notNull6 さいごに7 おすすめ書籍 はじめに こんにちは、前回に引き続き、Kotlinの基本的な文 ...

[Android] パーミッション管理を簡単・簡潔に書けそうなPermissionsDispatcher

1 はじめに2 環境3 導入4 Activityでの実装例5 @RuntimePermissions(必須)6 PermissionsDispatcherに処理を移譲する7 @NeedsPermiss ...

フォロー

blog-page_side_responsive

2020年1月
 1234
567891011
12131415161718
19202122232425
262728293031  

アプリ情報

私たちは無料アプリもリリースしています、ぜひご覧ください。 下記のアイコンから無料でダウンロードできます。