JavaのPrintstream紹介_動力ノードJava学院の整理

23730 ワード

PrintStream紹介
PrintStreamは、FilterOutputStreamに引き継がれるプリント出力ストリームである。
PrintStreamは、他の出力ストリームをデコレーションするために用いられる。他の出力ストリームに様々なデータ値表示形式を容易に印刷する機能を追加することができる。
他の出力ストリームと違って、PrintStreamは永遠にIOExceptionを投げ出さない。これによって生成されたIOExceptionは自身の関数によってキャプチャされ、エラーフラグを設定します。ユーザーはcheckErr()を通じてエラーマークを返すことができます。PrintStream内部でIOExceptionが発生しているかどうかを確認します。
また、PrintStreamは自動flashと文字セット設定機能を提供しています。自動flashとは、PrintStreamに書き込まれたデータがすぐにflash関数を呼び出します。
PrintStream関数一覧 

/* 
 *     
 */
//  “   out”  PrintStream    ,    flush,         
//   “  flush”,      print(), println(), write()  ,    flush()  ;
//  “   flush”,         flush()  。
PrintStream(OutputStream out)
//  “   out”  PrintStream    ,  flush,         。
PrintStream(OutputStream out, boolean autoFlush)
//  “   out”  PrintStream    ,  flush,  charsetName   。
PrintStream(OutputStream out, boolean autoFlush, String charsetName)
//   file   FileOutputStream,    FileOutputStream  PrintStream    ,   flush,       。
PrintStream(File file)
//   file   FileOutputStream,    FileOutputStream  PrintStream    ,   flush,  charsetName   。
PrintStream(File file, String charsetName)
//   fileName   FileOutputStream,    FileOutputStream  PrintStream    ,   flush,       。
PrintStream(String fileName)
//   fileName   FileOutputStream,    FileOutputStream  PrintStream    ,   flush,  charsetName   。
PrintStream(String fileName, String charsetName)
//  “  c”   “PrintStream    ”
PrintStream  append(char c)
//  “     start(  ) end(   )     ”   “PrintStream    ”
PrintStream  append(CharSequence charSequence, int start, int end)
//  “         ”   “PrintStream    ”
PrintStream  append(CharSequence charSequence)
// flush“PrintStream         ”,     
boolean  checkError()
//   “PrintStream   ”
synchronized void  close()
// flush“PrintStream         ”。
//   ,PrintStream    FileOutputStream,   flush           
synchronized void  flush()
//   “Locale (    )”      
PrintStream  format(Locale l, String format, Object... args)
//   “   Locale (    )”      
PrintStream  format(String format, Object... args)
//  “float  f      ”   “PrintStream   ” ,print      write  
void  print(float f)
//  “double  d      ”   “PrintStream   ” ,print      write  
void  print(double d)
//  “     str”   “PrintStream   ” ,print      write  
synchronized void  print(String str)
//  “  o      ”   “PrintStream   ” ,print      write  
void  print(Object o)
//  “  c      ”   “PrintStream   ” ,print      write  
void  print(char c)
//  “    chars      ”   “PrintStream   ” ,print      write  
void  print(char[] chars)
//  “long   l      ”   “PrintStream   ” ,print      write  
void  print(long l)
//  “int  i      ”   “PrintStream   ” ,print      write  
void  print(int i)
//  “boolean  b      ”   “PrintStream   ” ,print      write  
void  print(boolean b)
//  “  args”  “Locale (    )”  format   ,    “PrintStream   ” 
PrintStream  printf(Locale l, String format, Object... args)
//  “  args”  “  Locale (    )”  format   ,    “PrintStream   ” 
PrintStream  printf(String format, Object... args)
//  “   ”   “PrintStream   ” ,println      write  
void  println()
//  “float        +   ”   “PrintStream   ” ,println      write  
void  println(float f)
//  “int        +   ”   “PrintStream   ” ,println      write  
void  println(int i)
//  “long        +   ”   “PrintStream   ” ,println      write  
void  println(long l)
//  “  o      +   ”   “PrintStream   ” ,println      write  
void  println(Object o)
//  “    chars      +   ”   “PrintStream   ” ,println      write  
void  println(char[] chars)
//  “   str+   ”   “PrintStream   ” ,println      write  
synchronized void  println(String str)
//  “  c      +   ”   “PrintStream   ” ,println      write  
void  println(char c)
//  “double        +   ”   “PrintStream   ” ,println      write  
void  println(double d)
//  “boolean        +   ”   “PrintStream   ” ,println      write  
void  println(boolean b)
//    oneByte   “PrintStream   ” 。oneByte   int  ,           
synchronized void  write(int oneByte)
//  “buffer  offset   length   ”   “PrintStream   ” 。
void  write(byte[] buffer, int offset, int length)
注意:print()とprintln()は、いずれもパラメータを文字列に変換した後、入力ストリームに書き込みます。
例えば、

