SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

Android開発のためのJava SE再入門

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

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


  • X ポスト
  • このエントリーをはてなブックマークに追加

 Androidアプリケーションは、Java言語を用いて開発できます。Androidアプリケーションの開発にあたっては、米グーグル社が提供するAndroid SDK(Software Development Kit、開発キット)の知識は当然ながら、基本となるのはJava SEです。この連載では、Javaでの開発の基礎となるJava SEを、実際にAndroid上で実行できるソースコードとともに解説します。

  • X ポスト
  • このエントリーをはてなブックマークに追加

はじめに

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

会員登録無料すると、続きをお読みいただけます

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

次のページ
ファイル入出力の基本

この記事は参考になりましたか?

  • X ポスト
  • このエントリーをはてなブックマークに追加
Android開発のためのJava SE再入門連載記事一覧

もっと読む

この記事の著者

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

静岡県榛原町生まれ。一橋大学経済学部卒業後、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本格入門」「これからはじめるReact実践入門」「はじめてのAndroidアプリ開発 Kotlin編 」他、著書多数

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

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

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

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/6299 2011/12/26 17:18

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング