こんばんは!金曜日の夜のぱかぱかです!
本日は免許の更新を理由に有休を取得しておりました😆
免許取得してから無事に5年経ったようで、ついにゴールド免許ゲットです🏅
これからも安全運転を心がけます🚗
免許更新は思いの外一瞬で終わったので、本屋さんに立ち寄り本を2冊購入しました。
1冊目は「良いコード/悪いコードで学ぶ設計入門」です。
とてもタメになるとプロジェクト内で話題になっていたこの本。
良い設計という視点がまだ全く持てておらず指摘を喰らうことも多いので、しっかり読んで今後に役立てたいと思います。
また今度ブログでも内容について取り上げたいですね。
2冊目は「たった2日でマスターできるiPhoneアプリ開発集中講座」というiOSアプリ開発の本です。
たった2日でマスターは流石に大袈裟だろうと思うのですが…
そんな夢のような話があるのでしょうか…😂
最近自主学習ではAndroidの方ばかり進めていたのですが、実務ではiOSも同じくらいの比率で触れる機会があるので流石に一通りさらっておいた方がいいかと思い始めました。
いろいろ手をつけるとどちらも中途半端になりそうで怖いのですが…
でもせっかくXcodeを入れたいがためにMacBookを奮発して購入したわけなので、iOSの方もぼちぼち手をつけていきたいですね!
本屋さんから帰ってきたら、今日はゆっくり腰を据えて勉強時間を取ることができましたよ。
最近平日も休日も忙しくてろくに勉強できていなかったので、良い時間となりました。
本日はJava Goldの復習シリーズで入出力についてまとめていきたいと思います。
自作AndroidアプリでWeb APIの連携を実装していた時に、InputStreamのレスポンスデータを取得する場面があり「お!全然覚えてない!笑」となったので復習していきます。
◆入出力用のパッケージ
入出力用のパッケージはバージョンアップに伴いライブラリが拡充し、現在は以下のようなパッケージが存在します。
・JavaI/O
入出力の基本機能(JavaI/O)を提供
java.ioパッケージに含まれる
・NIO
追加機能(NewI/O)を提供
基本データ方を格納するバッファや高機能な入出力チャネル、正規表現ライブラリなど
java.nioパッケージに含まれる
・NIO.2
ファイル自体の操作を充実させるための追加機能(NIO.2)を提供
java.nio.file.Pathインターフェース、java.nio.file.Filesクラスなど
◆Fileクラス
ディスクに保存されているファイルやディレクトリをオブジェクトとして表現できます。
UNIXやLinuxでパス名の表現が異なるため、Javaでは抽象パス名を導入しています。
これによりシステムに依存せずにパス名を表現できます。
パス名を入力するコンストラクタ
コンストラクタ名 |
説明 |
File(String pathname) |
指定されたパス名文字列を抽象パス名に変換 Fileオブジェクトを生成 |
File(String parent, String child) |
親パス名文字列および子パス名文字列から Fileオブジェクトを生成 |
File(File parent, String child) |
親抽象パス名及び子パス文字列から |
◆ストリーム
ファイルへのデータ書き出し・読み込みなどデータ送受信を連続的に行うものをストリーム(データの流れ)といいます。
ストリームの抽象クラス
大きく分けると4種類あります。
|
バイトストリーム (byte単位) |
キャラクタストリーム (char単位) |
出力ストリーム (データ書き出し) |
OutputStream |
Writer |
入力ストリーム (データ読み込み) |
InputStream |
Reader |
主なバイトストリーム
クラス名 |
説明 |
FileInuputStream |
ファイルからbyte単位の読み込みを行うストリーム |
FileOutputStream |
ファイルからbyte単位の書き出しを行うストリーム |
DataInputStream |
基本データ型のデータを読み込めるストリーム |
DataOutputStream |
基本データ型のデータを書き出せるストリーム |
主なキャラクタストリーム
クラス名 |
説明 |
FileReader |
ファイルからchar単位の読み込みを行うストリーム |
FileWriter |
ファイルからchar単位の書き出しを行うストリーム |
BufferedReader |
char単位で文字・配列・行をバッファリングしながら 読み込むストリーム |
BufferedWriter |
char単位で文字・配列・行をバッファリングしながら 書き出すストリーム |
◆FileInputStreamとFileOutputStream
byte単位でファイルの入出力を行うストリームを生成します。
コンストラクタは引数にFileオブジェクトをとるものとファイル名をとるものがあります。
FileInputStream(File file)
FileInputStream(String name)
・read()
入力ストリームからバイトデータを読み込む
ファイルの終わりに達すると-1を返す
・close()
ストリームを閉じる
FileOutputStream(File file)
FileOutputStream(String name)
・write(int b)
引数で指定されたバイトデータをファイル出力ストリームに書き出す
・write(byte[] b)
引数で指定されたバイト配列をファイル出力ストリームに書き出す
・close()
ストリームを閉じる
◆DataInputStreamとDataOutputStream
基本データ型(int, float)、String型のデータを読み書きできるストリームです。
単体では使用できず、他のストリームと連結して使用する必要があります。
DataInputStream(InputStream in)
・readInt()
4バイトの入力データを読み込む
・readUTF()
DataOutputStream(OutputStream out)
・writeByte(int v)
byte値を1バイト値として出力ストリームに書き出す
・writeInt(int v)
Int値を4バイト値として出力ストリームに書き出す
・writeUTF(String str)
引数で指定されたデータをUTF-8形式で出力ストリームに書き出す
・close()
ストリームを閉じる
◆FileReaderとFileWriter
char単位で読み書きを行い、文字コードは自動的に変換されます。
JavaプログラムからOSの文字コードを意識せず入出力できます。
FileReader(File file)
FileReader(String fileName)
・read()
入力ストリームから単一文字を読み込む
ファイルの終わりに達すると-1を返す
FileWriter(File file)
FileWriter(String fileName)
・write(String str)
引数で指定された文字列を書き出す
・flush()
目的の送信先にただちに文字を書き出す
◆BufferedReaderとBufferedWriter
文字列をブロック単位で読み書きするためのストリームを生成
まとめて読み書きすることで入出力を効率よく行える
BufferedReader(Reader in)
BufferedReader(Reader in, int sz)
引数で指定された入力ストリームからデータを読み込むためのオブジェクト作成
第2引数で指定されたバッファサイズでバッファリングする
・read()
入力ストリームから単一文字を読み込む
ファイルの終わりに達すると-1を返す
・readLine()
1行のテキストを読み込む
1行の終わりは改行(¥n)か復帰(¥r)で認識
終わりに達するとnullを返す
・mark(int readAheadLimit)
ストリームの現在位置にマークを設定する
引数にはマークを保持しながら読み込むことができる文字数上限を指定
・reset()
ストリームをmark()によりマークされた位置にリセット
・skip(long n)
引数で指定された文字数をスキップする
BufferedWriter(Writer out)
BufferedWriter(Writer out, int sz)
引数で指定された入力ストリームからデータを書き出すためのオブジェクト作成
第2引数で指定されたバッファサイズでバッファリングする
・write(String str)
引数で指定された文字数をスキップする
・newLine()
改行文字を書き出す
・flush()
目的の書き出し先にただちに文字を書き出す
まだシリアライズやファイル操作についてもありますが、ちょっと長くなりそうなので今日はこれくらいにします。
また気が向いたら入出力第2弾をまとめたいと思います。
最後まで読んでくださりありがとうございました。