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 CameraXプレビューを実装してみた

1 はじめに2 CameraXとは3 Android Jetpackについて4 Cameraパーミッションの追加5 ソースコード全容6 プレビューの実装7 さいごに8 おすすめ書籍 はじめに こんにち ...

Kotlinをはじめよう〜Kotlin基本文法〜

1 はじめに2 事前準備3 基本データ型4 変数5 条件分岐 if式6 条件分岐 when式7 繰り返し制御 while文8 繰り返し制御 for文9 さいごに10 おすすめ書籍 はじめに こんにちは ...

AndroidでWebViewを使用する時に押さえておきたいポイント5選

1 はじめに2 JSのAlert, Confirm, Promptが表示されない!3 読み込み中の進捗を表示する4 UserAgent5 クリアテキスト設定5.1 クリアテキストを無効にする5.2 H ...

GoogleMap Clusterのカスタマイズ

1 はじめに2 クラスタ内のアイテムクラス3 クラスタをレンダリングするクラス4 クラスタの色を設定する5 クラスタ化の最小個数を設定する6 クラスタのクリックイベントを拾う7 さいごに はじめに 最 ...

はじめてのKotlinとAndroid StudioのKotlinプラグイン

1 はじめに2 Kotlinとは?3 Android Studio 2.3でのKotlinプラグイン導入3.1 Kotlinプラグインのインストール3.2 JavaコードをKotlinコードに変換3. ...

フォロー

follow us in feedly

blog-page_side_responsive

2020年1月
 1234
567891011
12131415161718
19202122232425
262728293031  

アプリ情報

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