8

我正在为 android 开发一个聊天室应用程序。我阅读了不同的教程;其中一些使用 PrintWriter 发送数据,其中一些使用 DataOutputStream。这两者有什么区别?哪个更适合聊天应用程序?

4

3 回答 3

16

来自 java 文档

DataOutputStream允许应用程序以可移植的方式将原始 Java 数据类型写入输出流。然后,应用程序可以使用数据输入流来读回数据。

PrintWriter将对象的格式化表示打印到文本输出流。此类实现了 PrintStream 中的所有打印方法。它不包含写入原始字节的方法,程序应该使用未编码的字节流。

一句话的区别是:

OutputStreams 用于二进制数据。Writers(包括 PrintWriter)用于文本数据

于 2013-06-27T14:52:48.783 回答
1

PrintWriter将所有内容转换为 Ascii 格式。例如:

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 回答
0

两者都是 java.ioDataOutputStreamPrintWriter的两个类。

class DataOutputStream extends FilterOutputStream implements DataOutput {
}

Javadoc

“数据输出流允许应用程序以可移植的方式将原始 Java 数据类型写入输出流。然后应用程序可以使用数据输入流将数据读回。”

 public class PrintWriter extends Writer {
 }

将对象的格式化表示打印到文本输出流。此类实现了 PrintStream 中的所有打印方法。它不包含写入原始字节的方法,程序应该使用未编码的字节流。

于 2013-06-27T15:43:07.630 回答