質問

違いは何ですか PrintStream そして PrintWriter?これらには多くの共通のメソッドがあるため、私はこれら 2 つのクラスをよく混同します。しかも、全く同じ用途に使えると思います。しかし、違いがなければなりません。そうでなければ、クラスは 1 つだけになります。

アーカイブを検索しましたが、この質問は見つかりませんでした。

役に立ちましたか?

解決

このかもしれない音の軽薄な、しかしPrintStreamOutputStreamプリント、およびPrintWriterプリントWriterへ。 [OK]を、私は明白なことを知らせるための任意のポイントを取得します疑います。しかし、もっとあります。

だから、OutputStreamWriterの違いは何ですか? 両方が主な違いは、OutputStreamされた状態で、ストリームであるWriter文字のストリームであるバイトのストリームです。

バイトのOutputStreamお得な情報であれば、どのようなPrintStream.print(String)でしょうか?これは、デフォルトプラットフォームのエンコーディングを使ってバイトに文字を変換します。デフォルトのエンコーディングを使用すると、別のプラットフォームから移動するとき、それはあなたが一つのプラットフォーム上でファイルを生成し、別の上でそれを消費している場合は特に、バグにつながることができますので、一般的には悪いことです。

Writerを使用すると、典型的には、任意のプラットフォーム依存性を避け、使用するエンコーディングを指定します。

主な目的は、書き込み文字になり、バイトではないので、

なぜ、JDKにPrintStreamを持つわざわざ? PrintStreamは、リーダー/ライターの文字ストリームが導入されたJDK 1.1に先行します。私は事実のためにそれがそのように広く使用されている場合は、Sunが非推奨PrintStreamを持って想像します。 (すべての後、あなたはSystem.outへの各呼び出しは推奨されないAPIの警告を生成したくないでしょう!また、標準出力ストリームにPrintStreamPrintWriterからタイプを変更すると、既存のアプリケーションが壊れていると思います。)

他のヒント

とともに PrintStream プラットフォームのデフォルトのエンコーディングにこだわっています。

PrintStream stream = new PrintStream(output);

とともに PrintWriter ただし、渡すことはできます OutputStreamWriter 特定のエンコーディングを使用します。

PrintWriter writer = new PrintWriter(new OutputStreamWriter(output, "UTF-8"));

利点は、文字が最終的に次のようにならないように、文字を書き込む文字エンコーディングを制御できることです。 文字化け.

はJDK 1.4以降では、PrintStreamのための文字エンコーディングを指定することができます。このように、PrintStreamをとのPrintWriterの違いは唯一、オートフラッシュする行動についてとのPrintStreamはライターをラップすることができないということです。

PrintWriterのような作家は、テキスト出力のためのものである

、ストリームは、バイナリ出力するためのものです。作家はあなたのための文字セットのものを扱います。あなたがやった場合は混乱があなたのバイナリデータをバックアップし、ライターを使用することになります変換のその種を、望んでいないこと、それが想定されますので、ストリームにはありません。

あなたはストリームへとないライターに生のバイトを書き込むことができます。 のPrintWriter のjavadocのリスト他を相違点(最も重要なのは、私は言うだろう、それは生のバイトを解釈できるように、ストリームのエンコードを設定することが可能である)。

からのコアのjava のHorstmann

により、
  

のJavaのベテランはのPrintStreamクラスにし、System.outに起こったものは何でも不思議に思うかもしれません。 Javaでは   1.0、単にドロップでASCII文字にすべてのUnicode文字を切り捨てのPrintStreamクラス   トップバイト。 (当時、Unicodeは依然として16ビットのエンコーディングであった。)明らかに、きれいではなかったこと、または   ポータブルアプローチは、それは、Java 1.1でのリーダーとライターの導入で固定しました。ために   既存のコードとの互換性は、System.in、のSystem.out、およびSystem.errはまだ入力/出力され   ストリームではなく、リーダーやライター。しかし、今のPrintStreamクラスは、内部的にUnicodeに変換します   PrintWriterのと同じ方法で、デフォルトのホストエンコーディング文字。型のオブジェクト   PrintStreamを使用すると、印刷とprintlnメソッドを使用する場合、正確にプリントライターのように動作しますが、とは異なり、   彼らは、ライト(int型)と書き込み(バイト[])メソッドで出力生のバイトにあなたをできるようにライターを印刷します。

のPrintWriterはのPrintStreamの拡張です。

すなわち。特定の目的のためのPrintStreamます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top