駆け出しエンジニアぱかぱかの成長記録

引くほど忘れっぽい新卒2年目駆け出しSEぱかぱかの備忘録です。

【Java Gold】入出力について復習①

こんばんは!金曜日の夜のぱかぱかです!

本日は免許の更新を理由に有休を取得しておりました😆

免許取得してから無事に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クラス 

ディスクに保存されているファイルやディレクトリをオブジェクトとして表現できます。

 

UNIXLinuxでパス名の表現が異なるため、Javaでは抽象パス名を導入しています。

これによりシステムに依存せずにパス名を表現できます。

 

パス名を入力するコンストラク 

コンストラクタ名 

説明 

File(String pathname) 

指定されたパス名文字列を抽象パス名に変換 

Fileオブジェクトを生成 

File(String parent, String child) 

親パス名文字列および子パス名文字列から 

Fileオブジェクトを生成 

File(File parent, String child) 

親抽象パス名及び子パス文字列から 
Fileオブジェクトを生成 

 

◆ストリーム 

ファイルへのデータ書き出し・読み込みなどデータ送受信を連続的に行うものをストリーム(データの流れ)といいます。

 

ストリームの抽象クラス 

大きく分けると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() 

UTF-8形式でエンコードされた文字列を読み込む 

 

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弾をまとめたいと思います。

最後まで読んでくださりありがとうございました。