ダウンロード サンプルファイル (45.4 KB)
Androidアプリケーションは、Java言語を用いて開発できます。Androidアプリケーションの開発にあたっては、米グーグル社が提供するAndroid SDK(Software Development Kit、開発キット)の知識は当然ながら、基本となるのはJava SEです。この連載では、Javaでの開発の基礎となるJava SEを、実際にAndroid上で実行できるソースコードとともに解説します。
はじめに
第6回目の本稿は、ストリームと入出力処理をとりあげます。入出力処理は、プログラムと外部とのデータのやりとりのことで、Javaでは、この入出力処理をストリームという仕組みを介して行います。Java SEでは、このような入出力の処理を、java.ioパッケージのAPIで提供しています。
なおAndroid SDKに含まれる基本APIは、現行のJava SE 6とまったく同じというわけではありません。API Levelが低いと、Java SE 6に含まれるクラスやメソッドの一部が、実装されていない場合があります。
API Levelの微妙な違いは、Android Developersサイトにて確認するようにしてください。
対象読者
Androidアプリケーションの開発を始めたい方で、JavaとEclipseのごく基本的な知識がある方を対象とします。
入出力とストリーム
一般にプログラムは、それ単体のみで処理が完結するものはあまりありません。プログラムの外部から、何らかのデータを受けとり(入力)、それを処理して、結果を外部に書きだす(出力)というパターンがベースになっています。
例えばデータの入力としては、ファイルからの読み込み、ネットワークでの通信データの受信などがあります。出力は反対の処理となり、ファイルへの書き込み、通信データの送信となります。また画面への表示も、出力といえます。
このような入出力処理を、Javaでは、ストリームという仕組みを介して行うのが基本です。ストリームとは、直訳すると「小さな川」という意味ですが、Javaではデータの流れとその通り道を意味し、データの受け渡しを抽象化したものです。あらゆるデータの入出力における基本的な概念です。
ストリームの種類
Javaのストリームには、ファイルやネットワークなどからデータを受け取る入力ストリームと、ファイルやネットワークにデータを送りだす出力ストリームの2種類があります。
またストリームは、流れるデータの種類でも分かれています。バイト単位(バイナリ)でデータを扱うバイトストリームと、文字単位(16ビットのUnicode文字)でデータを扱う文字ストリームの2つに分かれます。例えば通常のテキストなら文字ストリームとなり、画像データなどはバイトストリームを用います。
したがって入出力の違いを合わせると、java.ioパッケージに含まれるストリーム関連クラスは、4つに区分できることになります。それぞれには、基本となる抽象クラスが存在し、ストリーム関連のクラスは、主にその抽象クラスを継承して作られています。
主なストリームクラス
文字ストリームの入出力は、Reader/Writerクラスが行います。一方バイトストリームの入出力は、InputStream/OutputStreamクラスが担います。これら4つのクラスがスーパークラスとなり、ファイルに特化した入出力クラスや、バッファ付きの読み書きをサポートするクラスなど、多くのサブクラスが提供されています。
| 文字ストリーム | バイトストリーム | クラスの概要 | ||
| 入力 | 出力 | 入力 | 出力 | |
| java.io.Reader | java.io.Writer | java.io.InputStream | java.io.OutputStream | 抽象スーパークラス |
| BufferedReader | BufferedWriter | BufferedInputStream | BufferedOutputStream | バッファリングし効率的な処理を行う |
| LineNumberReader | - | LineNumberInputStream | - | 読み込みの間に行番号を管理する |
| CharArrayReader | CharArrayWriter | ByteArrayInputStream | ByteArrayOutputStream | 既存の配列をストリームとして扱う |
| FileReader | FileWriter | FileInputStream | FileOutputStream | ファイルをストリームとして扱う |
| FilterReader | FilterWriter | FilterInputStream | FilterOutputStream | ストリームにフィルタ処理を行う |
| PushbackReader | - | PushbackInputStream | - | データの先読み処理を行う |
| PipedReader | PipedWriter | PipedInputStream | PipedOutputStream | パイプによる操作を行う |
| StringReader | StringWriter | StringBufferInputStream | - | メモリ内のStringをストリームとして扱う |
| - | PrintWriter | - | PrintStream | データを出力する |
| - | - | InputStreamReader | OutputStreamWriter | 文字ストリームとバイトストリームを連携する |
| - | - | ObjectInputStream | ObjectOutputStream | オブジェクトをストリームから読み書きする |
| - | - | DataInputStream | DataOutputStream | 環境に依存しないデータの読み書きを行う |
| - | - | SequenceInputStream | - | 複数の読み込みストリームを集約する |
New I/Oライブラリ
今回解説は割愛していますが、Java 1.4からは、これまで説明してきたストリームによる入出力クラスに加え、より機能を拡張した新しい入出力ライブラリが導入されています。New I/Oと呼ばれるもので、バッファ管理、ノンブロッキングI/O、文字セットや正規表現のサポートなどの機能が提供されています。Android SDKにも含まれています。
この記事は参考になりましたか?
- Android開発のためのJava SE再入門連載記事一覧
-
- Androidにおける日付処理の基本
- ストリームでの入出力処理の基本
- コレクションとAndroid非同期処理の基本
- この記事の著者
-
山田 祥寛(ヤマダ ヨシヒロ)
静岡県榛原町生まれ。一橋大学経済学部卒業後、NECにてシステム企画業務に携わるが、2003年4月に念願かなってフリーライターに転身。Microsoft MVP for Visual Studio and Development Technologies。執筆コミュニティ「WINGSプロジェクト」代表。主な著書に「独習シリーズ(Java・C#・Python・PHP・Ruby・JSP&サーブレットなど)」「速習シリーズ(ASP.NET Core・Vue.js・React・TypeScript・ECMAScript、Laravelなど)」「改訂3版JavaScript本格入門」「これからはじめるLaravel実践入門」「はじめてのAndroidアプリ開発 Kotlin編 」他、著書多数。
※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です
-
WINGSプロジェクト 高江 賢(タカエ ケン)
<WINGSプロジェクトについて>有限会社 WINGSプロジェクトが運営する、テクニカル執筆コミュニティ(代表 山田祥寛)。主にWeb開発分野の書籍/記事執筆、翻訳、講演等を幅広く手がける。 2026年時点での登録メンバは約50名で、現在も執筆メンバを募集中。興味のある方は、どしどし応募頂きたい。著書、記事多数。 RSS X: @WingsPro_info(公式)、@WingsPro_info/wings(メンバーリスト) Facebook
※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です
この記事は参考になりましたか?
この記事をシェア

