Chap_IO _流れとプリントの違いはのPrintStreamとのPrintWriter、DataOutputStreamr(D)のストリーム

I.はじめに

  • PrintStreamは、印刷出力ストリームです、それはFilterOutputStreamを継承しています。
  • PrintStreamはほかの出力ストリームを飾るために使用されています。これは、別の出力ストリーム、各種データ値の形式で印刷する、すなわち能力に機能を追加します。
  • PrintStreamはIOExceptionがスローされません。
  • PrintStreamを自動フラッシュ機能と文字セットを提供します。、データのPrintStreamに書き込まれる、いわゆる自動フラッシュは直ちにフラッシュ()関数を呼び出します。

第二に、類似点と相違点:読書の紹介は、あなたがたPrintStreamとDataOutStreamがやや似思います!

  • そして、DataOutStreamの類似点と相違点
    • 2.1類似点
      • 彼らは継承され、FileOutputStream他の出力ストリームを包装するため、。
    • 2.2の違い
      • 2.2.1コーディング側面
        • PrintStreamDataOutputStreamのは、出力データをフォーマットすることができるが、それらは、「出力文字列」に異なる符号化しています。
          出力がされたときのPrintStreamが使用され、ユーザにより指定されたコード(のPrintStreamを作成した時に指定)を指定しない、システムはデフォルトの文字エンコーディングを使用する場合、それはDataOutputStreamのに使用され、UTF-8
      • 2.2.2例外処理のメカニズム
        • DataOutputStreamの「出力ストリーム」へ)(**書き込みデータを書き込み**を渡すときにIOExceptionを生成するときに、スローされます。
        • そして、のPrintStreamによって書き込み()にIOExceptionが発生した場合、データは、「出力ストリーム」に書き込まれ、IN)(書き込みになり捕捉工程 ;及び(異常を示すために使用される)トラブルフラグセットが真です。ユーザ缶()は出力ストリーム異常かどうかをチェックするように、checkErrorによるトラブルの値を返します。
      • 2.2.3コンストラクタの側面:
        • DataOutputStreamのはコンストラクタのみ1: DataOutputStream(OutputStream out)すなわち、唯一の「DataOutputStreamの出力ストリームの」アウト出力ストリームのサポートなど
        • PrintStreamコンストラクタ多く:(1)は、出力ストリームをサポートしコンストラクタ「のPrintStream出力ストリーム」と、(2)、また、「サポートファイルオブジェクト」または「Sのオブジェクトトリングタイプのファイル名の設定」を**機能、(3)、のPrintStreamのコンストラクタでは、「文字セットを指定」と「サポートすることができ、自動的にフラッシュ** **()操作を**
      • 2.2.4目的側面
        • DataOutputStreamをする機能がある装飾他の出力ストリーム、およびDataInputStreamをの組み合わせ:基本となるデータ型Java入力ストリームから読み書きする機械に依存しない方法をアプリケーションに許可します。
        • PrintStream効果もされているが飾られ、他の出力ストリームを、それが方法のJavaデータは基礎となる型から読み出され、マシンに依存しないことを意図されていない;しかし、他の出力ストリームのための形で様々なデータ値を印刷提供容易にすることができる他の出力ストリームの
  • そして、PrintWriterの類似点と相違点
  • 同じポイント:
    • PrintStreamのPrintWriterほぼ同じであるAPI、出力データの種々の形態とすることができる、ほぼ同様の構成方法である、のPrintWriterより受信ライタパラメータ
  • 違い:
    • 出力文字は、側面をエンコードするとき
    • PrintStreamは、文字の出力は、文字がバイトに変換するときに使用されるデフォルトの符号化形式、その結果、別のプラットフォームへのデータ送信、及び他の問題は、デコーダ、制御不可能な因子の存在を使用してインターネットに別のエンコード形式を発生した場合。
    • PrintWriterが通過してもよいライターオブジェクトを文字をバイトに変換する際のパラメータは、プログラマによって指定することができ、符号化フォーマットなので、互換性と優れたコントロール性という。
      OutputStreamWriter(OutputStreamのオプス、W /ライタ文字セットCS)。
    • 所有システムの側面
    • PrintStreamはに属しバイトストリームシステム、のPrintWriterはに属し、ライターから継承された文字ストリームのシステム

三、PrintStreamを使用状況ファイル「data.txtを」に書かれている「ABCDE」:(文字)

  • 手順:見たデータからストリームのファイルの処理

  • ** 1、データは ****プロセスストリームファイルから書き込まれます

    • 出力ストリーム----->ストリームバッファ-----> -----ストリーム変換>ファイルストリーム------>ファイル。
  • 2、データのストリーミングにファイルからプロセス

    • ファイル-----> -----ストリームファイル>ストリーム変換-----> -----ストリームバッファ>入力ストリーム。
  • 3、****のPrintStreamの流れは実質的にすべてのprint(Object obj)オーバーロードを呼び出し、その後、列に対応する最初のデータによって変換され**ライト()**メソッドは、基本となる出力ストリームに書き込む。のPrintStreamストリームは、一般的に使用されるオブジェクトシステム.outファイルは PrintStreamの流れの中に充填したSystem.errにすぎ。

  • 図4に示すように、ファイルの書き込みの効率を改善することに加えて、バッファフローは、文字を使用することができる BufferWriter

    • 3.1、PrintStream (OutputStream out)
       final byte[] arr = {0x61, 0x62, 0x63, 0x64, 0x65 }; //abced
                    
       File file = new File("file.txt");  // 创建文件“file.txt”的File对象
                    
       PrintStream out = new PrintStream( // 创建文件对应FileOutputStream
              new FileOutputStream(file));
                    
       out.write(arr);     // 将“字节数组arr”全部写入到输出流中
       out.close();        // 关闭输出流
      
    • 3.2、PrintStream (File file)
      final byte[] arr = {0x61, 0x62, 0x63, 0x64, 0x65 };
      PrintStream out = new PrintStream ("data.txt");
      out.write(arr);
      out.close();
      
    • 3.3、PrintStream (OutputStream out)
      final byte[] arr = {0x61, 0x62, 0x63, 0x64, 0x65 };
      File file = new File("data.txt");  //创建文件“data.txt”的File对象
                    
      PrintStream out = new PrintStream( //创建文件对应FileOutputStream
           new FileOutputStream(file));
                   
      out.write(arr);     // 将“字节数组arr”全部写入到输出流中
      out.close();        // 关闭输出流
      
  • 3.4、write(), print(), println(), printf()

        PrintStream pS = new PrintStream("other.txt");
             
        pS.println("hello PrintStream");
        pS.write(0x41);    
        pS.print(0x41);    
             
        String str = "CDE";
        pS.printf("%s\n", str);
         /*文件内容如下:
          hello PrintStream
          A65BCDE */
    
    
  • PS:なぜ、そこにされてA65見えますか?書き込み() および**プリント()**ソースコードのオーバーロードされたバージョンの一つは次のように

    /* write(int oneByte)
    对于write(0x41):  ---- 0x41的ACCII码对应 A, */
    public void print(int i) {
     	write(String.valueOf(i));
    }
    pS.print(0x41); == pS.write(String.valueOf(Ox41));
    String.valueOf(65) --> "65";
    

四、PrintWriterの使用状況

  • コンストラクタ
     PrintWriter(OutputStream out / Writer w, boolean autoflush);`---
      /*--因此在传入Writer时,可以配合**转换流**` 
        OutputStreamWriter(OutputStream ops, Charset cs);` */
    
  • 文字セット
     PrintWriter printWriter = new PrintWriter(new
      OutputStreamWriter(System.out, "GB2312"));    
    
  • System.outは、 OutputStreamオブジェクトであります
公開された307元の記事 ウォン称賛48 ビュー8836

おすすめ

転載: blog.csdn.net/qq_43539599/article/details/96973397