Java SE7 Gold 取得を目指して (10)


Java SE7 Gold をとりたい…!

本日は第10回目です。

今日のこぼれ話

示唆に富んだ記事を見つけました。
http://www.gizmodo.jp/2016/03/gvb1000.html?utm_source=atom&utm_medium=rss
割と似たような経験ありますよね。一つのことに目を向けすぎたら基本的なことに目がいかないという。
XSS対策とかXSRF対策万全にしてたけど、WebサーバーへのSSH接続はID&Passで試行回数の制限もしていないとか。
ネットワークがつながらねー!と設定周り見直しまくってたら、LANケーブルが抜けてたとか。
調子に乗ってテキストエディタでJava書いたらどうしてもコンパイルが通らず、うんうんうなってたら全角スペースが紛れ込んでたとか、ね…。

本日知ったこと(8章)

  • File

    • システムプロパティからOS依存のプロパティを取得できる
    プロパティ 取得方法 Windows Linux
    改行コード System.getProperty("line.separator")
    System.lineSeparator()(Java7から)
    \r\n \n
    ファイルセパレータ System.getProperty("file.separator") \\ /
    パスセパレータ System.getProperty("path.separator") ; :
  • ストリーム

    • FileInputStream/FileOutputStream
      • バイトストリーム
      • 読み書きはByteデータで行う(文字列を出力すると文字コードで書きだされる)
    • DataInputStream/DataOutputStream
      • バイトストリーム
      • 基本データ型のデータを入出力できる
      • 単体では使用できず、他のStreamをデコレートして使用する
      • 文字列データはUTF-8でエンコーディングされる
    • FileReader/FileWriter
      • キャラクタストリーム
      • 入出力データは自動で変換される
    • BufferedReader/BufferedWriter
      • 文字列をブロック単位で書き込む
      • mark(int readAheadLimit) 現在位置をマークする 引数はマークを保持して読み込める上限値
      • reset() markされた位置へリセットする
      • skip(long n) 指定された文字数スキップする
  • シリアライズ

    • インスタンス変数をシリアライズ対象から外す場合は transient 修飾子
    • 配列・コレクションをシリアライズ対象に含める場合は、要素がすべてシリアライズ可能である必要がある
    • オブジェクトを参照している場合、参照されるオブジェクトもシリアライズ可能である必要がある
    • スーパークラスがSerializableを実装していればサブクラスもシリアライズ可能
    • デシリアライズの際はコンストラクタは呼ばれない
    • サブクラスのみでSerializableを実装していた場合、デシリアライズの際スーパークラスはデフォルトコンストラクタを呼び出してインスタンス化する
  • コンソール

    • Java6から
    • System.console() で取得
    • readPathword() エコーバックのないユーザ入力
  • 書式化(format)

  • ストリームの解析

    • Scannerクラスで簡単な解析を行える
    • useDelimiter(String pattern) で区切り文字設定(デフォルトは空白)
    • hasNext()next() でトークンを取得していく
    • 型ごとに hasNextInt()nextInt() のようなメソッドが用意されている
    • 型違いを hasNextXXX() で取得しようとすると InputMisMatchException

かつて習ったStringTokenizerが非推奨になったときから、正規表現かSplit()で急を凌いできましたがScannerクラスなどというものがあったとは。
まだまだ学ぶことは多そうですね…!