print(0x61); 
に等しい

write(String.valueOf(0x61));
上記のステートメントは、文字列97を出力ストリームに書き込みます。0 x 61に対応する十進数は97です。

write(0x61)
上の文は文字'a'を出力ストリームに書き込みます。0 x 61に対応するASCIIコードのアルファベット'a'ですので。
下記のコードを確認してください。これらの関数についてより明確な認識ができます。 
PrintStreamソース分析(jdk 1.7.40ベース) 

 package java.io;
 import java.util.Formatter;
 import java.util.Locale;
 import java.nio.charset.Charset;
 import java.nio.charset.IllegalCharsetNameException;
 import java.nio.charset.UnsupportedCharsetException;
 public class PrintStream extends FilterOutputStream
  implements Appendable, Closeable
 {
  //   flush
  //   “  flush”,      print(), println(), write()  ,    flush()  ;
  //  “   flush”,         flush()  。
  private final boolean autoFlush;
  // PrintStream       。 PrintStream      ,      ,   trouble true
  private boolean trouble = false;
  //         
  private Formatter formatter;
  // BufferedWriter  ,    “PrintStream     ”。
  //   PrintStream OutputStream   ,           ;
  //   BufferedWriter     ,      OutputStreamWriter  PrintStream   BufferedWriter  ,       。
  private BufferedWriter textOut;
  private OutputStreamWriter charOut;
  private static <T> T requireNonNull(T obj, String message) {
   if (obj == null)
    throw new NullPointerException(message);
   return obj;
  }
  //   csn        
  private static Charset toCharset(String csn)
   throws UnsupportedEncodingException
  {
   requireNonNull(csn, "charsetName");
   try {
    return Charset.forName(csn);
   } catch (IllegalCharsetNameException|UnsupportedCharsetException unused) {
    // UnsupportedEncodingException should be thrown
    throw new UnsupportedEncodingException(csn);
   }
  }
  //  “   out”  PrintStream    ,autoFlush flush  ,         。
  private PrintStream(boolean autoFlush, OutputStream out) {
   super(out);
   this.autoFlush = autoFlush;
   this.charOut = new OutputStreamWriter(this);
   this.textOut = new BufferedWriter(charOut);
  }
  //  “   out”  PrintStream    ,  flush,  charsetName   。
  private PrintStream(boolean autoFlush, OutputStream out, Charset charset) {
   super(out);
   this.autoFlush = autoFlush;
   this.charOut = new OutputStreamWriter(this, charset);
   this.textOut = new BufferedWriter(charOut);
  }
  //  “   out”  PrintStream    ,  flush,  charsetName   。
  private PrintStream(boolean autoFlush, Charset charset, OutputStream out)
   throws UnsupportedEncodingException
  {
   this(autoFlush, out, charset);
  }
  //  “   out”  PrintStream    ,    flush,         
  public PrintStream(OutputStream out) {
   this(out, false);
  }
  //  “   out”  PrintStream    ,  flush,         。
  public PrintStream(OutputStream out, boolean autoFlush) {
   this(autoFlush, requireNonNull(out, "Null output stream"));
  }
  //  “   out”  PrintStream    ,  flush,  charsetName   。
  public PrintStream(OutputStream out, boolean autoFlush, String encoding)
   throws UnsupportedEncodingException
  {
   this(autoFlush,
    requireNonNull(out, "Null output stream"),
    toCharset(encoding));
  }
  //   fileName   FileOutputStream,    FileOutputStream  PrintStream    ,   flush,       。
  public PrintStream(String fileName) throws FileNotFoundException {
   this(false, new FileOutputStream(fileName));
  }
  //   fileName   FileOutputStream,    FileOutputStream  PrintStream    ,   flush,  charsetName   。
  public PrintStream(String fileName, String csn)
   throws FileNotFoundException, UnsupportedEncodingException
  {
   // ensure charset is checked before the file is opened
   this(false, toCharset(csn), new FileOutputStream(fileName));
  }
  //   file   FileOutputStream,    FileOutputStream  PrintStream    ,   flush,       。
  public PrintStream(File file) throws FileNotFoundException {
   this(false, new FileOutputStream(file));
  }
  //   file   FileOutputStream,    FileOutputStream  PrintStream    ,   flush,  csn   。
  public PrintStream(File file, String csn)
   throws FileNotFoundException, UnsupportedEncodingException
  {
   // ensure charset is checked before the file is opened
   this(false, toCharset(csn), new FileOutputStream(file));
  }
  private void ensureOpen() throws IOException {
   if (out == null)
    throw new IOException("Stream closed");
  }
  // flush“PrintStream         ”。
  //   ,PrintStream    FileOutputStream,   flush           
  public void flush() {
   synchronized (this) {
    try {
     ensureOpen();
     out.flush();
    }
    catch (IOException x) {
     trouble = true;
    }
   }
  }
  private boolean closing = false; /* To avoid recursive closing */
  //   PrintStream
  public void close() {
   synchronized (this) {
    if (! closing) {
     closing = true;
     try {
      textOut.close();
      out.close();
     }
     catch (IOException x) {
      trouble = true;
     }
     textOut = null;
     charOut = null;
     out = null;
    }
   }
  }
  // flush“PrintStream         ”,     
  public boolean checkError() {
   if (out != null)
    flush();
   if (out instanceof java.io.PrintStream) {
    PrintStream ps = (PrintStream) out;
    return ps.checkError();
   }
   return trouble;
  }
  protected void setError() {
   trouble = true;
  }
  protected void clearError() {
   trouble = false;
  }
  //    b   “PrintStream   ” 。b   int  ,           
  public void write(int b) {
   try {
    synchronized (this) {
     ensureOpen();
     out.write(b);
     if ((b == '
') && autoFlush) out.flush(); } } catch (InterruptedIOException x) { Thread.currentThread().interrupt(); } catch (IOException x) { trouble = true; } } // “buf off length ” “PrintStream ” 。 public void write(byte buf[], int off, int len) { try { synchronized (this) { ensureOpen(); out.write(buf, off, len); if (autoFlush) out.flush(); } } catch (InterruptedIOException x) { Thread.currentThread().interrupt(); } catch (IOException x) { trouble = true; } } // “buf ” “PrintStream ” 。 private void write(char buf[]) { try { synchronized (this) { ensureOpen(); textOut.write(buf); textOut.flushBuffer(); charOut.flushBuffer(); if (autoFlush) { for (int i = ; i < buf.length; i++) if (buf[i] == '
') out.flush(); } } } catch (InterruptedIOException x) { Thread.currentThread().interrupt(); } catch (IOException x) { trouble = true; } } // “ s” “PrintStream ” 。 private void write(String s) { try { synchronized (this) { ensureOpen(); textOut.write(s); textOut.flushBuffer(); charOut.flushBuffer(); if (autoFlush && (s.indexOf('
') >= )) out.flush(); } } catch (InterruptedIOException x) { Thread.currentThread().interrupt(); } catch (IOException x) { trouble = true; } } // “ ” “PrintStream ” 。 private void newLine() { try { synchronized (this) { ensureOpen(); textOut.newLine(); textOut.flushBuffer(); charOut.flushBuffer(); if (autoFlush) out.flush(); } } catch (InterruptedIOException x) { Thread.currentThread().interrupt(); } catch (IOException x) { trouble = true; } } // “boolean ” “PrintStream ” ,print write public void print(boolean b) { write(b ? "true" : "false"); } // “ c ” “PrintStream ” ,print write public void print(char c) { write(String.valueOf(c)); } // “int i ” “PrintStream ” ,print write public void print(int i) { write(String.valueOf(i)); } // “long l ” “PrintStream ” ,print write public void print(long l) { write(String.valueOf(l)); } // “float f ” “PrintStream ” ,print write public void print(float f) { write(String.valueOf(f)); } // “double d ” “PrintStream ” ,print write public void print(double d) { write(String.valueOf(d)); } // “ s” “PrintStream ” ,print write public void print(char s[]) { write(s); } // “ s” “PrintStream ” ,print write public void print(String s) { if (s == null) { s = "null"; } write(s); } // “ obj ” “PrintStream ” ,print write public void print(Object obj) { write(String.valueOf(obj)); } // “ ” “PrintStream ” ,println write public void println() { newLine(); } // “boolean + ” “PrintStream ” ,println write public void println(boolean x) { synchronized (this) { print(x); newLine(); } } // “ x + ” “PrintStream ” ,println write public void println(char x) { synchronized (this) { print(x); newLine(); } } // “int + ” “PrintStream ” ,println write public void println(int x) { synchronized (this) { print(x); newLine(); } } // “long + ” “PrintStream ” ,println write public void println(long x) { synchronized (this) { print(x); newLine(); } } // “float + ” “PrintStream ” ,println write public void println(float x) { synchronized (this) { print(x); newLine(); } } // “double + ” “PrintStream ” ,println write public void println(double x) { synchronized (this) { print(x); newLine(); } } // “ x+ ” “PrintStream ” ,println write public void println(char x[]) { synchronized (this) { print(x); newLine(); } } // “ x+ ” “PrintStream ” ,println write public void println(String x) { synchronized (this) { print(x); newLine(); } } // “ o + ” “PrintStream ” ,println write public void println(Object x) { String s = String.valueOf(x); synchronized (this) { print(s); newLine(); } } // “ args” “ Locale ( )” format , “PrintStream ” public PrintStream printf(String format, Object ... args) { return format(format, args); } // “ args” “Locale ( )” format , “PrintStream ” public PrintStream printf(Locale l, String format, Object ... args) { return format(l, format, args); } // “ Locale ( )” public PrintStream format(String format, Object ... args) { try { synchronized (this) { ensureOpen(); if ((formatter == null) || (formatter.locale() != Locale.getDefault())) formatter = new Formatter((Appendable) this); formatter.format(Locale.getDefault(), format, args); } } catch (InterruptedIOException x) { Thread.currentThread().interrupt(); } catch (IOException x) { trouble = true; } return this; } // “Locale ( )” public PrintStream format(Locale l, String format, Object ... args) { try { synchronized (this) { ensureOpen(); if ((formatter == null) || (formatter.locale() != l)) formatter = new Formatter(this, l); formatter.format(l, format, args); } } catch (InterruptedIOException x) { Thread.currentThread().interrupt(); } catch (IOException x) { trouble = true; } return this; } // “ ” “PrintStream ” public PrintStream append(CharSequence csq) { if (csq == null) print("null"); else print(csq.toString()); return this; } // “ start( ) end( ) ” “PrintStream ” public PrintStream append(CharSequence csq, int start, int end) { CharSequence cs = (csq == null ? "null" : csq); write(cs.subSequence(start, end).toString()); return this; } // “ c” “PrintStream ” public PrintStream append(char c) { print(c); return this; } }
説明:
PrintStreamのソースコードは比較的簡単です。上記の注釈を読んでください。分からないところがあったら、まず後のPrintStreamの使用例を見てください。役割と使い方を確認してからソースを読みます。
PrintStreamとDataOutputStreamは異なる点です。
同じ点:他の出力ストリームを包装するために、FileOutputStreamを継承します。
違い点:
(01)PrintStreamとDataOutputStreamはデータをフォーマットして出力することができます。しかし、「出力文字列」では符号化が異なります。
       PrintStreamは出力時にユーザが指定した符号化(PrintStreamを作成するときに指定された)を採用し、指定がない場合はシステムのデフォルトの文字符号化を採用する。DataOutputStreamはUTF-8を採用しています。
(02)それらの書込みデータの場合の異常処理メカニズムは異なります。
       DataOutputStreamは、write()を介して「出力ストリーム」にデータを書き込む際に、IOExceptionが発生すると投げます。
       PrintStreamは、write()を介して「出力ストリーム」にデータを書き込む際に、IOExceptionが発生すると、write()にキャプチャ処理が行われます。trueマークを設定します。ユーザは、chockError()を介してtrouble値を返し、出力ストリームに異常が発生しているかどうかを確認することができる。
(03)構造関数が異なる
       DataOutputStreamのコンストラクタは一つだけです。Data Output Stream(Output Stream out)。つまり、「DataOutput Streamの出力ストリーム」として出力ストリームoutのみをサポートします。
       PrintStreamの構造関数は多くあります。Data OutputStreamと同じように、出力ストリームoutを「PrintStream出力ストリーム」の構造関数としてサポートします。「Fileオブジェクト」または「Stringタイプのファイル名オブジェクト」としてのコンストラクションもサポートします。
       また、PrintStreamのコンストラクタでは、「文字セットを指定する」と「自動flash()操作をサポートするかどうか」ができます。
(04)目的が異なる
       DataOutputStreamは他の出力ストリームを装飾する役割を果たしています。それはData InputStreamと協力して使用します。アプリケーションはマシンと無関係に一階の入力ストリームからjavaデータタイプを読み書きできます。
       PrintStreamの役割は、他の出力ストリームを装飾することでもあるが、マシンとは無関係に、一階からjavaデータタイプを読むことが目的ではない。他の出力ストリームのために様々なデータ値を印刷する形式を提供し、他の出力ストリームをprint()、print()、print()、またはprintf()などを介して様々なフォーマットのデータを出力することができるようにする。
サンプルコード
PrintStreamにおけるAPIの詳細な使い方については、例示コード(PrintStream Test.java)を参照する。    

import java.io.PrintStream;
 import java.io.File;
 import java.io.FileOutputStream;
 import java.io.IOException;
 /**
 * PrintStream      
 *
 * 
 */
 public class PrintStreamTest {
  public static void main(String[] args) {
   //   3          :     “abcde”     “file.txt” 。
   //         !
   testPrintStreamConstrutor() ;
   //testPrintStreamConstrutor2() ;
  //testPrintStreamConstrutor3() ;
   //   write(), print(), println(), printf()   。
   testPrintStreamAPIS() ;
  }
  /**
  * PrintStream(OutputStream out)      
  *
  *      ,     “abcde”     “file.txt” 
  */
  private static void testPrintStreamConstrutor() {
  // 0x61  ASCII    'a',0x62  ASCII    'b', ...
  final byte[] arr={0x61, 0x62, 0x63, 0x64, 0x65 }; // abced
   try {
    //     “file.txt” File  
    File file = new File("file.txt");
    //       FileOutputStream
    PrintStream out = new PrintStream(
      new FileOutputStream(file));
    //  “    arr”         
    out.write(arr);
    //      
    out.close();
   } catch (IOException e) {
    e.printStackTrace();
   }
  }
  /**
  * PrintStream(File file)      
  *
  *      ,     “abcde”     “file.txt” 
  */
  private static void testPrintStreamConstrutor2() {
  final byte[] arr={0x61, 0x62, 0x63, 0x64, 0x65 };
   try {
    File file = new File("file.txt");
    PrintStream out = new PrintStream(file);
    out.write(arr);
    out.close();
   } catch (IOException e) {
    e.printStackTrace();
   }
  }
  /**
  * PrintStream(String fileName)      
  *
  *      ,     “abcde”     “file.txt” 
  */
  private static void testPrintStreamConstrutor3() {
  final byte[] arr={0x61, 0x62, 0x63, 0x64, 0x65 };
   try {
    PrintStream out = new PrintStream("file.txt");
    out.write(arr);
    out.close();
   } catch (IOException e) {
    e.printStackTrace();
   }
  }
  /**
  *   write(), print(), println(), printf()   。
  */
  private static void testPrintStreamAPIS() {
   // 0x61  ASCII    'a',0x62  ASCII    'b', ...
  final byte[] arr={0x61, 0x62, 0x63, 0x64, 0x65 }; // abced
   try {
    //       FileOutputStream
    PrintStream out = new PrintStream("other.txt");
    //     “hello PrintStream”+   ,       
    out.println("hello PrintStream");
    //  x       
    // x  ASCII    'A',       'A'
    out.write(0x41);
   //     "65"       。
   // out.print(0x41);     out.write(String.valueOf(0x41));
   out.print(0x41);
    //    'B'       
    out.append('B');
   //  "CDE is 5" +           
    String str = "CDE";
   int num = 5;
    out.printf("%s is %d
", str, num); out.close(); } catch (IOException e) { e.printStackTrace(); } } }
上のコードを実行すると、ソースディレクトリで2つのファイル「file.txt」と「other.txt」が生成されます。
file.txtの内容は以下の通りです。
abcde
other.txtの内容は以下の通りです。

hello PrintStream
A65BCDE is 5
以上は小编が绍介したJavaのPrintstream知识です。皆さんのために役に立つことを望んでいます。もし何か疑问があれば、メッセージをください。ここでも私たちのサイトを応援してくれてありがとうございます。