blog

Javaの基本 - IOストリームのまとめ

ノード・ストリームは、データ・ソースに直接接続する低レベルのストリームです。 処理フローは、修飾子の設計パターンに属する層でラップされたノードフローに、直接データソースに接続されません、ノードフローを...

Jan 25, 2020 · 5 min. read
シェア

IO

  • データフローによる分類:入力フロー、出力フロー
  • 扱うデータの種類によって分類:バイトストリーム、キャラクタストリーム
    • バイトストリーム:データをバイト単位で処理。
    • 文字ストリーム:文字単位でデータを処理、文字型データのみ処理可能、コードテーブルに従って文字をマッピング、一度に複数バイトを読み込むことが可能、例:BufferedReader
    • 相違点:読み書きユニットの違い、処理対象の違い
  • 機能による分類:ノードフロー、処理フロー
    • ストリームの処理:BufferedReader、BufferedInputStreamなど、ファイルの最適な処理を実現するためのストリームのパッケージ化。
    • 区別と接続
      • ノードフローは、低レベルのフローは、直接データソースに接続されています。
      • 処理フローノードフローパッケージング層は、修飾子の設計モードに属し、直接データソースに接続されません、処理フローを介してノードフローをパッケージ化する別のノードフローの違いの実装を排除することができますが、また、入力と出力を完了するために、より便利な方法を提供します。
      • 処理フローの機能は、主に次の2つの側面に反映されます。
        • 性能向上:主にバッファを増やして入出力の効率を向上させる方法。
        • 操作の利便性:処理ストリームは、一度に大量のコンテンツを入出力する一連の便利な方法を提供する可能性があり、むしろ入出力ではなく、1つまたは複数の液滴処理ストリームは、任意の既存のストリームの上にグラフトすることができます。

一般的なバイトストリーム

  • バイト入力ストリーム
    • InputStreamはすべてのバイト入力ストリームの親クラスで、抽象クラスです。
    • ByteArrayInputStreamStringBufferInputStreamPipedInputStream、StringBuffer、FileInputStreamは、それぞれByte配列、StringBuffer、ローカルファイルからデータを読み取る3つの基本的なメディアストリームです。 PipedInputStreamは、他のスレッドと共有されるパイプからデータを読み取るストリームです。
    • ObjectInputStream および FilterInputStream のすべてのサブクラスは、装飾されたストリームです。
  • バイト出力ストリーム
    • OutputStream はすべての出力バイト・ストリームの親クラスで、抽象クラスです。
    • ByteArrayOutputStreamOutputStream は、すべての出力バイト・ストリームの親クラスで、抽象クラスです。
    • ObjectOutputStream および FilterOutputStream のすべてのサブクラスは、装飾ストリームです。
  • バイトストリームの入力と出力の対応
    基本的に入力ストリームには、それに対応する出力ストリームがありますが、いくつかの特殊なバイトストリームがあります。
  • LineNumberInputStreamストリームからデータを読み込む主な完了は、対応する行番号を取得します、いつ分岐するかについては、どこで分岐するかは、クラスを変更するイニシアチブによって決定されますが、元にはそのような行番号はありません。LineNumberOutputStream出力セクションには対応するセクションがなく、最初の書き込みで、ベースラインの行番号があり、新しい行に遭遇するたびに、次の行に行番号が追加されますを作成することができ、それはOKのようです。さらに異例なようです。
  • PushbackInputStreamの機能は、最後のバイトを見て、満足していなければバッファに入れることです。主にコンパイラの構文解析と字句解析の部分で使用されます。BufferedOutputStream 出力部もほぼ同様の機能を実装しています。
  • StringBufferInputStreamこれは非推奨であり、InputStreamセクションそのものにあるべきものではありません。主に、Stringは文字ストリームのスコープに属するとされているからです。すでに非推奨なので、もちろんOutputセクションにも必要ありません!まだ許される唯一の理由は、後方互換性を維持するためです。
  • SequenceInputStreamは、2つ以上の入力ストリームをあたかも1つの入力ストリー ムのように順次読み込むユーティリティクラスと考えることができます。IOパッケージの構造にまったく影響を与えることなく、IOパッケージから取り除くことができます。
  • PrintStreamはヘルパーツールとも言えます。主に、他の出力ストリーム、またはFileInputStreamの書き込みデータ、独自の内部実装、またはバッファリングを使用します。本質的には、他のストリームを統合的に使用するためのツールです。System.outとSystem.inはPrintStreamのインスタンスです!
  • 文字入力ストリーム リーダー
    • Reader はすべての入力文字ストリームの親クラスで、抽象クラスです。
    • PipedReaderは他のスレッドと共有されているパイプからデータを読み込みます。
    • BufferedReader は明らかにデコレータであり、このデコレータとそのサブクラスは他の Reader オブジェクトをデコレートする責任があります。
    • FilterReader は、すべてのカスタム・コンクリート装飾ストリームの親クラスで、そのサブクラス PushbackReader は、行番号を追加して Reader オブジェクトを装飾します。
    • InputStreamReaderは、変換ストリームである , ブリッジのバイトストリームと文字ストリームに接続されている , それは文字ストリームにバイトストリームになります。 FileReaderは、この関数であると言うことができる , 一般的に使用されるツールクラス , そのソースコードでは、明らかにReaderメソッドにFileInputStreamを変換するために使用されます .このクラスからいくつかのヒントを得ることができます。
    • Readerの各クラスの使い方は、基本的にInputStreamと同じです。
  • 文字出力ストリーム ライター
    • Writerはすべての出力文字ストリームの親クラスで、抽象クラスです。
    • CharArrayWriterとStringWriterはそれぞれChar配列とStringに書き込む2つの基本的なメディアストリームで、PipedWriterは他のスレッドと共有するパイプに書き込みます。
    • BufferedWriter は、Writer にバッファリング機能を提供するデコレータです。
    • PrintWriterとPrintStreamはよく似ており、機能や使い方もよく似ています。
  • 文字ストリームの入力と出力の対応表
    最後に、Java IOストリーム全体の分類表を追加します。
Read next

vueのライフサイクルのまとめ

インスタンスはメモリ上に作成されたばかりで、まだデータとメソッドを初期化していません。この時点では、観測データとイベントメカニズムは形成されておらず、domノードを取得することはできません。 この時点でマウントされたインスタンスは、まだ特定の dom 要素を取得できませんが、vue マウント ...

Jan 25, 2020 · 1 min read