8

Android用のチャットルームアプリケーションに取り組んでいます。さまざまなチュートリアルを読みました。PrintWriter を使用してデータを送信するものもあれば、DataOutputStream を使用するものもあります。これら2つの違いは何ですか?チャットアプリならどっちがいい?

4

3 に答える 3

16

Java ドキュメントから

DataOutputStreamを使用すると、アプリケーションはプリミティブ Java データ型を移植可能な方法で出力ストリームに書き込むことができます。その後、アプリケーションはデータ入力ストリームを使用してデータを読み戻すことができます。

PrintWriterオブジェクトのフォーマットされた表現をテキスト出力ストリームに出力します。このクラスは、PrintStream にあるすべての印刷メソッドを実装します。プログラムがエンコードされていないバイトストリームを使用する必要がある生のバイトを書き込むためのメソッドは含まれていません。

一文で違いは次のとおりです。

OutputStreams は、バイナリ データ用です。ライター (PrintWriter を含む) はテキスト データ用です。

于 2013-06-27T14:52:48.783 に答える
1

PrintWriterすべてをアスキー形式に変換します。例えば:

PrintWriter pw = new PrintWriter(new File("./test.txt"));        
        for (Integer word: words) {
            pw.println(word);
        }

pw.printin(word)このコード ブロックで、 ;を呼び出して 単語の種類 (ここでは整数) に関係なく、プログラムはそれを ASCII 形式に変換して格納します。その結果、保存されたデータを取得して再度読み取りたい場合、プログラムはテキストから元の形式に変更する別のタイプを実行する必要があります。・時間効率が悪い!たとえば、その単語が整数である場合、それをファイル (現在はテキスト) に格納した後、プログラムはそれを取得するときに、その形式を文字列から整数に変更する必要があります!

ただし、DataOutPutStreamデータ型を保持することでデータをバイトに格納するため、すべてがはるかに簡単になります。したがって、次のブロックを実行すると、プログラムは整数をバイトとして格納し、型を変更する必要がないことを取得したい場合。整数として保存され、整数として取得されます。だから、それははるかに高速です!

DataOutputStream dos = new DataOutputStream(
            new FileOutputStream(new File("test2.txt")));

    for (Integer word: words) {
        dos.writeUTF(word);   
 }
dos.close();
于 2016-06-09T19:51:16.277 に答える