Shoeisha Technology Media

CodeZine(コードジン)

特集ページ一覧

ストリームでの入出力処理の基本

Android開発のためのJavaSE再入門(6)

  • LINEで送る
  • このエントリーをはてなブックマークに追加
2011/12/14 14:00

 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にも含まれています。


  • LINEで送る
  • このエントリーをはてなブックマークに追加

著者プロフィール

  • WINGSプロジェクト 高江 賢(タカエ ケン)

    <WINGSプロジェクトについて> 有限会社 WINGSプロジェクトが運営する、テクニカル執筆コミュニティ(代表 山田祥寛)。主にWeb開発分野の書籍/記事執筆、翻訳、講演等を幅広く手がける。2018年11月時点での登録メンバは55名で、現在も執筆メンバを募集中。興味のある方は、どしどし応募頂...

  • 山田 祥寛(ヤマダ ヨシヒロ)

    静岡県榛原町生まれ。一橋大学経済学部卒業後、NECにてシステム企画業務に携わるが、2003年4月に念願かなってフリーライターに転身。Microsoft MVP for ASP/ASP.NET。執筆コミュニティ「WINGSプロジェクト」代表。 主な著書に「入門シリーズ(サーバサイドAjax/XMLD...

バックナンバー

連載:Android開発のためのJava SE再入門
All contents copyright © 2005-2018 Shoeisha Co., Ltd. All rights reserved. ver.1.5