JAVA IO操作総括——ノードフローと処理フロー

3183 ワード

この文章は抜粋しているhttp://www.svn8.com/java/yy/20100420/29575.htmlよくまとめられていて、千編一律のioまとめを見てから、この1編を見ると茅塞顿開の感じがします.
JAVA IO操作総括——ノードフローと処理フロー  ストリームが特定の場所(ディスク、メモリ、デバイスなど)に直接接続されているかどうかによって、ノードストリームと処理ストリームの2種類に分けられます.
≪ノード・フロー|Node Flow|emdw≫:特定の場所(ノード)からデータを読み書きできます.FileReaderのように
≪ストリームの処理|Process Streams|emdw≫:既存のストリームの接続とパッケージングであり、パッケージングされたストリームの機能呼び出しによってデータの読み書きを実現します.BufferedReaderのように.ストリームを処理する構造方法は、常に他のストリームオブジェクトをパラメータとして使用します.1つのストリームオブジェクトは、ストリームのリンクと呼ばれる他のストリームの複数回パッケージされます.
よく使用されるノードフロー
親InputStream OutputStream Reader Writer
ファイル*FileInputStream FileOutputStrean FileReader FileWriterファイルで処理されるノードフロー
数組*B yteArrayInputStream B yteArrayOutputStream CharArrayReader CharArrayWriter配列を処理するノードフロー(対応するのはファイルではなくメモリ内の配列)
文字列*StringReader StringWriterなしで文字列を処理するノードフロー
パイプ*PipedInputStream PipedOutputStream PipedReader PipedWriterパイプを処理するノードフロー
汎用処理フロー(処理フローを閉じるには内側のノードフローを閉じる)
親InputStream OutputStream Reader Writer
バッファフロー*BufferedImputStrean BufferedOutputStream BufferedReader BufferedWriter----親をパラメータとして構成する必要があり、バッファ機能を追加し、頻繁にハードディスクを読み書きすることを避け、バッファデータのサイズを初期化することができます.バッファ機能が付いているので、データを書くときにflushメソッドを使用する必要があります
変換ストリーム*InputStreamReader OutputStreamWriter-inputStreamまたはOutputStreamをパラメータとしてバイトストリームから文字ストリームへの変換
データ・ストリーム*DataInputStream DataOutputStream-ベース・データ型をファイルに書き込むか、読み込みます.なぜこのストリームがあるのでしょうか.このような分析を見ると、このようなストリームがなければ、longが1つあり、それ自体は8バイトしか占めていません.もし私がファイルに書き込むには文字列に変換し、文字配列に変換する必要があります.それでは空間が多くなりますが、このようなストリームがあれば便利です.この8バイトをファイルに直接書くと終わります.メモリを節約してプログラムを書きやすくしたのではないでしょうか.書くのは簡単ですが、読むときは注意してください.読むデータ型によってポインタが下に移動するので、書く順序と読む順序が一致しなければ、正しいニーズを達成できません.
  *ObjectInputStream ObjectOutputStream
*シーケンス化の検討がてら---オブジェクトが存在するタイプをすべてバイナリに変換し、メディアに書き込む
*transientキーワード--メンバー変数を修飾し、そのメンバー変数を書き込まない
*Serializableインタフェース--インタフェースを表します.どのように実現するかを示します.シーケンス化の前に、まず(オブジェクトinstanceof Serializable)trueを返すとシーケンス化が実行され、No者は異常を投げ出し、あるオブジェクトをすばやく検索するために使用されるIDが入っています
*Externalizableインタフェース--外部化インタフェース;彼はSerializableインタフェースのサブインタフェースで、シーケンス化の方式を手動で制御することができます
なぜwriteUTF()を使うのか--utf-8で書かれているので、デフォルトではutf-16はスペースを節約するだけです
--バイトストリームが中国語を読み取る問題
*Javaはunicode符号化を使用しているため、中国語文字1文字あたり2バイトを占有しているため、1バイトだけを読み出して使用していないと当然文字化けしてしまうのですが、普通の英字文字でも2バイトですが、読み取りの際に上位8ビットを外しても正しい英字文字に戻ることができるので問題ありません.文字ストリームで読み取るのがベストです
--java.ioでは印刷用のストリームを専門に提供しています(このようなストリームは書き込み時に自動flushの機能があるので、印刷ごとに1回flushする必要はありません)--彼らも処理ストリームに属していることに注意してください.ここでは単独で分析しています
*PrintStream--継承元-->FilterOutputStream--継承元-->OutputStream(構造関数にはOutputStreamオブジェクトが必要)
*PrintWriter---継承元-->Writer(そのコンストラクション関数にはWriterオブジェクトが必要)
  System.In====InputStream
  System.Out===PrintStream
このようなストリームのprintメソッドは異常を投げ出すことはありません.これはJSP技術でよく使われるストリームです.JSPページの印刷で異常を投げ出すとしたら、JSPも書きにくいです.このような設計構想を理解することに注意する.
--こんなコードを見て
  PrintStream ps=new PrintStream(new OutputStream("c://..."));

  System.setOut(ps);

  System.Out.println("jfdajsflkajdf");//
これにより、コマンドラインウィンドウに印刷されるのではなく、指定されたPrintStreamターゲットファイルに印刷されます.
この文書は[Svn中国語網]から転送されます.当駅の住所を残してください.http://www.svn8.com/java/yy/20100420/29575_2.html